mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
353 字
1 分钟
asm05
2025-11-13

cmp - 比较指令#

cmp <src>, <dest>
cmp rax, 10
==>
sub rax, 10 # 但是 rax 不保存结果
mov rax, 15
cmp rax, 10 # 15 - 10 = 5 (正数)
# 结果:ZF=0, CF=0, SF=0
mov rax, 5
cmp rax, 10 # 5 - 10 = -5 (需要借位)
# 结果:ZF=0, CF=1, SF=1
mov rax, 10
cmp rax, 10 # 10 - 10 = 0
# 结果:ZF=1, CF=0, SF=0

影响的标志位#

  • ZF (零标志) :如果结果为 0,则置 1 (destination == source)
  • CF (进位标志) :如果发生借位/进位,则置 1 (destination < source 无符号比较时)
  • SF (符号标志) :如果结果为负,则置 1
  • OF (溢出标志) :如果发生有符号溢出,则置 1

je, jz, jne, jnz, jns, jo, jno, jp, jnp, jb/jnae/jc, jnb/jae/jnc#

指令含义测试条件
je/jz相等,结果为0ZF = 1
jne/jnz不等/结果不为0ZF = 0
js结果为负SF = 1
jns结果非负SP = 0
jo结果没有溢出OF = 1
jno结果溢出OF = 0
jp奇偶位为1PF = 1
jnp奇偶位不为1PF = 0
jb/jnae/jc低于/不高于/不等于/有借位CF = 1
jnb/jae/jnc不低于/高于等于/无借位CF = 0

div指令#

# 64位除法:RDX:RAX / RCX
mov rdx, 0 # 被除数高64位
mov rax, 100 # 被除数低64位
mov rcx, 3 # 除数
div rcx # 结果:RAX=商, RDX=余数
# RAX = 33, RDX = 1

在使用div 指令的时候效率比较低,不过假如除数为 2x2^x的形式的话,那么他的余数显然是这个除数的低位 我们可以使用 访问这个被除数的低位来获取余数

mul 指令#

.intel_syntax noprefix
mov rax, 10000000000 # RAX = 10,000,000,000
mov rbx, 300 # RBX = 300
mul rbx # RDX:RAX = 10,000,000,000 * 300 = 3,000,000,000,000

标志位影响#

mul 指令会影响以下标志位:

  • CF(进位标志) :如果结果的高半部分(DX/EDX/RDX)不为0,则CF=1
  • OF(溢出标志) :与CF相同
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

asm05
https://yoyolp.github.io/posts/c_asm/asm05/
作者
超级玉米人
发布于
2025-11-13
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录