汇编跳转指令

随便找了1个全的,对破解程序非常有用,呵呵
汇编 JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL                
名称 功能 操作数 操作码 模数 寄存器1 寄存器2或内存 位移量 立即数 符号 方向 芯片型号 16位 32位
JO 溢出跳转 $70 10 8086
JNO 不溢出跳转 $71 10 8086
JB 低于跳转 $72 10 8086
JNB 不低于跳转 $73 10 8086
JE 相等跳转 $74 10 8086
JNE 不等跳转 $75 10 8086
JBE 不高于跳转 $76 10 8086
JA 高于跳转 $77 10 8086
JS 负号跳转 $78 10 8086
JNS 非负跳转 $79 10 8086
JP 奇偶跳转 $7A 10 8086
JNP 非奇偶跳转 $7B 10 8086
JL 小于跳转 $7C 10 8086
JNL 不小于跳转 $7D 10 8086
JNG 不大于跳转 $7E 10 8086
JG 大于跳转 $7F 10 8086
JO 溢出跳转 $0F80 10 386 $66
JNO 不溢出跳转 $0F81 10 386 $66
JB 低于跳转 $0F82 10 386 $66
JNB 不低于跳转 $0F83 10 386 $66
JE 相等跳转 $0F84 10 386 $66
JNE 不等跳转 $0F85 10 386 $66
JBE 不高于跳转 $0F86 10 386 $66
JA 高于跳转 $0F87 10 386 $66
JS 负号跳转 $0F88 10 386 $66
JNS 非负跳转 $0F89 10 386 $66
JP 奇偶跳转 $0F8A 10 386 $66
JNP 非奇偶跳转 $0F8B 10 386 $66
JL 小于跳转 $0F8C 10 386 $66
JNL 不小于跳转 $0F8D 10 386 $66
JNG 不大于跳转 $0F8E 10 386 $66
JG 大于跳转 $0F8F 10 386 $66
JO 溢出跳转 $0F80 10 386 $66
JNO 不溢出跳转 $0F81 10 386 $66
JB 低于跳转 $0F82 10 386 $66
JNB 不低于跳转 $0F83 10 386 $66
JE 相等跳转 $0F84 10 386 $66
JNE 不等跳转 $0F85 10 386 $66
JBE 不高于跳转 $0F86 10 386 $66
JA 高于跳转 $0F87 10 386 $66
JS 负号跳转 $0F88 10 386 $66
JNS 非负跳转 $0F89 10 386 $66
JP 奇偶跳转 $0F8A 10 386 $66
JNP 非奇偶跳转 $0F8B 10 386 $66
JL 小于跳转 $0F8C 10 386 $66
JNL 不小于跳转 $0F8D 10 386 $66
JNG 不大于跳转 $0F8E 10 386 $66
JG 大于跳转 $0F8F 10 386 $66
JCXZ 计数一六零跳转 位移8 $E3 10 8086 $67
JECXZ 计数三二零跳转 位移8 $E3 10 386 $67
JMP 跳转 寄16 $FF 11 100 3 8086 $66
JMP 跳转 寄32 $FF 11 100 3 386 $66
JMP 跳转 16[寄16] $FF 0 100 5 8086 $6,766
JMP 跳转 32[寄16] $FF 0 100 5 386 $66 $67
JMP 跳转 16[寄32] $FF 0 100 5 386 $67 $66
JMP 跳转 32[寄32] $FF 0 100 5 386 $6,766
JMP 跳转 16[寄16+位移8] $FF 1 100 5 9 8086 $6,766
JMP 跳转 32[寄16+位移8] $FF 1 100 5 9 386 $66 $67
JMP 跳转 16[寄32+位移8] $FF 1 100 5 9 386 $67 $66
JMP 跳转 32[寄32+位移8] $FF 1 100 5 9 386 $6,766
JMP 跳转 16[寄16+位移16] $FF 10 100 5 9 8086 $6,766
JMP 跳转 32[寄16+位移16] $FF 10 100 5 9 386 $66 $67
JMP 跳转 16[寄32+位移32] $FF 10 100 5 9 386 $67 $66
JMP 跳转 32[寄32+位移32] $FF 10 100 5 9 386 $6,766
JMP 跳转 近16[寄16] $FF 0 100 5 8086 $6,766
JMP 跳转 近32[寄16] $FF 0 100 5 386 $66 $67
JMP 跳转 近16[寄32] $FF 0 100 5 386 $67 $66
JMP 跳转 近32[寄32] $FF 0 100 5 386 $6,766
JMP 跳转 近16[寄16+位移8] $FF 1 100 5 9 8086 $6,766
JMP 跳转 近32[寄16+位移8] $FF 1 100 5 9 386 $66 $67
JMP 跳转 近16[寄32+位移8] $FF 1 100 5 9 386 $67 $66
JMP 跳转 近32[寄32+位移8] $FF 1 100 5 9 386 $6,766
JMP 跳转 近16[寄16+位移16] $FF 10 100 5 9 8086 $6,766
JMP 跳转 近32[寄16+位移16] $FF 10 100 5 9 386 $66 $67
JMP 跳转 近16[寄32+位移32] $FF 10 100 5 9 386 $67 $66
JMP 跳转 近32[寄32+位移32] $FF 10 100 5 9 386 $6,766
JMP 跳转 远16[寄16] $FF 0 101 5 8086 $6,766
JMP 跳转 远32[寄16] $FF 0 101 5 386 $66 $67
JMP 跳转 远16[寄32] $FF 0 101 5 386 $67 $66
JMP 跳转 远32[寄32] $FF 0 101 5 386 $6,766
JMP 跳转 远16[寄16+位移8] $FF 1 101 5 9 8086 $6,766
JMP 跳转 远32[寄16+位移8] $FF 1 101 5 9 386 $66 $67
JMP 跳转 远16[寄32+位移8] $FF 1 101 5 9 386 $67 $66
JMP 跳转 远32[寄32+位移8] $FF 1 101 5 9 386 $6,766
JMP 跳转 远16[寄16+位移16] $FF 10 101 5 9 8086 $6,766
JMP 跳转 远32[寄16+位移16] $FF 10 101 5 9 386 $66 $67
JMP 跳转 远16[寄32+位移32] $FF 10 101 5 9 386 $67 $66
JMP 跳转 远32[寄32+位移32] $FF 10 101 5 9 386 $6,766
JMP 跳转 $EB 10 8086
JMP 跳转 位移16 $E9 10 8086 $66
JMP 跳转 位移32 $E9 10 386 $66
JMP 跳转 $E9 10 8086 $66
JMP 跳转 $E9 10 386 $66
JMP 跳转 远(数段址:)偏移16 $EA 10 8086 $66
JMP 跳转 远(数段址:)偏移32 $EA 10 386 $66
JMP 跳转 数段址:偏移16 $EA 12 8086 $66
JMP 跳转 数段址:偏移32 $EA 12 386 $66
JMPE 跳转扩展 寄16 $0F00 11 110 3 IA64 $66
JMPE 跳转扩展 寄32 $0F00 11 110 3 IA64 $66
JMPE 跳转扩展 16[寄16] $0F00 0 110 5 IA64 $66
JMPE 跳转扩展 32[寄16] $0F00 0 110 5 IA64 $66
JMPE 跳转扩展 16[寄32] $0F00 0 110 5 IA64 $66
JMPE 跳转扩展 32[寄32] $0F00 0 110 5 IA64 $66
JMPE 跳转扩展 16[寄16+位移8] $0F00 1 110 5 9 IA64 $66
JMPE 跳转扩展 32[寄16+位移8] $0F00 1 110 5 9 IA64 $66
JMPE 跳转扩展 16[寄32+位移8] $0F00 1 110 5 9 IA64 $66
JMPE 跳转扩展 32[寄32+位移8] $0F00 1 110 5 9 IA64 $66
JMPE 跳转扩展 16[寄16+位移16] $0F00 10 110 5 9 IA64 $66
JMPE 跳转扩展 32[寄16+位移16] $0F00 10 110 5 9 IA64 $66
JMPE 跳转扩展 16[寄32+位移32] $0F00 10 110 5 9 IA64 $66
JMPE 跳转扩展 32[寄32+位移32] $0F00 10 110 5 9 IA64 $66
JMPE 跳转扩展 位移16 $0FB8 10 IA64 $66
JMPE 跳转扩展 位移32 $0FB8 10 IA64 $66
                           
