我对汇编中进位和溢出的理解

关于进位和溢出,我一直分不清楚,直到最近重新学习汇编语言,我对这两个概念产生了新的理解。
下面是代码,我把说明放在代码注释中了。

;//数据传输示例
.386
.model flat, stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD

.data

.code
main PROC

;// 前提:CPU不知道一个数是“有符号”还是“无符号”,这些概念是程序员定义的,程序员可以“选择性”地忽略一些标志位。

;// 进位是无符号数的概念
mov eax, 0
mov al, 0FFh		;// 255
add al, 1			;// CF = 1

;// 溢出是有符号数的概念
mov eax, 0
mov al, +127		;// 7F
add al, 1			;// OV = 1, CF = 1

;// 可以这样理解:0FF是255,已经超出了有符号数的最大范围+127,所以它只能是无符号数255,因此没有溢出
;// 对于+127,显式指定这是个有符号数,而且的确在范围内,因此这就是有符号数,就有溢出的概念

;// 另外对于+127,加1也会产生进位,这是因为 +127 是“有符号”还是“无符号”由程序员决定,
;// 如果程序员认为这是一个无符号数,那么关心进位标志位,忽略溢出标志位;
;// 如果程序员认为这是一个有符号数,那么关心溢出标志位,忽略进位标志位。


INVOKE ExitProcess, 0
main ENDP
END main

这些理解是我个人思考的结果,不保证绝对准确!
如果我的理解不对,希望您能指出,非常感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值