现在有一个十进制数字123,如果我们希望用4位数来表示这个数字可以写成0123,如果用7位数来表示可以写成0000123。同理,对于负数-233,用5位数来表示就是-00233。

乍一看用这种方式来表示数字好像也没啥意义,前面我们学习的寄存器都是8位或16位的,但是,如今的大多数CPU都使用了64位寄存器。

 

我们知道一个十进制数字15D以有符号数格式存放在8位寄存器al中,用二进制来表示的话那就是:0000 1111,最高符号位为零:

mov al,15 		; al = 0000 1111

 

如果把15D存放在16位寄存器ax中,用二进制来表示的话那就是:0000 0000 0000 1111

mov ax,15          ;ax = 0000 0000 0000 1111 

 

如果把15D存放在64位寄存器eax中,用二进制来表示的话那就是:0000 0000 0000 0000 0000 0000 0000 1111

mov eax,15        ;eax=0000 0000 0000 0000 0000 0000 0000 1111

 

 

我们来看一下负数-3在8位的寄存器里面是怎么存放的:

-3的8位原码是1000 0011

-3的8位反码是1111 1100

-3的8位补码是1111 1101

\"\"

我们知道一个有符号数无论正负,在计算机里面都是以补码的形式存放,如果把-3放到一个16位的寄存器,

-3的16位原码是1000 0000 0000 0011

-3的16位反码是1111 1111 1111 1100

-3的16位补码是1111 1111 1111 1101

 

我们可以看到把-3放到一个16位的寄存器中,只要把16位寄存器的高8位全部用符号位填充就行了,如果把一个负数-3放到32位寄存器中,也是以此类推。

收藏 打印