一、基础
信息以字节为单位存储,即Byte。
1个Byte有8个bit,从高到低是7 6 5 4 3 2 1 0。
第7最高,叫MSB,Most Significant Bit。
第0最低,叫LSB,Least XX。
32位CPU一次操作可以处理32bit个二进制位。因此需要比字节更大的单位。
比如:字(16bit)、双字(32bit)
如果超过了1个Byte,就有个存储顺序的问题。
Inter存一个字,比如0x60 25,存的时候是0x25 0x60的顺序,这是little endian的方式。
Inter不要求字的地址是偶数,如果是偶数,则是一个对准字,如果不是,则称为未对准字。
对应的有big endian方式。在编程前这是首先应该搞清楚的问题。
数据表示
有符号整数用补码。如果用一个字表示一个数,当然有范围问题。
无符号数0~65535
有符号:-32768 ~ 32767
存正整数正常存,存负整数时保存的是数的绝对值取反加1。比如,保存-466,
0000 0001 1101 0010 = 446
1111 1110 0010 1101 取反
1 加1
----------
1111 1110 0010 1110 实际保存的数,按照little endian保存,则0010 1110在前,1111 1110在后。
字符表示需要有一个映射表,ASCII最常用。用7个bit来表示字符。
汉字表示,中国是GB2312-80标准。用两个Byte表示一个汉字。标准映射了了6763个汉字,分成94个区,每区94个位,编号从0xA0开始,不占有ASCII 0x00~0x7F。每个汉字有唯一的区码和位码。
UNicode是另一种字符映射,它将全世界的字符都包括进来,也使用2个Byte。
BCD码,目的是将数据的输入和输出变得简单。存466时,如果用一个字,则
466 = 0001 1101 0010 = 0x01 D2
如果用BCD,则之间看成 0x04 0x66分别进行保存就行了,这是压缩BCD码。
如果不压缩,则看成0x04 0x06 0x06分别保存。
Inter系列CPU支持BCD形式数字处理的指令。