当前位置:网站首页>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
当然不会产生溢出。
边栏推荐
猜你喜欢
【服务器数据恢复】SAN LUN映射出错导致文件系统数据丢失的数据恢复案例
Super hot summer air conditioner
BETA:一个用于计算药物靶标预测的综合基准
Heap series_0x0A: 3 methods to solve the heap overflow problem at once
智慧灯杆网关智慧交通应用
MySQL 5.5系列安装步骤教程(图解版)
Detailed explanation of three pieces in C language
【燃】是时候展现真正的实力了!一文看懂2022华为开发者大赛技术亮点
一.字符 字符串 指针字符
Heap series_0x09: Example of heap corruption (illegal access + uninitialized + heap handle mismatch)
随机推荐
CompletableFuture异步线程优化代码
Chapter 5: Visualizing Geospatial Data
开始记录自己的学习过程和目标
The web project accesses static resources inside the jar
初识C语言(1)
2022国赛Ezpop
#yyds干货盘点# 面试必刷TOP101:删除有序链表中重复的元素-II
一个程序员的水平能差到什么程度?
五.初始指针
网络——TCP拥塞控制
Volatile:JVM 我警告你,我的人你别乱动
【科普】关于平板电脑的那些事
yolov5训练并生成rknn模型以及3588平台部署
pgsql备份工具,哪个比较好?
Collection of DP Optimization Methods
使用SourceTree添加SSH公钥并克隆码云项目(笔记整理篇)
The use of websocket in uni-app Disconnection, reconnection, heartbeat mechanism
MySQL索引的B+树到底有多高?
[Server data recovery] Data recovery case of file system data loss caused by SAN LUN mapping error
动态内存管理,触及本质的最详解析