打印偶数汇编语言x86

时间:2020-04-18 22:41:31

标签: assembly x86-16 dosbox

我设法编写了用于打印奇数编号的代码。现在,我正在尝试打印偶数,但是连续地我会提示输出错误。我不确定我在哪里错,因为我也尝试了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

1 个答案:

答案 0 :(得分:0)

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
相关问题