汇编语言:计数器循环
Assembly language: counter loop
我编写的汇编代码包括:
XOR BL,BL
MOV CX,0
TOP:
INC BL,1
MOV AH,2
MOV DL, BL
INT 21H
LOOP TOP
循环执行了很多次(肯定超过 10,000 次)。这么长时间的循环执行背后可能的原因是什么?我是汇编语言的新手,发现与 CX=0 相关的代码没有任何效率。提前致谢。
您的计数器 cx
未正确初始化。指令 loop
做了两件事:
dec cx ;◄■■■ DECREASE THE COUNTER.
jnz label ;◄■■■ IF COUNTER IS NOT ZERO, JUMP TO LABEL TO REPEAT.
在您的代码中,计数器 cx
被初始化为零,因此,当 loop
指令执行时,它执行 cx - 1
,即 0 - 1
,因此 cx
变为 0ffffh
并且您的循环将重复 0ffffh
次。
将另一个值移至您的计数器 cx
,例如 mov cx, 10
,这样您的循环将重复 10 次。
Intel loop
指令先递减 CX 寄存器,然后检查零条件。
在 TOP:
测试之前将 CX 设置为 1。
我编写的汇编代码包括:
XOR BL,BL
MOV CX,0
TOP:
INC BL,1
MOV AH,2
MOV DL, BL
INT 21H
LOOP TOP
循环执行了很多次(肯定超过 10,000 次)。这么长时间的循环执行背后可能的原因是什么?我是汇编语言的新手,发现与 CX=0 相关的代码没有任何效率。提前致谢。
您的计数器 cx
未正确初始化。指令 loop
做了两件事:
dec cx ;◄■■■ DECREASE THE COUNTER.
jnz label ;◄■■■ IF COUNTER IS NOT ZERO, JUMP TO LABEL TO REPEAT.
在您的代码中,计数器 cx
被初始化为零,因此,当 loop
指令执行时,它执行 cx - 1
,即 0 - 1
,因此 cx
变为 0ffffh
并且您的循环将重复 0ffffh
次。
将另一个值移至您的计数器 cx
,例如 mov cx, 10
,这样您的循环将重复 10 次。
Intel loop
指令先递减 CX 寄存器,然后检查零条件。
在 TOP:
测试之前将 CX 设置为 1。