本节内容:不同进制数据的编码规则。
■数值数据的编码规则:二进制数、十六进制数和十进制数,以及无符号整数和有符合整数的编码规则。
■基本数据类型:编译器指定的数据类型为基本数据类型。汇编器MASM5.0指定的基本数据类型有BYTE、WORD、DWORD、DQ、DT以及由BYTE类型定义的字符串类型。
4.1.1 数值数据的编码规则
■二进制数:0和1
■十六进制数:
■十进制数:BCD码
●压缩的BCD码:一个字节包含两个十进制数符号,如12H。
●非压缩的BCD码:一个字节只包含一个十进制数符号,如02H。
■无符号整数和有符号整数
无符号整数编码规则:无符号整数全部都是正整数,是什么就存什么,没有符号位。
有符号整数编码规则:最高位为符号位,“0”表示正数,“1”表示负数。
■有符号数的原码、反码、补码
●原码:最高位为符号位,(“0”代表正数,“1”代表负数)其余各位为数值本身的绝对值。
●反码:
正数:反码与原码相同,这是规定。
负数:符号位为1不变,其余位对原码取反。
●补码:
正数:补码与原码相同。
负数:符号位为1不变,其余位对原码取反加1。
■符号扩展
把一个n位二进制数扩展成m位二进制数(m>n)。
无符号数:最高位前扩展(m-n)个0。
有符号数:最高位前扩展(m-n)个符号位。
举例
●无符号整数:扩展0。
8位无符号数扩展为16位无符号数:
0000 0001 8位
0000 0000 0000 0001 16位
●有符号整数:采用补码方式表示,进行符号位的扩展。
例1:21的8位二进制数扩展成16位二进制数
0001 0101 8位
0000 0000 0001 0101 16位
例2:-3的8位二进制数扩展成16位二进制数
1111 1101 8位
1111 1111 1111 1101 16位
■数值数据的表示范围
n位二进制数能够表示的范围。
无符号整数范围:0~2n -1 。
有符号整数范围:-2n-1~+2n-1 -1。
4.1.2 基本数据类型
■字节 byte简写db,一个字节由8位二进制数据位组成,第0位~第7位,字节类型的无符号整数表示范围0~255,如果是有符号数,则数据范围是-128~127。一个字节足以表示一个ASCII码字符,或者一个扩展的ASCII码字符。
■字word 简写dw,一个字由16位二进制数据位组成,一个字等于2个字节,第0位~第15位,由8位高字节+8位低字节组成。表示无符号数的数据范围是0~65535,有符号数的数据范围是-32768~32767。
■双字dword简写dd,2个字组成,双字等于4个字节,包含32位二进制位,由高16位+低16位组成,表示无符号数的数据范围0~232-1,有符号数的数据范围是-231~231-1。
■四字qword简写dq,由2个双字组成,等于4个字或8个字节,包含64位二进制位,分高32位和低32位,表示无符号数的数据范围0~264-1,有符号数的数据范围是-263~263-1。
■字符串,由字符构成的一个线性数组,通常每个字符用一个字节表示,有时也可以用一个字或者双字来表示。例如:'ABCDEF'。
本文摘自编程达人系列教材《X86汇编语言基础教程》。资料下载:www.bcdaren.com