day25.什么是JCC

day25.什么是JCC第 25 节 什么是 JCC 这节讲一下 JCC 指令 回想一下在之前的章节里讲过了 能改 EIP 的寄存器的一些指令为 JMP CALL RET 这节讲 JCC 都是可以改 EIP 寄存器的 这个 JCC 指令更改寄存器不像 JMP 指令 这个 JCC 指令属于无条件修改 EIP 寄存器 但是 JCC 这个指令是否要改 EIP 这个寄存器 它需要看一些条件的 主要看标志寄存器的一些位 首先了解一下标志寄存器如下 1 CF 位

大家好,我是讯享网,很高兴认识大家。

第25节:什么是JCC


这节讲一下·JCC指令,回想一下在之前的章节里讲过了,能改EIP的寄存器的一些指令为:JMP、CALL、RET 。这节讲JCC都是可以改EIP寄存器的。这个JCC指令更改寄存器不像JMP指令,这个JCC指令属于无条件修改EIP寄存器,但是JCC这个指令是否要改EIP这个寄存器,它需要看一些条件的,主要看标志寄存器的一些位。首先了解一下标志寄存器如下:

讯享网


1)CF位
这个位主要是用来判断无符号数有没有溢出的情况,如果无符号数字发生进位或者借位的时候它的CF位则设为1,否则设置成0。
例子:
MOV AL,0xFE
ADD AL , 2


0xFE对应的二进制是 1111 1110 如果加2后,CF位变成1,此时进位了(有溢出)


例子:
MOV AL,0x7F
SUB AL , 0xFF


0x7F 对应的二进制是 0111 1111 如果减去 1111 1111 后CF位变成1,此时借位了(有溢出)


2)PF位
PF位通常叫做奇偶校验位,如果结果最低有效位数包含偶数,那么它的P位就会变成1,否则变成0。
例子:
113 二进制数是 0000 0001 0001 0011
将以上这个数放到AL寄存器里,让它在加上1,看PF位的结果为:0000 0001 0001 0100
PF位的结果是1,那说明是偶数。


PF位有什么用呢?用于数据的传输,可以判断数据在传输过程中有没有错误丢失,有没有被修改,那它是如何做到的呢?比如我要传输一个程序为(所有程序在计算机里都是二进制表示),这个数据中包含5个1,在传输的过程中首先跟0进行检验(也就是跟0进行运算),如果是5个1的时候,P位就是0(奇数)。当传输到另一处是再做一次跟0运算,如果再次运算的P位结果是0。说明还是奇数,数据没有丢失或出错。


3)AF位
AF是辅助进位标志,这个标志一般在BCD中被使用,AF什么时候是1或者0呢?只有当下标为3的位发生进位或者借位的时候这个值才会被设置成1,其他情况都是0。


4)ZF位
若结果为0则将其设置成1,反之是0,这个指令经常与CMP或者TEST等指令一起用。
例子:
MOV EAX,100
MOV ECX,100
CMP EAX,ECX


CMP的指令和SUB指令有同样的效果,但是区别在CMP不进行运算,只改变标志位。


例子:
TEST EAX,EAX


TEST指令和AND指令有同样的效果,但是区别在TEST不进行运算,只改变标志位。


5)SF位
SF位只是看一下现在的符号是什么(是正的还是负的)0是正,反之则是1负。
例子:
MOV AL,0x7F
ADD AL , 2


SF通常用于表示正数还是负数。


6)OF位
OF用于有符号数加减运算所得结果是否溢出
可以这样理解:
无符号运算,是否溢出看CF位(CF是1则为溢出,否则没有溢出)
有符号运算,是否溢出看OF位(OF是1则为溢出,否则没有溢出)


例子:
MOV AL, 0x7F
ADD AL , 2


7)DF位
DF位时方向标志控制位主要控制的指令有(MOVS、CMPS、SCAS、LODS、STOS)。设置DF标志指令的自动递增是(从高向低地址方向,或者从低向高的方向)如果想改变DF标志位的值使用STD指令和CLD指令,STD是1,CLD是0。

小讯
上一篇 2025-04-04 14:04
下一篇 2025-03-24 22:37

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/26649.html