- 问题引入
mov ax,-128 ;eax=????ff80h
shl eax,16 ;eax=ff800000h
sar eax,16 ;eax=ffff8000h
- 明明是将-128移入的ax中,为什么ax中存的是ff80h呢?
ff80h转换为十进制=65408 和-128有半毛钱关系? - 当时确实把我给蒙住了
- 很好,多看了你一眼,又发现了知识漏洞
- 首先,我们要知道,负数在计算机中是怎么表示的,详情点此链接 ,这篇文章要搞清楚2的补码是什么、2的补码是怎么得到的、以及它的证明为什么正数加法适用于2的补码
通过阅读文章,来计算一下-128在计算机中到底是怎么表示的
-128=0-128
0000,0000
-1000,0000
借位减
1,0000,0000
- 1000,0000
= 1000,0000
两个1000,0000,是怎么区分正负===通过SF状态标志位
(应该是这样的,计算机肯定是有办法区分正负的)
正数和负数二进制怎么转换为十进制(不会自己搜哦)
所以我们最终得到的-128的二进制是1000,0000的十六进制是
80h,那前面那个ff怎么来的?
上面的是用8位来表示的-128
而ax是16位,-128如果要表示为16位的=0000,0000,1000,0000
高8位通过转换就变成1111,1111,转换为16进制,不就是ff吗
其实本来是在复习移位循环指令的,结果却被它的例题上了一课,果然基础不牢,地动山摇