每 5 个循环添加新行 MASM

Add new line every 5 loops MASM

我正在尝试在我正在编写的汇编程序中正确格式化输出,但我发现很难使用 ECX 寄存器来跟踪我正在进行的循环并根据该值。

我想每 5 次循环添加一个新行 运行s,并且我尝试使用 ECX 寄存器的模数来执行此操作,但没有成功。我正在使用 Irvine32 库。

我正在尝试做这样的事情:

mov    ecx, someNumber

the_loop:
    cmp    0, ecx mod 5
    je     fifth_loop
    jmp    continue

    fifth_loop:
        call    CrLf

    continue:
        loop    the_loop

这显然 运行 不正确。虽然我认为逻辑是合理的,但我不知道在语法上如何将模数与 ECX 寄存器一起使用。我知道我可以将 DIV 与 EAX 和 EDX 寄存器一起使用,但我已经在使用 EAX 和 EBX 寄存器来计算斐波那契数列(这是我程序的目标。)

有几个选项。 如果您 运行 缺少寄存器,您可以将它们的值存储在堆栈或内存中,并在不再需要寄存器后恢复原始值。

另一种选择是数到 5,然后执行 CrLf 并重置计数器:

    mov    ecx, someNumber
    mov    edx, 1
the_loop:
    cmp    edx, 5
    je     fifth_loop
    inc    edx
    jmp    continue
fifth_loop:
    call    CrLf
    mov     edx, 1
continue:
    loop    the_loop

这里只需要edx,另外还有其他的寄存器

SomeWittyUsername 的答案的较小版本,使用 3 条指令来处理 dx % 5 的东西,而不是 5 条,因为 "cmp dx" 和 "jmp" 是不需要的

    mov    edx, 5
    mov    ecx, someNumber

the_loop:
    ; do the stuff you want inside 'the loop'
    dec    edx
    jnz    continue
fifth_loop:
    call    CrLf
    mov     edx, 5    ; reload counter

continue:
    loop    the_loop