cmp 不工作 - Intel x86 (IA32) 程序集

Posted

技术标签:

【中文标题】cmp 不工作 - Intel x86 (IA32) 程序集【英文标题】:cmp not working - Intel x86 (IA32) Assembly 【发布时间】: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。 我在这里错过了什么?

谢谢!

【问题讨论】:

【参考方案1】:

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

【讨论】:

这行得通,谢谢!但是“幕后”发生了什么?如果是一个字节并且默认为long,其他字节不填充为0吗? 不,它也会从内存中获取以下 3 个字节,无论它们是什么。

以上是关于cmp 不工作 - Intel x86 (IA32) 程序集的主要内容,如果未能解决你的问题,请参考以下文章

32位x86处理器编程架构

X86 X64 X86_64 AMD64 区别

x86 MSR 名称的 IA32 与 MSR 前缀

Intel64和IA-32架构软件开发者手册第1卷:基本架构

被 x86 MOV 指令迷惑

两个 x86 IA32 ISA 指令之间的区别?