C语言 指令

进位标志CF(无符号)如果运算结果的最高位产生了一个进位或错位,那么,其值为1,否则其值为0。运算结果的最高位包括字操作的第15位和字节操作的第7位。移位指令也会将 操作数的最高位或最低位移入CF。

CF:什么是最高位进位,什么是最高位错位

1000    0000

1000    0001

1111    1111

80-81=FF=-1      CF=1

PF奇偶标志:用于反映运算结果低8位中“1”的个数。“1”的个数为偶数,则PF置1,否则置0。

803

1000    0000    0011

1000    0000    0100

804

1000    0000    0100

814

1000    0001    0100

OF(Overflow Flag)溢出标志:反映有符号数加减运算是否溢出。如果运算结果超过了8位或者16位有符号数的表示范围,则OF置1,否则置0。

加法:若同符号数相加,而结果符号与之相反,则OF=1,否则OF=0。

加法:若不同符号相加,一定没有溢出。

减法:被减数与减数异号,而结果的符号与减数相同则OF=1,否则OF=0。

符号位有进位:1

最高有效数值位向符号位产生的进位:0

1 xor 0==1 所以OF=1

1.JMP指令(无条件跳转指令):修改EIP的值

JMP是汇编语言中的无条件跳转指令。无条件跳转指令可转到内存中任何程序段。转移地址可在指令中给出,也可以在寄存器中给出,或在储存器中指出。

2.CALL指令:CALL 指令调用一个过程,指挥处理器从新的内存地址开始执行。过程使用 RET(从过程返回)指令将处理器转回到该过程被调用的程序点上。

从物理上来说,CALL 指令将其返回地址压入堆栈,再把被调用过程的地址复制到指令指针寄存器。当过程准备返回时,它的 RET 指令从堆栈把返回地址弹回到指令指针寄存器。32 位模式下,CPU 执行的指令由 EIP(指令指针寄存器)在内存中指岀。16 位模式下,由 IP 指出指令。

  1. 比较指令:
  • CMP指令:

cmp指令格式: cmp  操作对象1,操作对象2

功能: 计算操作对象1 - 操作对象2 但不保存结果,仅仅根据计算结果对标志寄存器进行设置.比如cmp ax,ax  是做ax - ax 的运算,结果为0,但并不在ax中保存,仅影响flag的相关各位.

该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结构并不保存到第一个操作数中。

只是根据相减的结果来改变零标志位,当两个操作数相等的时候,零标志位置1。

 

 

② TEST 指令:

指令格式:TEST R/M,R/M/IMM

TEST 指令在两个操作数的对应位之间进行 AND 操作,并根据运算结果设置符号标志位、零标志位和奇偶标志位。

TEST 指令与 AND 指令唯一不同的地方是,TEST 指令不修改目标操作数。TEST 指令允许的操作数组合与 AND 指令相同。在发现操作数中单个位是否置位时,TEST 指令非常有用。

1 and 1 =1

1 and 0= 0

0 and 1= 0

0 and 0= 0

常见用法:用这个指令,可以确定某寄存器是否等于零。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值