打印偶数汇编语言x86



我已经设法编写了打印ODD编号的代码。现在我正在尝试打印偶数,但我不断地提示错误的输出。我不确定哪里错了,因为我也尝试了div命令。有人能帮我把这个修好吗。以下是代码。

.MODEL SMALL
.STACK 100H
.DATA
LF EQU '0DH'
.CODE
MAIN PROC
MOV CX,0001H
MOV DX,0
BACK: 
MOV DL, CH
OR DL, 30H
MOV AH, 2
INT 21H
MOV DL, CL
OR DL, 30H
MOV AH, 2
INT 21H
CMP CL, 9
MOV DL, 20H
MOV AH, 2
INT 21H
JGE UNITSREACHED
ADD CL, 2
JMP UNITSUNREACHED
UNITSREACHED:
ADD CH, 1
MOV CL, 1
CMP CH , 9
JG EXIT
UNITSUNREACHED:
JMP BACK
EXIT:
END MAIN 
MAIN ENDP
CMP CL, 9
MOV DL, 20H
MOV AH, 2
INT 21H
JGE UNITSREACHED

你永远不应该写这样的代码!通常,这个特定的int 21h调用将保留标志,但您应该将cmpjge保持在一起。

MOV DL, 20H
MOV AH, 2
INT 21H
CMP CL, 9
JGE UNITSREACHED

您的代码确实打印了"01 03 05 07 09 11 13 15…"。

要让它打印偶数,您必须使用不同的值设置CX寄存器。使用mov cx, 0000h。您还需要更改触发跳转到UNITSREACHED的值。现在它变成了8(而不是9(。使用cmp cl, 8。第三,不要忘记,当您递增CH时,需要将CL恢复为0(不再恢复为1(。

MOV CX,0000H
...
CMP CL, 8
...
MOV CL, 0

为什么不将JMP UNITSUNREACHED更改为JMP BACK?你不必要地到处乱跳不会有任何收获。

类似地,您可以优化一点写入:

CMP CH , 9
JNG BACK

最新更新