Assembly 循环无法打印字母表

Assembly 循环无法打印字母表,assembly,emu8086,Assembly,Emu8086,我使用的是emu8086汇编语言,我是汇编语言新手。我想用黄色和黑色背景打印所有A-Z字母。我的循环不工作。它一直运行,只显示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 您的程序有两个问题:

我使用的是emu8086汇编语言,我是汇编语言新手。我想用黄色和黑色背景打印所有A-Z字母。我的循环不工作。它一直运行,只显示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

您的程序有两个问题:

  • 循环计数器和要显示的字符都使用
    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
使用字符代码本身作为循环计数器的第二种解决方案:

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

试着在你的头脑中遍历它:你把cl设置为41h,加上1,你写下它,然后循环回到字母表,在那里你……@DavidWohlferd
包括emu8086.ORG 100h
MOV AX,0B800H
MOV DS,AX
MOV CX,25
MOV AH,2
MOV DL,65
alpha:
INC DL
MOV DH,00001110b
;添加DH,1
MOV[BX],DX
循环alpha
RET
现在打印,但A在末尾变成Z,黄色仅应用于开始时为A的Z。如果我错了,请让我知道在DOS下,有两种显示方式:1)在0B800h或2)使用DOS(或BIOS)中断,如
int 21h
。您的新代码试图同时做到这两个方面,这使得它很难阅读。我认为
int21h
没有任何输出属性(颜色)的方法。如果这很重要,您可能需要将字符及其属性都写入内存(方法1),或者与AH=09h一起使用。在观察CX的值时,发现调试器的问题应该很简单。