【问题标题】:Trying to center 4 lines of string in assembly language试图用汇编语言将 4 行字符串居中
【发布时间】: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)。

标签: assembly x86-16 centering bios dosbox


【解决方案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  

【讨论】:

    猜你喜欢
    • 2014-06-06
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 2011-10-10
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多