### 关于汇编语言中的 `CMPQ` 指令跳转指令 #### CMPQ 指令详解 `CMPQ` 是用于比较两个64位整数值的指令。该指令通过计算两个操作数之差并仅设置条件码而不修改任何寄存器的内容[^1]。 ```assembly cmpq %rbx, %rax # 将 RAX 和 RBX 中的值相减,并根据结果设置标志位 ``` 此命令会更新 CPU 的状态标志,特别是零标志 (ZF),符号标志 (SF),溢出标志 (OF) 及进位标志 (CF)[^2]。 #### 跳转指令概述 跳转指令允许程序控制流发生改变。这些指令可以有条件执行也可以无条件执行。对于有条件的跳转指令来说,它们依赖之前由诸如 `CMPQ` 这样的指令所设定的状态标志来进行决策[^3]。 ##### 条件跳转指令举例 - **JE/JZ**: 当 ZF=1(即两数相等或上一次运算的结果为0)时跳跃。 - **JNE/JNZ**: 当 ZF=0(即两数不相等或上次运算结果非零)时跳跃。 - **JL/JS**: 如果 SF=1 则表示负数情况下的小于关系;如果 OF≠SF 表明有带符号溢出,则可能发生错误判断。 下面是一个简单的例子展示如何结合使用 `CMPQ` 和条件跳转: ```assembly .global _start .section .text _start: movq $5, %rax # 设置第一个数字到RAX movq $7, %rbx # 设置第二个数字到RBX cmpq %rbx, %rax # 对比 RAX 和 RBX 的值 je equal # 若两者相同则跳至 'equal' 标签处 not_equal: # 不同情况下继续往下走... # 执行某些代码... jmp end # 结束前跳过其他部分 equal: # 相等情况处理逻辑... # 处理相等情况... end: # 清理工作和退出... movq $60, %rax # Linux 系统调用编号 60 - exit() xorq %rdi, %rdi # 返回给操作系统成功状态码 0 syscall # 发起系统调用以终止进程 ``` 在这个例子中,当 `RAX` 和 `RBX` 中存储的数据被发现相等时,程序将跳转到标签 `equal` 并在那里执行相应的代码路径;如果不相等,则会按照顺序依次运行直到遇到另一个无条件跳转 (`jmp`) 或者到达文件结尾[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值