您的位置:首页 > Web前端 > JavaScript

汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

2017-11-12 15:01 836 查看
转自:http://www.cnblogs.com/del/archive/2010/04/16/1713886.html http://pan.baidu.com/s/1gVTSi 跳转指令分三类:一、无条件跳转:
JMP  ;无条件跳转
二、根据CX、ECX寄存器的值跳转:
JCXZ ;CX 为 0 则跳转JECXZ;ECX 为 0 则跳转
三、根据EFLAGS寄存器的PSW标志位跳转,这个太多了.根据标志位跳转的指令:
JE   ;等于则跳转			同JZJNE  ;不等于则跳转		同JNZ
JA   ;无符号大于则跳转JNA  ;无符号不大于则跳转JAE  ;无符号大于等于则跳转		同JNBJNAE ;无符号不大于等于则跳转	同JB
JB   ;无符号小于则跳转JNB  ;无符号不小于则跳转JBE  ;无符号小于等于则跳转		同JNAJNBE ;无符号不小于等于则跳转	同JA
JG   ;有符号大于则跳转JNG  ;有符号不大于则跳转JGE  ;有符号大于等于则跳转		同JNLJNGE ;有符号不大于等于则跳转	同JL
JL   ;有符号小于则跳转JNL  ;有符号不小于则跳转JLE  ;有符号小于等于则跳转		同JNGJNLE ;有符号不小于等于则跳转	同JG
JZ   ;为零则跳转JNZ  ;不为零则跳转JS   ;为负则跳转JNS  ;不为负则跳转JC   ;进位则跳转JNC  ;不进位则跳转JO   ;溢出则跳转JNO  ;不溢出则跳转
JP;为偶则跳转
JNP  ;不为偶则跳转
JPE  ;奇偶位置位则跳转		同JP
JPO  ;奇偶位复位则跳转		同JNP
跳转相关的PSW标志位:
11109876543210
OFDFIFTFSFZFAFPFCF
溢出方向中断陷阱符号未用辅助未用奇偶未用进位
影响标志位的汇编指令:
加法指令:ADD、ADC、INC、XADD除了INC不影响CF标志位外,都影响条件标志位。CF、ZF、SF、OFCF最高位是否有进位DF若两个操作数符号相同而结果符号与之相反OF=1,否则OF=0.减法指令:SUB、SBB、DEC、NEG、CMP、CMPXCHG、CMPXCHG8B前六种除了DEC不影响CF标志外都影响标志位。CMPXHG8B只影响ZF。CF说明无符号数相减的溢出,同时又确实是被减数最高有效位向高位的借位。OF位则说明带符号数的溢出无符号运算时,若减数>被减数,有借位CF=1,否则CF=0.OF若两个数符号相反,而结果的符号与减数相同则OF=1.否则OF=0.乘法指令:MUL、IMULMUL:如果乘积高一半为0,则CF和OF位均为0,否则CF和OF均为1.IMUL:如果高一半是低一半符号的扩展,则CF位和OF位均为0,否则就均为1.除法指令:DIV、IDIV对所有条件位均无定义。逻辑指令:AND、OR、NOT、XOR、TESTNOT不影响标志位,其余4种CF、OF、置0,AF无定义,SF、ZF、PF位看情况而定。定位扫描指令:BSF正向位扫描、BSR反向位扫描影响ZF位。
指令类型助记符对标志寄存器的影响备注
ZFCFPFSFOFAFDFIFTF
数据传送类通用MOV不影响标志位
交换XCHG
堆栈操作PUSH
POP
地址传送LEA
LDS
LES
累加器专用IN
OUT
XALT
标志寄存器LAHF
SAHF标志寄存器低八位的内容由AH的值决定CF,AF,ZF,SF,PF的值会被影响
PUSHF不影响标志位
POPF标志寄存器的内容由装入的具体值决定可能影响所有标志位
算术运算类加法ADD
ADC
INCINC指令不影响CF
AAA?表示不确定或者未定义
DAA
减法SUB
SBB
DECDEC指令不影响CF
AAS
DASDAA指令不影响OF
乘法MUL
IMUL
AAM
除法DIV此指令可能会产生中断,故影响IF,TF
IDIV同上
AAD
符号位扩展CBW不影响标志位
CWD不影响标志位
比较CMP由计算结果确定标志位的值不会影响到DF,IF,TF
逻辑运算类单操作数求反NOT不影响标志位
移位SAL见备注OF标志位只在移位次数是1时有效AF未定义
SHL
SAR
SHR
循环移位ROL循环移位指令影响OF和CFAF未定义
ROR
RCL
RCR
双操作数AND置0置0
OR置0置0
异或XOR置0置0
检测TSET置0置0
字符串操作传送MOVS不影响标志位
比较CMPS由计算结果确定标志位的值不会影响DF,IF,TF
搜索SCAS由计算结果确定标志位的值不会影响DF,IF,TF
装入LODS不影响标志位
填充STOS不影响标志位
前缀REP不影响标志位
程序控制类无条件转移JMP不影响标志位
条件转移单个标志位JS/JNSSF=1/0,则转移到目的地址
JZ/ JNZZF=1/0,则转移到目的地址
JP/JNPPF=1/0,则转移到目的地址
JB/JNBCF=1/0,则转移到目的地址
JO/JNOOF=1/0,则转移到目的地址
若干标志位的逻辑组合JA两个无符号数比较,A>B
JBE两个无符号数比较,A <=B
JG两个带符号数比较,A>B
JGE两个带符号数比较,A>=B
JL两个带符号数比较,A<B
JLE两个带符号数比较,A <=B
循环控制LOOP不影响标志位
LOOPE
LOOPNE
JCXZ
JECXZ
中断控制INT不影响标志位
INTO
IRET影响所有标志位标志位到恢复中断以前的状态
CPU控制指令标志位操作CLC此指令置CF=0
CMC此指令CF取反
STC此指令置CF=1
CLD此指令置DF=0
STD此指令置DF=1
4e4c5CLI此指令置IF=0
STI此指令置IF=1
空操作NOP不影响标志位
暂停HLT
等待WAIT
交权ESC
总线锁定前缀LOCK
JMP 测试
; Test28_1.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain procPrintText '1'jmp @FPrintText '2'PrintText '3'@@: PrintText '4'retmain endpend main;测试结果应该是:;1;4;以下都应该是这样.
JE 测试
; Test28_2.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain procPrintText '1'mov eax, 123cmp eax, 123je @FPrintText '2'PrintText '3'@@: PrintText '4'retmain endpend main
JZ 测试
; Test28_3.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain procPrintText '1'xor eax, eaxjz @FPrintText '2'PrintText '3'@@: PrintText '4'retmain endpend main
JS 测试
; Test28_4.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain procPrintText '1'xor eax, eaxdec eaxjs @FPrintText '2'PrintText '3'@@: PrintText '4'retmain endpend main
JC 测试
; Test28_5.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain procPrintText '1'mov al, 0FFhadd al, 1jc @FPrintText '2'PrintText '3'@@: PrintText '4'retmain endpend main
JO 测试
; Test28_6.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain procPrintText '1'mov al, -128sub al, 1jo @FPrintText '2'PrintText '3'@@: PrintText '4'retmain endpend main
JA 测试
; Test28_7.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain procPrintText '1'mov eax, 22cmp eax, 11ja @FPrintText '2'PrintText '3'@@: PrintText '4'retmain endpend main
JG 测试
; Test28_8.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain procPrintText '1'mov eax, 1cmp eax, -1jg @FPrintText '2'PrintText '3'@@: PrintText '4'retmain endpend main
JP 测试
; Test28_9.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain procPrintText '1'mov al, 00001110binc aljp @FPrintText '2'PrintText '3'@@: PrintText '4'retmain endpend main
JECXZ 测试
; Test28_10.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain procPrintText '1'xor ecx, ecxjecxz @FPrintText '2'PrintText '3'@@: PrintText '4'retmain endpend main

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