鱼C论坛

 找回密码
 立即注册
查看: 3790|回复: 13

[已解决]关于标志寄存器

[复制链接]
发表于 2017-12-4 10:21:57 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为何对于8位的有符运算范围是-128--127为何不是-256--255,是因为最高位用来代表符号不用来计数的原因吗?假如两个数值进行有浮运算,为何都用补码表示,是因为超过了这个范围?
最佳答案
2017-12-4 11:56:47

要理解补码以及它的一切相关,建议先了解补码的前世今生,请看:


000.png

我们的前辈考虑了很多计算机进行负数计算的问题,首先他们是这么的考虑的:
001.png

上面这种方法行不通以后,他们又考虑了下面的方法:
002.png

结果,他们又发生同样是行不通的,最后,他们终于考虑了补码这个玩意:
004.png

005.png

这就是补码的前世今生。


假如两个数值进行有浮运算,为何都用补码表示,是因为超过了这个范围?
不是,两个有符号数用补码进行计算,是因为补码计算后的结果是自然数学上的正确结果(用补码规则)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-4 11:56:47 | 显示全部楼层    本楼为最佳答案   

要理解补码以及它的一切相关,建议先了解补码的前世今生,请看:


000.png

我们的前辈考虑了很多计算机进行负数计算的问题,首先他们是这么的考虑的:
001.png

上面这种方法行不通以后,他们又考虑了下面的方法:
002.png

结果,他们又发生同样是行不通的,最后,他们终于考虑了补码这个玩意:
004.png

005.png

这就是补码的前世今生。


假如两个数值进行有浮运算,为何都用补码表示,是因为超过了这个范围?
不是,两个有符号数用补码进行计算,是因为补码计算后的结果是自然数学上的正确结果(用补码规则)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-4 13:35:25 From FishC Mobile | 显示全部楼层
兰陵月 发表于 2017-12-4 11:56
要理解补码以及它的一切相关,建议先了解补码的前世今生,请看:



如果10h与90h进行有符加运算如何算,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 16:14:10 | 显示全部楼层
xiaohaituan 发表于 2017-12-4 13:35
如果10h与90h进行有符加运算如何算,

先把10h与90h分别化为16位数据,分别是 0001 0000, 1001 0000,其中0001 0000表示正16,1001 0000表示负112,然后两者相加,结果为-96,用二进制表示为1010 0000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-4 17:58:13 From FishC Mobile | 显示全部楼层
3-3 发表于 2017-12-4 16:14
先把10h与90h分别化为16位数据,分别是 0001 0000, 1001 0000,其中0001 0000表示正16,1001 0000表示负1 ...

为何90h看做是负数,90h是负112的补码,同样10h也可以看成是负240的补码,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 18:50:57 | 显示全部楼层
xiaohaituan 发表于 2017-12-4 17:58
为何90h看做是负数,90h是负112的补码,同样10h也可以看成是负240的补码,

你把10h变为16位的二进制看一下,最高位不是1.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 20:06:30 | 显示全部楼层
本帖最后由 兰陵月 于 2017-12-4 20:17 编辑
xiaohaituan 发表于 2017-12-4 13:35
如果10h与90h进行有符加运算如何算,

如果10h与90h进行有符加运算如何算,


既然进行的是有符号数的运算,表明这两个数都是有符号数。另外楼主你还要告诉这是进行的几位有符号数的运算,是8位?还是16位?还是32位?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 20:15:54 | 显示全部楼层
3-3 发表于 2017-12-4 16:14
先把10h与90h分别化为16位数据,分别是 0001 0000, 1001 0000,其中0001 0000表示正16,1001 0000表示负1 ...

对的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 20:32:38 | 显示全部楼层
xiaohaituan 发表于 2017-12-4 17:58
为何90h看做是负数,90h是负112的补码,同样10h也可以看成是负240的补码,

