当前位置:网站首页>TMin - TMin是否产生溢出
TMin - TMin是否产生溢出
2022-08-09 15:42:00 【leehyukshuai】
最开始考虑到二进制补码的减法的原则: a − t b = a + t ( − t b ) a-^tb=a+^t(-^tb) a−tb=a+t(−tb),而TMin的负仍为TMin,因此我认为TMin - TMin应该等同于TMin+TMin,所以自然算是产生了溢出。
但是在学习setl指令时,书上讲setb是根据SF^OF来进行判断的,因此我认为,cmpl $0x80000000, $0x80000000(即运算$0x80000000 - $0x80000000)之后,OF=1,SF=0,则setb的结果应该是1,所以得到了悖论$0x80000000 < $0x80000000。
纠结很久,直到自己实实在在地打了一遍汇编代码:
get_OFxorSF:
movl %ecx, %eax
subl %edx, %eax
setl %al
movzbq %al, %eax
ret
get_SF:
movl %ecx, %eax
subl %edx, %eax
sets %al
movzbq %al, %eax
ret
结果发现,当0x80000000-0x80000000时,OF^SF和SF都被置为0。因此OF也为0,即TMin-TMin并未发生溢出。
而当我把上述指令的subl改为addl后,结果是:OF^SF被置为1,SF被置为0,即TMin+TMin发生了溢出。
总结,出现这种纠结,还是对于溢出的定义理解不够深入,溢出,是指计算机计算后得出的结果与单纯的算数运算所得结果不同。 所以说TMin-TMin=0当然不会产生溢出。
边栏推荐
猜你喜欢

The web project accesses static resources inside the jar

Detailed explanation of three pieces in C language

Nacos注册中心 Feign远程调用 Gateway服务网关

5G NR Paging

August 9, 2022: Build .NET apps in C# -- use the Visual Studio Code debugger to interactively debug .NET apps (won't, fail)

如何判断闰年

网络——数据交换方式

如何让button中的内容分两行显示

领先实践|全球最大红酒App如何用设计冲刺创新vivino模式

2022年中国第三方证券APP创新专题分析
随机推荐
Chapter 2: Creating Interactive Maps (2.4-2.6)
2022钉钉杯A题思路及代码:银行卡电信诈骗危险预测
Chapter 4: Using Local Geospatial Data (4.6-4.14)
Heap series_0x0A: 3 methods to solve the heap overflow problem at once
网络——IPV4地址(一)
一.字符 字符串 指针字符
Two ways to find the factorial of n
[1413. Stepwise summation to get the minimum value of positive numbers]
图像几何校正
苹果开发者账号 申请 D-U-N-S 编号
【1413. 逐步求和得到正数的最小值】
IDEA中Lombok插件的安装与使用
Prometheus完整安装
【挨踢(IT)初体验】
<IDEA 使用小技巧&&常用键联合操作>
Redis Cache Expiration and Retirement Policy
uniapp 项目搭建
Three ways to find prime numbers
【MySQL】源码编译MySQL8.x+升级gcc+升级cmake(亲测完整版)
三.两数交换 空指针 && 野指针 解引用问题