我应该更改什么来退出循环?

时间:2016-11-12 16:42:43

标签: for-loop assembly x86

我想我应该改变这一行:

inc byte [nr]

退出循环,我的程序应打印512。

%include "io.inc"
section .data
  nr: db 0x88, 0x1
section .text
  global CMAIN
  CMAIN: 
    for:
      inc byte [nr]
    jnc for
      inc byte [nr + 1]
      PRINT_UDEC 2, nr 
      xor eax, eax
    ret

2 个答案:

答案 0 :(得分:1)

nr接近255的字节限制时,INC将超过它,并从255回绕到0.

不幸的是INC instruction 没有在环绕声中设置 CARRY标志 - 导致无限循环,因为始终满足JNC的条件。< / p>

所以一个解决方案就是改变

inc byte [nr]

add byte [nr], 1

修改?CARRY标志。然后整个算法应该按预期成功。

答案 1 :(得分:0)

您没有指定可以更改的内容。所以在这种情况下:

%include "io.inc"
section .text
  global CMAIN
  CMAIN:
    mov   eax,512
    PRINT_UDEC 4,eax 
    ret   ; and not caring to return 0