好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 Insist_2020 于 2021-7-25 12:31 编辑
转移指令(JCC)
1.JMP指令:无条件转移指令(修改EIP的值)
<1>16位CPU的JMP指令的分类:
jmp short 标号 功能为:段内短转移 (IP)=(IP)+8位位移
(1)8位位移=标号处的地址-jmp指令后的第一个字节地址
(2)short指明的此处是8位位移
(3)8位位移的范围为-128-127,用补码表示
(4)8位位移是编译程序时在编译时算出的
jmp near ptr 标号 功能为:段内近转移 (IP)=(IP)+16位位移
(1)16位位移=标号处的地址-jmp指令后的第一个字节地址
(2)near指明的此处是16位位移
(3)16位位移的范围为-32768-32767,用补码表示
(4)16位位移是编译程序时在编译时算出的
jmp far ptr 标号 功能为:段间转移,far ptr指明了用标号的段地址(CS)和偏移地址(IP)
(1)修改CS:IP,让cpu指向目的地址,这是直接给出目的地址,不是根据位移
<2>32位CPU的JMP指令的分类:
(1)near,short与16位的本质相同
jmp far ptr 标号
(1)32位位移=标号处的地址-jmp指令后的第一个字节地址
(2)far指明的此处是32位位移
(3)32位位移的范围为-2147483648-2147483647(0x80000000-0x7FFFFFFF),用补码表示
(4)32位位移是编译程序时在编译时算出的
<3>CPU执行指令的过程
(1)从EIP处向内存单元读取指令,指令进入缓冲区
(2)EIP=EIP+指令的长度,CPU指向下一条指令
(3)执行指令,重复步骤1继续循环
<4>JMP指令的格式:
(1) JMP 寄存器/立即数/内存地址 ==> MOV EIP,寄存器/立即数/内存地址
2.CALL/RET指令:共同用来实现子程序的设计
(1)CALL 地址A/寄存器 ==> PUSH 当前EIP(CALL下一条指令的地址;不理解可以查看上面的CPU执行指令的过程)
MOV EIP,地址A/寄存器 ==> JMP 地址A/寄存器 (CALL指令实现转移的方法和jmp指令的原理相同)
(2) RET ==> LEA ESP,[ESP+4] ==> POP EIP
MOV EIP,[ESP-4] ==> JMP [ESP-4]
2.CMP/TEST指令
<1>CMP指令:该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结构并不保存到第一个操作数中。
只是根据相减的结果来改变零标志位的(AF CF OF PF SF ZF)当两个操作数相等的时候,ZF标志位置1。指令格式:CMP R/M,R/M/IMM
(1) CMP 寄存器,寄存器:两个寄存器数据宽度必须一致
(2) CMP 寄存器,立即数:寄存器宽度与立即数的数据宽度必须一致
(2) CMP 寄存器,内存:寄存器宽度与内存宽度必须一致
<2>TEST指令:该指令在一定程序上和CMP指令时类似的,两个数值进行与操作,结果不保存,但是会改变相应标志位(CF OF PF SF ZF)。指令格式:TEST R/M,R/M/IMM
(1)常见用法:用这个指令,可以确定某寄存器是否等于0。例如:TEST EAX,EAX(观察Z位)
2.JCC指令:指条件跳转指令,CC就是指条件码
<1>JE/JZ指令:结果为零则跳转(相等时跳转);ZF=1
<2>JNE/JNZ指令:结果不为零则跳转(不相等时跳转);ZF=0
<3>JS指令:结果为负则跳转;SF=1
<4>JNS指令:结果为非负则跳转;SF=0
<5>JPE/JP指令:结果最低字节中1的个数为偶数则跳转 ;PF=1
<6>JNP/JPO指令:结果最低字节中1的个数不为偶数则跳转;PF=0
<7>JO指令:结果溢出了则跳转;OF=1
<8>JNO指令:结果没有溢出则跳转;OF=0
<9>JB/JNAE指令:小于则跳转 (无符号数);CF=1
<10>JAE/JNB指令:大于等于则跳转 (无符号数);CF=0
<11>JBE/JNA指令:小于等于则跳转 (无符号数);CF=1 or ZF=1
<12>JA/JNBE指令:大于则跳转(无符号数);CF=0 and ZF=0
<13>JL/JNGE指令:小于则跳转 (有符号数);SF≠ OF
<14>JNL/JGE指令:大于等于则跳转 (有符号数);SF=OF
<15>JLE/JNG指令:小于等于则跳转 (有符号数);ZF=1 or SF≠ OF
<16>JG/JNLE指令:大于则跳转(有符号数);ZF=0 and SF=OF
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|