首页
社区
课程
招聘
[原创]标志寄存器 OF CF 值判断 和 无符号数和有符号的结果判定
发表于: 2021-5-18 00:08 4984

[原创]标志寄存器 OF CF 值判断 和 无符号数和有符号的结果判定

2021-5-18 00:08
4984

标志寄存器OF CF 值判断 和 无符号数和有符号的结果判定

of 对于 8位 有符号数据,机器能表示范围-128到127

1
2
3
4
非负数表示 0000 0000 0111 1111
 
补码表示 负数位置 1000 0000 1111 1111
负数换算成原码 加上 符号 得到一般十进制数字

mov ah,7F
mov a1,1
add ah,al

 

mov 指令不改变 of 寄存器的值 初始值 NV
十六进制 7Fh

 

二进制 0111 1111 原码

 

十六进制 1h
二进制 0000 0001 原码

 

运行 add 指令后
ah 十六进制 80h 此时寄存器的值为 OV

1
0111 1111 + 0000 0001 = 1000 0000

此时 第8位 字符为1 超出了有符号数表示的范围 发生了溢出 of 为 OV

 

假定 有十六进制 81h 转化成二进制

1
1000 0000

那么 81h 在计算机中表示的 无符号数和 有符号数 计算后分别是多少呢
无符号数为 129
有符号数为 -127
有符号数转换

1
2
3
1000 0001 补码 81h
0111 1110 反码
0111 1111 原码 -127

在计算机中,当无符号运算中

 

进位标识符 CF 对于 8位无符号数据 129 ,机器能表示范围0到255
此时 OF 为 NV
进位标志寄存器CF 为 NC
无符号运算结果 为82h 二进制表示 1000 0010

 

有符号运算结果 也是为82h
分析如下:
81h 表示的有符号数字
实际数值 -127

 

逻辑运算后结果为 -127 + 1 = -126

1
2
3
4
5
有符号数127二进制转换补码  0111 1111
反码                     1000 0000
原码                     1000 0001
 
129 + 1 = 130

转换十六进制 82h
-126 在有符号数范围内 -128 到 127
此时 OF 也为 NV
进位标志寄存器CF 也为 NC


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
如今都X64了,还在弄16位汇编 
2021-5-18 08:51
0
雪    币: 6
活跃值: (3290)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
OD里面看得更清楚,没必要用远古的dos debug
2021-5-18 18:08
0
游客
登录 | 注册 方可回帖
返回
//