你这种思考问题的方式还是我们人类的方式,你要从计算机的角度去思考。

第一:要确定进行操作的源操作数和目的操作数的字长。
本题目中,(编写程序的过程中),计算机会要你确定,你要进行相加操作的数的位数是多少?
比如10h和90h相加。
计算机要求两个数字都是相同长度的,如果长度不同,就不能编译,你也无法运行。
在你没有指定的时候,它是默认的,比如8086是默认16位。
比如mov ax,10h;它默认10H是16位的,因为寄存器ax是16位的;
像下面的语句:
mov ax,10h
mov bx,90h
add bx,ax
最终结果在bx为:0000 0000 1010 0000,它的结果是十六进制数00A0H,也即160D,十进制正数160。


又比如mov al,10h;它默认10h是8位的,因为寄存器al是8位的。
对于下面的语句:
mov al,10h
mov bl,90h
add bl,al
最终的结果在bl中:1010 0000,它的结果是十六进制数A0H,也即十进制负数-96。


第二:在确定了源操作数和目的操作数长度后,你思考的时候就要用相同的长度去思考
你的疑问:为何90h看做是负数,90h是负112的补码,同样10h也可以看成是负240的补码,
当90H为8位有符号数的时候,它就是-112;
当90H为8位无符号数的时候,它就是160;
当90H为16位有符号数的时候,它也是+160,实际上它在机器里应该是0090,只不过我们书写的时候把前面00去掉了。


同理
当10h为8位有符号数的时候,它就是+16;.
当10h为8位无符号数的时候,它就是16;
当10h为16位有符号数的时候,它也是+16,实际上它在机器里应该是0010,我们书写或者编程的时候同样去掉前面的0


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 20:39:54 | 显示全部楼层
xiaohaituan 发表于 2017-12-4 17:58
为何90h看做是负数,90h是负112的补码,同样10h也可以看成是负240的补码,

记住下面这些,很重要,否则你的脑袋会不断纠结,最后打死结。
计算机并不知道这个数是有符号数还是无符号数。它只认识0和1。
我所说的前辈们搞的补码这个玩意,是给我们这些程序员进行理解用的。
换句话说:
你说它是补码,那它就是补码;你说它是原码,那它就是原码。
你说它是有符号数,那它就是有符号数;你说它是无符号数,那它就是无符号数。

最后,请校正你的脑袋。那就是:
当我想它是补码的时候,跟它有关联的数据和运算,在脑袋里默默运算时,都要在补码的基础上进行思考。
当我想它是有符号数的时候,跟它有关联的数据和运算,在脑袋里默默运算时,都要在有符号数的基础上进行思考。

以下同理推断。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 20:42:09 | 显示全部楼层
本帖最后由 兰陵月 于 2017-12-4 20:50 编辑

希望你能迅速理解,反正我当初没有迅速理解得了,最后只好不去理解,因为反正结果正确。最后在无休止的苦逼学习中,慢慢悟出来了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 20:48:46 | 显示全部楼层
本帖最后由 兰陵月 于 2017-12-4 20:52 编辑
xiaohaituan 发表于 2017-12-4 17:58
为何90h看做是负数,90h是负112的补码,同样10h也可以看成是负240的补码,

-240这个数,你是永远无法用最高为1的8位二进制来表示的,不信打个赌~
当然,它是可以用最高位为1的16位二进制数来表示的。
既然它是16位的,那前面的90H也要看成是16位的。
16位的90H的二进制为:0000 0000 1001 0000
这样看,它的最高为变成了0,很明显,此时它已经是一个正数了。
所以要在数据长度一样的基础上来理解,就是这个道理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-4 22:44:48 From FishC Mobile | 显示全部楼层
谢谢老哥,辛苦了,说的这么仔细
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-5 11:58:25 | 显示全部楼层
xiaohaituan 发表于 2017-12-4 22:44
谢谢老哥,辛苦了,说的这么仔细

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 01:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表