汇编语言:计数器循环

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。