试图用汇编语言将 4 行字符串居中

Posted

技术标签:

【中文标题】试图用汇编语言将 4 行字符串居中【英文标题】:Trying to center 4 lines of string in assembly language 【发布时间】:2022-01-13 03:47:41 【问题描述】:

所以我是汇编语言的新手,我正在尝试将 4 个字符串居中。但我不知道为什么它不起作用。

这些是我在代码中使用的 4 个字符串。当我运行程序时,str1 是唯一一个到中心的。剩下的在左边。

str1 db "ADRIAN PAUL", 0AH, 0DH, "$"
str2 db "BS Computer Science", 0AH, 0DH, "$"
str3 db "09462524725", 0AH, 0DH, "$"
str4 db "macatopaul@gmail.com", 0AH, 0DH, "$"

这是我正在使用的代码:

 MOV AX, @DATA
 MOV DS, AX
 
 MOV AX, 0600H
 MOV BH, 07H
 MOV CX, 0000H ;CLEAR SCREEN
 MOV DX, 184FH
 INT 10H
 
 MOV AX, 0600h
 MOV BH, 07h
 MOV CX, 0000h
 MOV DX, 184Fh
 INT 10h
 
 MOV AH, 02h
 MOV BH, 00h
 MOV DH, 0Ch
 MOV DL, 24h
 INT 10h

MOV AH,09h
MOV DX, OFFSET str1
INT 21h
MOV CX,001Ah
MOV AH, 02h
INT 21h

MOV AH,09h
MOV DX, OFFSET str2
INT 21h
MOV CX,001Ah
MOV AH, 02h
INT 21h

MOV AH,09h
MOV DX, OFFSET str3
INT 21h
MOV CX,001Ah
MOV AH, 02h
INT 21h

MOV AH,09h
MOV DX, OFFSET str4
INT 21h
MOV CX,001Ah
MOV AH, 02h
INT 21h

【问题讨论】:

猜测未注释的汇编代码在做什么是困难的,即使对于有经验的程序员来说也是如此。请在您认为他们应该做什么的各个步骤上添加 cmets cmets。 如果您不希望光标移回屏幕的第一列,那么您可能不应该使用回车符 (0Dh)。 【参考方案1】:
MOV CX,001Ah
MOV AH, 02h
INT 21h

这些行调用 DOS api 函数 02h,该函数可以显示 ASCII 码在 DL 寄存器中的字符。你没有使用DL,所以结果会出乎意料。 也许您试图用 BIOS api 函数 02h 定位光标。鉴于您的任务描述,这将是有道理的。


在输出每个字符串之前最好将光标定位。并且不要在字符串中包含回车符 (13) 和换行符 (10),因为它们不再有意义。

str1 db "ADRIAN PAUL$"
str2 db "BS Computer Science$"
str3 db "09462524725$"
str4 db "macatopaul@gmail.com$"
mov  bh, 0       ; DisplayPage
mov  dx, 0B23h   ; At(35,11)
mov  ah, 02h     ; Bios.SetCursor
int  10h
mov  dx, OFFSET str1
mov  ah, 09h     ; DOS.PrintString
int  21h

mov  dx, 0C1Eh   ; At(30,12)
mov  ah, 02h     ; BIOS.SetCursor
int  10h
mov  dx, OFFSET str2
mov  ah, 09h     ; DOS.PrintString
int  21h

mov  dx, 0D23h   ; At(35,13)
mov  ah, 02h     ; BIOS.SetCursor
int  10h
mov  dx, OFFSET str3
mov  ah, 09h     ; DOS.PrintString
int  21h

mov  dx, 0E1Eh   ; At(30,14)
mov  ah, 02h     ; BIOS.SetCursor
int  10h
mov  dx, OFFSET str4
mov  ah, 09h     ; DOS.PrintString
int  21h

80x25 文本屏幕中心的预期输出:

                                   ADRIAN PAUL
                              BS Computer Science  
                                   09462524725  
                              macatopaul@gmail.com  

【讨论】:

以上是关于试图用汇编语言将 4 行字符串居中的主要内容,如果未能解决你的问题,请参考以下文章

《C程序设计语言》笔记 (十四) 参考手册6

JLabel 中心内容分 3 行

文件拷贝,用C语言实现命令行式的COPY功能

用汇编语言解释这一行?

试图理解这个汇编 x86 代码

C语言如何定义指针指向字符型二维数组