我正在尝试在我正在编写的汇编程序中正确格式化输出,但我发现很难使用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序列(这是我程序的目标。)
答案 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