【问题标题】:cmp not working - Intel x86 (IA32) Assemblycmp 不工作 - Intel x86 (IA32) 程序集
【发布时间】:2017-04-29 20:47:45
【问题描述】:

我正在尝试在汇编中编写一个简单的代码,但在使用 cmp 比较两个值时遇到了麻烦。如果我的值不在 65 到 90 之间,我想跳转到某个点。

 cmp $65, (%ebx)
 jl looping
 cmp $90, (%ebx)
 jg check_minusculas

运行 gdb 我的 %ebx 值为 0x80490f9 并使用:

x /1db 0x80490f9

我知道 (%ebx) 是 77。 但是,当明显 77 时,程序会跳转到 check_minusculas。 我在这里错过了什么?

谢谢!

【问题讨论】:

    标签: assembly x86 intel att


    【解决方案1】:

    您的问题是您忘记使用大小说明符,并且它默认为 long,而您显然想使用字节。解决方法:使用cmpb

    【讨论】:

    • 这行得通,谢谢!但是“幕后”发生了什么?如果是一个字节并且默认为long,其他字节不填充为0吗?
    • 不,它也会从内存中获取以下 3 个字节,无论它们是什么。
    猜你喜欢
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    相关资源
    最近更新 更多