x86汇编_标志寄存器OF和CF的区别_笔记_30

本文探讨了计算机中OF和CF标志在加减运算中的作用,解释了无符号数和有符号数的区别,以及如何根据位宽判断是否发生溢出或进位。通过示例说明了不同位宽下,溢出和进位的判断,并指出溢出和进位的本质是存储空间不足导致的。
摘要由CSDN通过智能技术生成

OF在visual studio里叫OV,CF在visual studio里叫CY。

在寄存器和内存里永远只有0和1,可以理解为计算机是不知道正负的。11111110当作无符号数看待是254,当作有符号数看待是-2。是人按照约定的规则来评判一段内存或寄存器里的内容,才有所谓的无符号、正和负。

虽然计算机无所谓正负数,但人有所谓,这就是OF和CF产生的原因。

数字加减的过程中可能OF和CF会同时变化。把数字当有符号时要观察OF的变化而不用理会CF,把数字当作无符号时要观察CF的变化而不必理会OF。

OF和CF是否发生变化,还与目标操作数的容量有关系。

MOV AL,0x7EH
ADD AL,0x5BH
;结果AL=D9

以上结果OF=1溢出,CF=0没有进位(也可以理解为没有溢出)。

把7E和5B视为无符号,那么AL最大能表示FF(255),D9(217)可以放进AL寄存器。因为AL是8位,最大储存11111111,D9的二进制是11011001,用AL足够储存,无需进位因此CY=0。

当把一组二进制数视为有符号数,二进制第一位是0的视为正数,是1的视为负数

把7E和5B视为有符号,按照补码标准它们都是正数,结果是+217。此时AL最大能表示7F(127),D9(217)无法表示。因为AL是8位寄存器,最多只能储存01111111(+127),D9的二进制11011001按照补码标准应该解读为-39,但这里属于有符号运算,必须把结果解读为+217,按补码标准只有011011001(9个位)才能表示,AL寄存放不下9个位,所以OV=1,提醒结果溢出。

mov al, 7EH
add ax, 5BH

由于ax是16位,011011001(+217)才9个二进制位,所以结果不溢出OV=0。

总结,溢出和进位本质是在指定大小的空间内,0和1不够存放,无法表示某个数字,必须使用上一级的空间。对于CPU空间是按8、16、32、64位寄存器逐级增加,对于内存空间则是按1、2、4、8字节逐级增加。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值