[英]Print Even numbers Assembly language x86
我设法编写了打印奇数的代码。 现在我正在尝试打印偶数,但我不断提示输出错误。 我不确定我错在哪里,因为我也尝试了 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.