1

我正在使用 emu8086 汇编程序,我是汇编语言的新手。我想以黑色背景的黄色打印所有 AZ 字母。我的循环不工作。它继续运行,只显示 B 字母。
有人可以帮帮我吗?这是我的代码:

include emu8086.inc
ORG 100h
MOV AX,0B800h
MOV DS,AX
MOV CX,26
ALPHABETS:
MOV CL,41h
ADD CX,1
MOV CH,00001110b
MOV BX,0x0000
MOV [BX],CX
loop ALPHABETS
RET
4

1 回答 1

2

你的程序有两个问题:

  • 您将CX寄存器用于循环计数器和要显示的字符。
  • 您忘记更新BX寄存器中的地址,因此所有内容都显示在彼此之上。

CX用作循环计数器的第一个解决方案:

include emu8086.inc
ORG 100h
    MOV     AX, 0B800h
    MOV     DS, AX
    mov     al, "A"       ;First character
    mov     ah, 00001110b ;YellowOnBlack
    mov     bx, 0         ;Address in video RAM
    mov     cx, 26
ALPHABETS:
    mov     [bx], ax
    inc     al            ;Next character
    add     bx, 2         ;Next address
    loop    ALPHABETS
    RET

使用字符代码本身作为循环计数器的第二种解决方案:

include emu8086.inc
ORG 100h
    MOV     AX, 0B800h
    MOV     DS, AX
    mov     al, "A"       ;First character
    mov     ah, 00001110b ;YellowOnBlack
    mov     bx, 0         ;Address in video RAM
ALPHABETS:
    mov     [bx], ax
    inc     al            ;Next character
    add     bx, 2         ;Next address
    cmp     al, "Z"
    jbe     ALPHABETS
    RET
于 2016-11-27T20:06:33.240 回答