我已经设法编写了打印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
调用将保留标志,但您应该将cmp
和jge
保持在一起。
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