80x86汇编语言基础知识
1. 程序设计语言
机器语言
汇编语言:机器语言的符号化,与机器密切相关。
(具体来讲,还有面向过程的语言,如C)
高级语言
2.汇编语言的意义
速度:对于同一个问题,用汇编语言设计出的程序能达到“运行速度最快”。
空间:对于同一个问题,用汇编语言设计出的程序能达到“占用空间最少”。
功能:汇编语言可以实现高级语言难以胜任甚至不能完成的任务。
知识:学习汇编语言,有助于对计算机系统的理解、写出更好的程序。
数据表示
数制的基本知识(必须掌握其转换计算)
10进制
(8进制)
2进制
16进制
说明:
前导0可以忽略,不影响取值。
结尾用D(10进制数)、B(2进制数)、H(16进制数)。缺省为十进制数。
数据组织
位(Bit):1个二进制位。
计算机是在特定位数下工作的,如8位、16位、32位等。
字节(Byte):8位。
位编号从右到左为0~7,第0位为最低位,第7位为最高位。
字(Word):16位。
位编号从右到左为0~15,第0位为最低位,第15位为最高位。位0~7为低字节,位8~15为高字节。
双字(Double Word):32位。
位编号从右到左为0~31,第0位为最低位,第31位为最高位。位0~15为低字,位16~31为高字。
无符号数与带符号数
1. 无符号数
N位二进制数可以表示的无符号数范围为0~2N -1。例如,8位二进制数00H~0FFH表示0~255,16位二进制数0000H~0FFFFH表示0~65535。
?
2. 带符号数的补码表示
补码的表示规则:
以最高位作为符号位(0表示正数,1表示负数)。
正数的补码是其本身。
负数的补码是对其正数“各位求反、末位加1”后形成的。
把“各位求反、末位加1”的操作称作求补。求补就是求相反数。
N位二进制补码数可以表示的带符号数范围为-2N-1~2N-1 -1。例如,8位二进制数可以表示 -128~127,16位二进制数可以表示-32768~32767。
3.补码的特性
求补
[x]补 [-x]补
[x + y]补 = [x]补 + [y]补
[x - y]补 = [x]补 + [-y]补
说明:
在计算机内部,补码减法是通过对减数求补后将减法转换为加法进行的。
一个带符号数在不同位数下,其二进制补码表示可能是不同的。例如,8位数-1的补码表示是0FFH, 16位数-1的补码表示是0FFFFH。
4. 补码的物理意义
考虑8位二进制数,其表示范围为0~255,即256 = 0。若将其想象为一个环,以0为基点,向顺时针方向移246个单位,则得246。然而,若按逆时针方向移动,则该位置就是-10。即
-10 = 0F6H = 246
因此,在8位二进制表示下,对于负数x(-128~-1)来说,存在下列等式:
-x = 256 -∣x∣
5. 符号扩展与零扩展
符号扩展是将原符号位填入扩展的每一位,使得在带符号数意义下取值不变。
零扩展是将0填入扩展的每一位,使得在无符号数意义下取值不变。
字符的ASCII码表示
ASCII码字符集采用一个字节表示字符。
常用字符的ASCII码。
数字'0'~'9':30H~39H
字母'A'~'Z':41H~5AH
字母'a'~'z':61H~7AH
空格:20H
回车CR:0DH
换行LF:0AH
空字符:0
注意回车与换行的差别:
CR用来控制光标回到当前行的最左端;LF用来移动光标到下一行,而所在列不变。
BCD码
压缩BCD码
以4个二进制位表示1个十进制位,用0000B~1001B表示0~9。
例如,十进制数6429的压缩BCD码表示为
0110 0100 0010 1001 B(即6429H)
非压缩BCD码
以8个二进制位表示1个十进制位,低4位与压缩BCD码相同,高4位无意义。
例如,十进制数6429的非压缩BCD码表示为
xxxx0110 xxxx0100 xxxx0010 xxxx1001 B
有时,要求非压缩BCD码的高4位为0,这时,6429的非压缩BCD码为06040209H。
可以看出,数字字符 '0'~'9' 的ASCII码恰好是0~9的非压缩BCD码。
*注解
同一个二进制数可以表示多种含义,其具体含义由使用者解释。
例如,二进制数00110000B,即30H,可以当作十进制数48的二进制表示,字符'0'的ASCII码,30的压缩BCD码,0的非压缩BCD码,等等。甚至将其当作现实世界的任一物理对象也未尝不可。
带符号数的二进制补码表示与位数密切相关。
例如0FFH,若作为8位带符号数,则表示-1;若作为16位带符号数,则表示255。再如0FFFFH,若作为16位带符号数,则表示-1;若作为32位带符号数,则表示65535。
基本位操作
1. 逻辑操作:AND、OR、XOR、NOT
AND操作可以使某些位清0。
OR操作可以使某些位置1。
XOR操作可以使某些位取反。
2.移位与循环移位
左移:最低位移入0。在不溢出的情况下,左移1位相当于乘以2。
逻辑右移:最高位移入0。逻辑右移1位约等于无符号数除以2。
算术右移:最高位不变。算术右移1位约等于带符号数除以2。
循环左移与循环右移:从一端移出的位要移入到另一端。