天天看点

汇编语言

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。

 循环左移与循环右移:从一端移出的位要移入到另一端。

继续阅读