汇编语言中的比较、分支、循环与内存数据操作
1. 比较指令
在之前的程序中,判断 %rcx 是否为零是通过加零并检查标志位来实现的,这种方式不够直观。汇编指令集提供了专门的比较指令和跳转指令,以更清晰地进行数值比较。
cmpq 指令(及其相关的 cmpb 、 cmpw 和 cmpl )用于比较两个数,判断它们的大小关系或是否相等。其内部通过相减操作(但不存储结果)来设置标志位,随后的特殊跳转指令会读取这些标志位,以确定比较结果。
例如,执行 cmpq %rbx, %rax 时,CPU会将 %rax 减去 %rbx ,并设置相应的标志位。标志位能表明 %rbx 和 %rax 是否相等(零标志位被设置)、 %rax 是否大于 %rbx (标志位被清除)或 %rax 是否小于 %rbx (相关标志位设置较复杂)。
比较操作可以在寄存器与寄存器、寄存器与特定值或寄存器与内存值之间进行。若比较寄存器与特定值,该值需放在比较指令的前面。
以下是比较指令后的跳转指令及其功能:
| 跳转指令 | 跳转条件 |
| ---- | ---- |
| je | ARG2
超级会员免费看
订阅专栏 解锁全文
1376

被折叠的 条评论
为什么被折叠?



