-
-
[原创]标志寄存器 OF CF 值判断 和 无符号数和有符号的结果判定
-
发表于:
2021-5-18 00:08
4984
-
[原创]标志寄存器 OF CF 值判断 和 无符号数和有符号的结果判定
标志寄存器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 转化成二进制
那么 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期)