每5个循环添加新行MASM

时间:2016-04-12 19:59:54

标签: assembly x86 masm irvine32

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

我想每循环运行5次添加一个新行,并且我尝试使用带有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寄存器来计算Fibonacci序列(这是我程序的目标。)

2 个答案:

答案 0 :(得分:1)

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

另一个选择是计数到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

答案 1 :(得分:0)

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