汇编语言: counter loop

标签 assembly counter x86-16

我编写了一个汇编代码,其中包括:

    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 次。

关于汇编语言: counter loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40045845/

相关文章:

macos - 为什么 Apple 使用 R8l 作为字节寄存器而不是 R8b?

assembly - 从堆栈中弹出而不压入

assembly - 如何用汇编语言在定义双字中存储4个字符?

windows - 汇编中的 Windows 音频

assembly - 条件分支的失败侧是否更有效?将其作为错误处理端是个好主意吗?

memcached - AWS 上的分布式计数器

javascript - Countup.js 颜色数按语句(正面、中性、负面)

ios - 如何在不同的 Viewcontroller 中获取我的计数器

assembly - 在汇编中声明和定义数组和矩阵?

assembly - 递归过程