试图用汇编语言将 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 行字符串居中的主要内容,如果未能解决你的问题,请参考以下文章