第1章基础知识 讲授要点 认识汇编语言 数据表示 基本位操作 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 第1章 基础知识 讲授要点 ▪ 认识汇编语言 ▪ 数据表示 ▪ 基本位操作
1.1认识汇编语言 1.程序设计语言 机器语言 汇编语言:机器语言的符号化,与机器密切相关。 高级语言 2.汇编语言的意义 ■速度:对于同一个问题,用汇编语言设计出的程序能达到“运行速度最快”。 空间:对于同一个问题,用汇编语言设计出的程序能达到“占用空间最少”。 ■功能:汇编语言可以实现高级语言难以胜任甚至不能完成的仼务。 ■知识:学习汇编语言,有助于对计算机系统的理解、写出更好的程序。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 1.1 认识汇编语言 1. 程序设计语言 ▪ 机器语言 ▪ 汇编语言:机器语言的符号化,与机器密切相关。 ▪ 高级语言 2.汇编语言的意义 ▪ 速度:对于同一个问题,用汇编语言设计出的程序能达到“运行速度最快”。 ▪ 空间:对于同一个问题,用汇编语言设计出的程序能达到“占用空间最少”。 ▪ 功能:汇编语言可以实现高级语言难以胜任甚至不能完成的任务。 ▪ 知识:学习汇编语言,有助于对计算机系统的理解、写出更好的程序
1.2数据表示 数制的基本知识 ·10进制 ·2进制 ·16进制 说明: ·前导0可以忽略,不影响取值。 ·结尾用D(10进制数)、B(2进制数)、H(16进制数)。缺省为十进制 数 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 1.2 数据表示 ▪ 数制的基本知识 • 10进制 • 2进制 • 16进制 ▪ 说明: • 前导0可以忽略,不影响取值。 • 结尾用D(10进制数)、B(2进制数)、H(16进制数)。缺省为十进制 数
1.2.1数据组织 位(Bi):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为低字,位1 31为高字。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 1.2.1 数据组织 ▪ 位(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.2.2无符号数与带符号数 1.无符号数 N位二进制数可以表示的无符号数范围为0~2N-1。例如,8位二进制数00H~0FH表示0 255,16位二进制数0000~0FFFH表示0~65535。 2.带符号数的补码表示 补码的表示规则: 以最高位作为符号位(0表示正数,1表示负数)。 正数的补码是其本身。 负数的补码是对其正数“各位求反、末位加1后形成的。 把“各位求反、末位加1的操作称作求补。求补就是求相反数。 N位二进制补码数可以表示的带符号数范围为-2N-1~2N1-1。例如,8位二进制数可以表示 -128~127,16位二进制数可以表示-32768~32767。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 1.2.2 无符号数与带符号数 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+y补=冈补+[补 X-y补=区补+[y补 说明 ■在计算机内部,补码减法是通过对减数求补后将减法转换为加法进行的。 个带符号数在不同位数下,其二进制补码表示可能是不同的。例如,8位数-1的补码 表示是0FFH,16位数-1的补码表示是0FFFH 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 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。即 0=0F6H=246 因此,在8位二进制表示下,对于负数x(-128~-1)来说,存在下列等式 X=256-|X 5符号扩展与零扩展 ■符号扩展是将原符号位填入扩展的每一位,使得在带符号数意义下取值不变。 零扩展是将0填入扩展的每-—位,使得在无符号数意义下取值不变。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 4. 补码的物理意义 考虑8位二进制数,其表示范围为0~255,即256 = 0。若将其想象为一个环,以0为基点, 向顺时针方向移246个单位,则得246。然而,若按逆时针方向移动,则该位置就是-10。即 -10 = 0F6H = 246 因此,在8位二进制表示下,对于负数x(-128~-1)来说,存在下列等式: -x = 256 -∣x∣ 5. 符号扩展与零扩展 ▪ 符号扩展是将原符号位填入扩展的每一位,使得在带符号数意义下取值不变。 ▪ 零扩展是将0填入扩展的每一位,使得在无符号数意义下取值不变
1.2.3字符的ASCI码表示 ASCI码字符集采用一个字节表示字符。 常用字符的ASCI码。 数字0~9:30H~39H 字母A~z:41H~5AH 字母a'~z:61H~7AH 空格:20H 回车CR:0DH 换行LF:0AH 空字符:0 注意回车与换行的差别 CR用来控制光标回到当前行的最左端;LF用来移动光标到下一行,而所在列不变。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 1.2.3 字符的ASCII码表示 ▪ ASCII码字符集采用一个字节表示字符。 ▪ 常用字符的ASCII码。 数字'0'~'9':30H~39H 字母'A'~'Z':41H~5AH 字母'a'~'z':61H~7AH 空格:20H 回车CR:0DH 换行LF:0AH 空字符:0 ▪ 注意回车与换行的差别: CR用来控制光标回到当前行的最左端;LF用来移动光标到下一行,而所在列不变
2.4BCD码 压缩BCD码 以4个二进制位表示1个十进制位,用0000B~1001B表示0~9。 例如,十进制数6429的压缩BCD码表示为 0110010000101001B(即6429H) 非压缩BCD码 以8个二进制位表示1个十进制位,低4位与压缩BCD码相同,高4位无意义。 例如,十进制数6429的非压缩BCD码表示为 XXXX0110 XXXX0100 XXXX0010 XXXX 1001 B 有时,要求非压缩BCD码的高4位为0,这时,6429的非压缩BCD码为06040209H 可以看出,数字字符"0~9的ASCI码恰好是0~9的非压缩BCD码 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 1.2.4 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码
1.2.5注解 同一个二进制数可以表示多种含义,其具体含义由使用者解释。 例如,二进制数00110000B,即30H,可以当作十进制数48的二进制表示,字符 o的ASCI码,30的压缩BCD码,0的非压缩BCD码,等等。甚至将其当作现实世界 的任一物理对象也未尝不可。 带符号数的二进制补码表示与位数密切相关 例如0FH,若作为8位带符号数,则表示-1;若作为16位带符号数,则表示255。 再如0FFH,若作为16位带符号数,则表示-1;若作为32位带符号数,则表示 65535 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 1.2.5 注解 ▪ 同一个二进制数可以表示多种含义,其具体含义由使用者解释。 例如,二进制数00110000B,即30H,可以当作十进制数48的二进制表示,字符 '0'的ASCII码,30的压缩BCD码,0的非压缩BCD码,等等。甚至将其当作现实世界 的任一物理对象也未尝不可。 ▪ 带符号数的二进制补码表示与位数密切相关。 例如0FFH,若作为8位带符号数,则表示-1;若作为16位带符号数,则表示255。 再如0FFFFH,若作为16位带符号数,则表示-1;若作为32位带符号数,则表示 65535