首页 文章

每5个循环MASM添加新行

提问于
浏览
0

我正在尝试在我正在编写的汇编程序中正确格式化输出,但我发现很难使用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 回答

  • 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 .

  • 0

    SomeWittyUsername的答案的较小版本,对于“cmp dx”使用3个dx%5内容的指令而不是5个,而“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
    

相关问题