Assembly 循环无法打印字母表
我使用的是emu8086汇编语言,我是汇编语言新手。我想用黄色和黑色背景打印所有A-Z字母。我的循环不工作。它一直运行,只显示B字母。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 您的程序有两个问题:
有人能帮我吗?这是我的密码:
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 100hMOV AX,0B800HMOV DS,AXMOV CX,25MOV AH,2MOV 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的值时,发现调试器的问题应该很简单。