[英]Assembly - jmp and cmp result in infinite loop
这是我的代码:
%include "io.inc"
section .data
var DB 0
var2 DB 0
section .text
global CMAIN
print:
PRINT_DEC 1, var
inc BYTE [var]
mov eax, [var]
ret
forLoop:
call print
cmp eax, [var2]
jle forLoop
ret
CMAIN:
GET_DEC 1, var2
call forLoop
ret
这使用 Simple-ASM 的默认库。
当给定输入5
(然后放入var2
)时,我期望输出:
012345
但是,当给出输入5
,我得到了这个:
01234567891011...127128-127-126...-10123...
看来, cmp
和jle
不能正常工作检查两个数字的时候,和forLoop
永远不会停止自称,这导致var
正在不断inc
版。
当我在GET_DEC
语句之后放置PRINT_DEC 1, var2
,如下所示:
CMAIN:
GET_DEC 1, var2
PRINT_DEC 1, var2
call forLoop
ret
并注释掉另一行PRINT_DEC
,根本没有输出。
我怎样才能解决这个问题?
mov eax, [var]
eax
是一个 32 位寄存器,因此该指令将 4 个字节从标签var
复制到eax
。 相似地,
cmp eax, [var2]
将eax
与var2
处的 4 个字节进行比较。 这是一个问题,因为var
和var2
每个只存储 1 个字节。
使固定:
mov al, [var]
和
cmp al, [var2]
分别。 al
是一个 8 位寄存器(它是eax
的最低字节),因此我们可以通过这种方式正确复制/比较 1 字节数量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.