
问一个关于16进制减法的问题
原题是56h和2Ah相加再减去38h,56h+2Ah=80h我知道,在减38h时先取反加一变成补码就是C8h,然后80h+C8h=48h(略去上溢1)这方法我知道但我有一...
原题是56h和2Ah相加再减去38h,
56h+2Ah=80h我知道,
在减38h时先取反加一变成补码就是C8h,
然后80h+C8h=48h(略去上溢1)
这方法我知道但我有一点疑问:
16进制中2位带符号数如果是以8,9,A,B,C,D,E,F开头的都是负数
2个操作数符号相同而相加结果符号与操作数符号不同时是产生了溢出 是无效的!?
那这里
80h是有符号还是没符号
如果是有符号的话80h+C8h也是产生了负溢出 为什么结果有效?同样56h+2Ah也是产生了正溢出,为什么结果也有效?
不是说产生了溢出的加法是无效的吗?
?能说的详细点吗?
处理器将两个数相加是按照无符号数求得结果,并相应设置进位标志CF;同时,根据是否超出有符号数的范围设置溢出标志OF 是这样理解吗?
那计算机是如何判定加数和被加数是有符号数还是无符号数呢?是不是全部作为无符号数处理?
CF不是只和无符号数有关吗 , OF不是只和有符号数有关吗?
处理器总不能一下认定是有符号数一下认定是无符号数把?? 展开
56h+2Ah=80h我知道,
在减38h时先取反加一变成补码就是C8h,
然后80h+C8h=48h(略去上溢1)
这方法我知道但我有一点疑问:
16进制中2位带符号数如果是以8,9,A,B,C,D,E,F开头的都是负数
2个操作数符号相同而相加结果符号与操作数符号不同时是产生了溢出 是无效的!?
那这里
80h是有符号还是没符号
如果是有符号的话80h+C8h也是产生了负溢出 为什么结果有效?同样56h+2Ah也是产生了正溢出,为什么结果也有效?
不是说产生了溢出的加法是无效的吗?
?能说的详细点吗?
处理器将两个数相加是按照无符号数求得结果,并相应设置进位标志CF;同时,根据是否超出有符号数的范围设置溢出标志OF 是这样理解吗?
那计算机是如何判定加数和被加数是有符号数还是无符号数呢?是不是全部作为无符号数处理?
CF不是只和无符号数有关吗 , OF不是只和有符号数有关吗?
处理器总不能一下认定是有符号数一下认定是无符号数把?? 展开
3个回答
展开全部
是都溢出了,但是溢出后只是标志位置位(CF和OF)而已,算式还是继续的,需要你手动检查标志位 ;
CF没问题;
OF的值是运算结果最高有效位向高位的进位(CF的值)与到最高有效位的进位值异或,其结果发到溢出标志中。例如8位二进制数10000000和11111110相加,第六位想最高有效位的(第七位)无进位,但是第七位向高位有进位值(CF=1);
由于1 XOR 0 = 1,因此OF = 1;
最后的补充了,要是楼主再不明白也没辙了:
CPU如何知道算术运算时有符号运算还是无符号运算的呢?我只能给出一个初步听起来使人发懵的回答:CPU并不知道!CPU在算术运算之后根据一系列逻辑规则(像我上面讲的那段,那其实就是CPU真正判断OF的方法)设置各种状态标志,他并不知道哪些标志队程序员是重要的,程序员自己应该根据之心的操作的类型来选择解释哪些标志和忽略哪些标志;
CF没问题;
OF的值是运算结果最高有效位向高位的进位(CF的值)与到最高有效位的进位值异或,其结果发到溢出标志中。例如8位二进制数10000000和11111110相加,第六位想最高有效位的(第七位)无进位,但是第七位向高位有进位值(CF=1);
由于1 XOR 0 = 1,因此OF = 1;
最后的补充了,要是楼主再不明白也没辙了:
CPU如何知道算术运算时有符号运算还是无符号运算的呢?我只能给出一个初步听起来使人发懵的回答:CPU并不知道!CPU在算术运算之后根据一系列逻辑规则(像我上面讲的那段,那其实就是CPU真正判断OF的方法)设置各种状态标志,他并不知道哪些标志队程序员是重要的,程序员自己应该根据之心的操作的类型来选择解释哪些标志和忽略哪些标志;
参考资料: 《Assembly language for Intel Based Computer》
展开全部
首先告诉你这说法有问题。
16进制中2位带符号数如果是以8,9,A,B,C,D,E,F开头的都是负数
这个要看你编译器和你定义的数据类型有关了。
如果是db那这就是负数了。如果是dw类型那么前面还有008*,009*。
最高位是0了。
不是说产生了溢出的加法是无效的吗?
产生了溢出的加法并不是无效的。不知道你用的什么语言编写的。
溢出后结果不是正确的而已。还是有结果的。汇编中加法溢出可以看cf和of标志位
还要怎么详细???
具体的呢你可以看你电脑->开始->附件->计算器
计算器里面有十六进制。。四字。双字。单字。字节
这么几个选项。
你把你的数据直接输入就可以了。。
运算结果是有的。不管溢出没有。
计算的时候。假设你选择的是字节就有一个2位十六进制的结果。
16进制中2位带符号数如果是以8,9,A,B,C,D,E,F开头的都是负数
这个要看你编译器和你定义的数据类型有关了。
如果是db那这就是负数了。如果是dw类型那么前面还有008*,009*。
最高位是0了。
不是说产生了溢出的加法是无效的吗?
产生了溢出的加法并不是无效的。不知道你用的什么语言编写的。
溢出后结果不是正确的而已。还是有结果的。汇编中加法溢出可以看cf和of标志位
还要怎么详细???
具体的呢你可以看你电脑->开始->附件->计算器
计算器里面有十六进制。。四字。双字。单字。字节
这么几个选项。
你把你的数据直接输入就可以了。。
运算结果是有的。不管溢出没有。
计算的时候。假设你选择的是字节就有一个2位十六进制的结果。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不产生溢出(进位)的加法叫做 XOR 亦即异或
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询