繁体   English   中英

打印偶数汇编语言 x86

[英]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调用会保留标志,但你应该保持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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM