搜档网
当前位置:搜档网 › 《汇编语言程序设计》(第四版)教案及答案解析

《汇编语言程序设计》(第四版)教案及答案解析

《汇编语言程序设计》教案

附:习题参考答案

《汇编语言程序设计》(第4版)

钱晓捷主编

前言

1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。

2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。

3.本教材共有十一章,其内容安排如下:

(1).第一、二章为汇编语言所用的基础知识。

(2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。

(3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。

(4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。

(5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。

(6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。

(7).第九章说明BIOS和DOS系统功能调用的使用方法。

(8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设

计方法和程序实例。

附:教学参考书

1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,2001年(教材)

2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年

3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月

4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年

5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,1991

6.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,1995

7.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,1990

8.杨素行,微型计算机系统原理及应用,清华大学出版社,1995

9.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,1996

10.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,1991

11.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,1993

12.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社

目录

第 1 章基础知识 (1)

1.1进位计数制与不同基数的数之间的转换 (1)

1.2二进制数和十六进制数的运算 (2)

1.3计算机中数和字符的表示 (3)

1.4几种基本的逻辑运算 (3)

第 2 章 80X86计算机组织 (4)

2.180X86微处理器 (4)

2.2基于微处理器的计算机系统构成 (4)

2.3中央处理机 (5)

2.4存储器 (6)

2.5外部设备 (7)

第 3 章 80X86的指令系统和寻址方式 (8)

3.180X86的寻址方式 (8)

3.2程序占有的空间和执行时间 (10)

3.380X86的指令系统 (10)

第 4 章汇编语言程序格式 (27)

4.1汇编程序功能 (27)

4.2伪操作 (27)

4.3汇编语言程序格式 (31)

4.4汇编语言程序的上机过程 (34)

第 5 章循环与分支程序设计 (37)

5.1循环程序设计 (37)

5.2分支程序设计 (38)

5.3如何在实模式下发挥80386及其后继机型的优势 (38)

第 6 章子程序结构 (40)

6.1子程序的设计方法 (40)

6.2子程序的嵌套 (41)

6.3子程序举例 (41)

第 7 章高级汇编语言技术 (43)

7.1宏汇编 (43)

7.2重复汇编 (44)

7.3条件汇编 (45)

第 8 章输入/输出程序设计 (46)

8.1I/O设备的数据传送方式 (46)

8.2程序直接控制I/O方式 (47)

8.3中断传送方式 (47)

第 9 章 BIOS和DOS中断 (50)

9.1键盘I/O (50)

9.2显示器I/O (52)

9.3打印机I/O (53)

9.4串行通信口I/O (54)

第 10 章图形与发声系统的程序设计 (55)

10.1显示方式 (55)

10.2视频显示存储器 (55)

10.3EGA/VGA图形程序设计 (56)

10.4通用发声程序 (57)

10.5乐曲程序 (58)

第 11 章磁盘文件存取技术 (59)

11.1磁盘的记录方式 (59)

11.2文件代号式磁盘存取 (60)

11.3字符设备的文件代号式I/O (61)

11.4BIOS磁盘存取功能 (62)

附录:《IBM—PC汇编语言程序设计》习题参考答案 (63)

第一章.习题 (63)

第二章.习题 (64)

第三章.习题 (65)

第四章.习题 (79)

第五章.习题 (84)

第六章.习题 (104)

第七章.习题 (118)

第八章.习题 (125)

第九章.习题 (130)

第十章.习题 (134)

第十一章.习题 (145)

第 1 章 基础知识

【教学目的】

本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容

和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。

【重点难点】

二进制数及其与其它数制的转换、补码及其运算。

【课 时 数】

3学时。

1.1 进位计数制与不同基数的数之间的转换

1.1.1 二进制数

1. 十进制数:(Decimal)(数后面加D 或省略表示的是十进制数)

(1). 十进制数表示为:a n a n -1…a 0.a -1a -2…a -m 其含义如下:

i m

n i i m m 2211001n 1n n n 10a 10a 10a 10a 10a 10a 10a N ∙=∙++∙+∙+∙++∙+∙=∑-=--------

1). 基数为10

2). 10个数码0 、1、2、3、4、5、6、7、8、9

3). 逢10进1

(2). 权:相应于式中每位数字的10 k 称为该位数的权。

(3). 数的值:每位数字乘以其权所得到的乘积之和即为该数的值。即如上述多项式展开后所得到的

和。

2. r 进制数:

(1). r 进制数表示为:a n a n -1…a 0.a -1a -2…a -m 其含义如下:

i m

n i i m m 2211001n 1n n n r r a r a r a r a r a r a r a N ∙=∙++∙+∙+∙++∙+∙=∑-=--------

1). 基数为r

2). r 个数码0 、1、2、……、 r-1

3). 逢r 进1

(2). 权:相应于式中每位数字的r k 称为该位数的权。

(3). 数的值:每位数字乘以其权所得到的乘积之和即为该数的值。即如上述多项式展开后所得到的

和。

3. 二进制数:(数后面加B 表示二进制数)

(1). 二进制数表示为:a n a n -1…a 0.a -1a -2…a -m 其含义如下:

i m

n i i m m 2211001n 1n n n 22a 2a 2a 2a 2a 2a 2a N ∙=∙++∙+∙+∙++∙+∙=∑-=--------

1). 基数为2

2). 2个数码0 和1

3). 逢2进1

(2). 权:相应于式中每位数字的2 k 称为该位数的权。

(3). 数的值:每位数字乘以其权所得到的乘积之和即为该数的值。即如上述多项式展开后所得到的

和。

4. 十六进制数:(Hexadecimal)(数后面加H 表示十六进制数)

(1). 十六进制数表示为:a n a n -1…a 0.a -1a -2…a -m 其含义如下:

i m

n i i m m 2211001n 1n n n H 16a 16a 16a 16a 16a 16

a 16a N ∙=∙++∙+∙+∙++∙+∙=∑-=-------- 1). 基数为16

2).16个数码0 、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F(或a ~ f)

3).逢16进1

(2).权:相应于式中每位数字的16 k称为该位数的权。

(3).数的值:每位数字乘以其权所得到的乘积之和即为该数的值。即如上述多项式展开后所得到的

和。

1.1.2二进制数和十进制数之间的转换

1.二进制数转换为十进制数:根据上面的二进制数多项式按权展开求和即为十进制数。

2.十进制数转换为二进制数

(1).降幂法:首先写出要转换的十进制数,其次写出所有小于此数的各位二进制权值,然后用要转

换的十进制数减去与它最相近的二进制权值,如够减则减去并在相应位记以1;如不够减则在相应位记以0并跳过此位;如此不断反复,直到该数为0为止。

(2).除法

1).十进制整数转换:采用“除2 (基)取余”法进行转换,即把十进制整数除以2,取出余数1

或0作为相应二进制数的最低位,把得到的商再除以2,再取出余数1或0作为相应二进制数的次低位。由此类推,继续上述过程直至商为0止,最后一次的余数为二进制数的最高位,依次所得到的余数序列就是转换成的二进制数。

2).十进制小数转换:采用“乘2 (基)取整”法进行转换,即先将十进制小数乘以2,取其整数

1或0作为相应二进制小数的最高位,然后将乘积的小数部分再乘以2,并再取其整数作为次高位。依次重复上述过程,直到小数部分为0或达到要求的精度为止。

1.1.3十六进制数及其与二进制、十进制数之间的转换

1.十六进制数的表示:(参见1.1.1节的第4步)以下是几个概念:

(1).位(bit)。bit(Binary digit的缩写)是量度信息的最小单位,1比特为二进制的一位包含的信

息量。

(2).字节(Byte)。作为一个单位来处理的一串二进制数位,通常由8位二进制数位组成一个字节。

一个字节可以代表一个数字、一个字母或一个特殊符号。也是计算机存储容量的单位。

(3).字(Word)。在计算机中,一般称两个字节为一个字。

(4).字长(Word Length)。计算机的每个字所包含的位数称为字长。字长是计算机的一项重要指标。

一般都选为字节的整数倍。

2.十六进制数与二进制数之间的转换

(1).二进制数转换为十六进制数:从二进制数的小数点位置开始,整数部分向左,小数部分向右,

每四位二进制数字为一组用一位十六进制数字表示,不足四位的用0补足,就得到一个相应的十六进制数。

(2).十六进制数转换为二进制数:每一位十六进制数用四位二进制数表示,就形成相应的二进制数

了。

3.十六进制数与十进制数之间的转换

(1).十六进制数转换为十进制数:根据上面的十六进制数多项式按权展开求和即为十进制数。

(2).十进制数转换为十六进制数:可类似于十进制数转换为二进制数的降幂法和除法来转换为十六

进制数。也可先将十进制数转换为二进制数,再将二进制数转换为十六进制数。

1).降幂法:首先写出要转换的十进制数,其次写出所有小于此数的各位十六进制权值,然后用

要转换的十进制数除以与它最相近的十六进制权值,并在相应位记以十六进制的商;再将余数除以下一位权值,并记下商和余数;如此不断反复,直到该数为0为止。

2).除法:同前,整数部分采用除基(16)取余法,小数部分采用乘基(16)取整法直到所需的精度

为止来进行转换。

1.2二进制数和十六进制数的运算

1.2.1二进制数的运算

1.加法规则:0+0=0,0+1=1,1+0=1,1+1=0 (进位1)

2.乘法规则:0×0=0,0×1=0,1×0=0,1×1=1

1.2.2 十六进制数的运算:按照逢16进1的原则进行计算。

1.3 计算机中数和字符的表示

1.3.1 数的补码表示

1. 机器数:在机器中以数值化表示的连同其符号在内的一个数称为机器数。一般用最高有效位来表示

符号,正数用0表示,负数用1表示。

2. 补码表示法

⎪⎩⎪⎨⎧-≥=0

X X 20X X ]X [n <;;补 3. 补码求法

(1). 正数的补码就是其本身;

(2). 负数的补码 = 其正数的补码按位求反+1。

4. 符号扩展(如将8位有符号数扩展成为16位有符号数)

(1). 正数的符号扩展是在前面补0;

(2). 负数的符号扩展是在前面补1。

5. n 位补码所表示数的范围:-2 n-1≤N ≤2 n-1-1

6. 双字长数或双精度数:在机器里,为了扩大表数范围,可以用两个机器字(高位字和低位字)来表示

一个机器数,这种数称为双字长数或双精度数。在80386及其后则有4字(64位)。

1.3.2 补码的加法和减法

1. 求补运算:对一个二进制数按位求反后在末尾加1的运算称为求补运算。

[X]补 [-X]补 [X]补

2. 补码的加法运算规则

[X+Y]补 = [X]补+ [Y]补

3. 补码的减法运算规则

[X-Y]补 = [X]补+ [-Y]补

1.3.3 无符号整数:把最高有效位也作为数值处理的数称为无符号整数。

1.3.4 字符表示法(ASCII 码):80x86机采用目前最常用的美国信息交换标准代码ASCII 码表示。

1.3.5 BCD 码:4位二进制数编码的十进制数称为BCD 码(又叫8421码)。BCD 码是无符号整数

1. 压缩BCD 码:用4位二进制数表示一个十进制数位。

2. 非压缩BCD 码:用8位二进制数表示一个十进制数位。

1.4 几种基本的逻辑运算

1.4.1 “与”运算(AND)

Y = A ·B = A ∧ B = A AND B

1.4.2 “或”运算(OR)

Y = A + B = A ∨ B = A OR B

1.4.3 “非”运算(NOT)

Y = A

1.4.4 “异或”运算(XOR)

Y = ∀=⊕A B A B = A XOR B

所有的逻辑运算都是按位操作的。

求补 求补

第 2 章80x86计算机组织

【教学目的】

本章内容也是本课程的基础,通过本章学习,使学生明确汇编语言程序设计所要掌握的存储器的组织方式、CPU寄存器的结构(编程结构)。

【重点难点】

CPU寄存器的结构(编程结构)、存储器的组织方式。

【课时数】

5学时。

2.180x86微处理器

1.80x86是美国Intel公司生产的微处理器系列。

2.计算机主要由运算器、控制器、存储器和输入输出设备构成。

3.中央处理器(central processing unit, CPU):把运算器和控制器集成在一个芯片上,构成中央处理机。80x86就是这样一组微处理器系列。

4.很多计算机厂商把微处理器芯片作为中央处理机,再配上存储器、输入输出设备和系统软件等构成微计算机系统。80x86微处理器系列的主要技术数据名称:

(1).集成度:晶体管数是指芯片中所包含的晶体管数目,它说明器件的集成度;

(2).主频是指芯片所用的主时钟频率,它直接影响计算机的运行速度。

(3).数据总线负责计算机中数据在各组成部分之间的传送。

1).数据总线宽度是指在芯片内部数据传送的宽度。

2).外部数据总线宽度则是指芯片内和芯片外交换数据的宽度。

(4).地址总线宽度是指专用于传送地址的总线宽度,根据这一数值(如为n)可确定处理机可以访问

的存储器的最大范围(寻址空间=2n)。

1).字节(byte):在计算机里,8个二进制位组成一个字节,一般存储器以字节为存储信息的基

本单位,用符号B来表示。在存储器里一般用KB、MB、GB为存储容量的单位。

2).1KB=1024B=210B,1MB=1024KB=220B,1GB=1024MB=230B

5.在计算机里,采用层次结构的存储器组织是解决存储器容量、速度、价格三者矛盾的最有效方法。

(1).中间层次是主存储器,又称为内存。

(2).比中间层次速度更高、但容量较小的一层称为高速缓冲存储器(cache)。

(3).比中间层次速度慢、但容量很大的一层称为外存储器。如磁带、磁盘、光盘等。

6.提高计算机的工作速度可以说是微处理器芯片发展的核心问题。从80486起,把协处理器集成到芯片中的目的也是为了提高浮点处理速度。字长的增加有利于提高计算机解题的精度。

7.从80286开始,在机器的工作方式上,除8086提供的实模式外,还增加了保护模式的工作方式。在80386中还增加了一种虚拟8086的工作模式。

2.2基于微处理器的计算机系统构成

2.2.1硬件:是指能看得见、摸得着的物理部件。

1.组成计算机的三要素:CPU、存储器(memory)和输入/输出(I/O)子系统。用系统总线连接。

(1).存储器(内存):计算机的记忆部件。

(2).中央处理器CPU:包括运算器和控制器两部分。

1).运算器执行所有的算术和逻辑运算指令;

2).控制器则负责全机的控制工作。

(3).I/O子系统:包括I/O设备及大容量存储器两类外部设备。

1).I/O设备是指负责与计算机的外部世界通信用的输入、输出设备;

2).大容量存储器是指可存储大量信息的外部存储器。

2.系统总线:把CPU、存储器和I/O设备连接起来,用来传送各部件之间的信息。系统总线的动作由总线控制逻辑负责指挥。

(1).数据总线:传送信息;

(2).地址总线:指出信息的来源和目的地;

(3).控制总线:规定总线的动作。

2.2.2软件:为运行、管理和维护计算机而编制的各种程序的总和。分为系统软件和用户软件两大类。

1.系统软件:由计算机生产厂家提供给用户的一组程序。其核心是操作系统。它包括:

(1).操作系统的主要部分是常驻监督程序(monitor)。

(2).I/O驱动程序:对I/O设备进行控制和管理。

(3).文件管理程序:处理存储在外存储器中的大量信息。

(4).文本编辑程序:建立、输入或修改文本,并存入内存储器或大容量存储器中(如EDIT等)。

(5).翻译程序(translator)

1).汇编程序:把由用户编制的汇编语言源程序翻译成机器语言目标程序。

a.汇编语言:一种与机器语言几乎一一对应的符号语言,但在书写时使用由字符串组成的助

记符。

b.机器语言:由二进制代码组成的语言。

c.指令:计算机能识别并能直接加以执行的二进制的语句。

2).编译程序:把高级语言源程序翻译成机器语言程序的系统程序。

3).解释程序:对高级语言一边解释一边执行的翻译程序。

(6).连接程序(linker):把要执行的程序与库文件或其他已经翻译的子程序连接在一起,形成机器

能执行的程序。

(7).装入程序(loader):把程序从外存储器装入内存储器,以便机器运行。

(8).调试程序(debug):系统提供给用户能监督和控制用户程序的一种工具。

(9).系统程序库和用户程序库:各种标准程序、子程序及一些文件的集合。

2.用户软件:用户自行编制的各种应用程序。

2.3中央处理机

2.3.1中央处理机CPU的组成

1.CPU的任务是执行存放在存储器里的指令序列。

2.CPU芯片中除高速缓冲存储器之外,主要由以下三部分组成:

(1).算术逻辑部件(arithmetic logic unit,ALU):用来进行算术和逻辑运算。

(2).控制逻辑:负责对全机的控制工作。

(3).工作寄存器:用来存放计算过程中所需要的或所得到的各种信息。

2.3.280x86寄存器组

寄存器可以分为程序可见的寄存器和程序不可见的寄存器两大类。

①程序可见的寄存器是指在汇编语言程序设计中用到的寄存器,分为通用寄存器、专用寄存器和段寄存器3类。

②程序不可见的寄存器是指一般应用程序设计中不用而由系统所用的寄存器。

1.通用寄存器

(1).数据寄存器:AX、BX、CX、DX,四个16位通用寄存器,用来暂时存放计算过程中所用到的操作

数、结果和其他信息。既可以以字形式(如AX)也可以以字节形式(如AH、AL)访问。

1).AX(accumulator):累加器,算术运算的主要寄存器。所有的I/O指令都使用这一寄存器与

外部设备传送信息。

2).BX(base):通用寄存器,在计算存储器地址时常用作基址寄存器。

3).CX(count):通用寄存器,在循环和串操作指令中用作隐含的计数器。

4).DX(data):通用寄存器,在作双字长运算时把DX和AX合在一起存放一个双字长数,DX用来

存放高位字。对某些I/O操作,DX用于对I/O端口的寄存器间接寻址。

(2).指针及变址寄存器:SP、BP、SI、DI,四个16位寄存器。

1).SP:堆栈指针寄存器。

2).BP:基址指针寄存器。

3).SI:源变址寄存器。

4).DI:目的变址寄存器。

(3).对于80386及其后继机型则是32位的通用寄存器,包括EAX、EBX、ECX、EDX、ESP、EBP、EDI

和ESI。这些寄存器都可以存放数据,也可以当32位的地址寄存器使用。

2.专用寄存器:IP、SP、FLAGS,3个16位寄存器。

(1).IP:指令指针寄存器。存放代码段中的偏移地址。80386及其后继机型则是EIP。

(2).SP:堆栈指针寄存器,指示栈顶的偏移地址。80386及其后继机型则是ESP。

(3).FLAGS:标志寄存器,又称为程序状态字寄存器(program status word, PSW)。由条件码标志

(flag)、控制标志和系统标志构成。80386及其后继机型则是EFLAGS。8086/8088的FLAGS如下所示:

1514131211109876543210

OF DF IF TF SF ZF AF PF CF

1).条件码:用来记录程序中运行结果的状态信息,它们是根据有关指令的运行结果由CPU自动

设置的。由于这些状态信息往往作为后续条件转移指令的转移控制条件,所以称为条件码。

a.OF:溢出标志(overflow flag)。结果溢出OF=1,否则OF=0。

b.SF:符号标志(sign flag)。结果为负SF=1,否则SF=0。

c.ZF:零标志(zero flag)。结果为0时ZF=1,否则ZF=0。

d.CF:进位标志(carry flag)。最高有效位有进位或借位CF=1,否则CF=0。

e.AF:辅助进位标志或半进位标志(auxiliary carry flag)。半个字节产生的进位或借位时

AF=1,否则AF=0。

f.PF:奇偶标志(parity flag)。结果低8位中所含的1的个数为偶数时PF=1,否则PF=0。

2).控制标志位:为方向标志(direction flag, DF),在串处理指令中控制处理信息的方向用。

a.DF=1:变址寄存器SI和DI减量,使串处理从高地址向低地址方向处理。

b.DF=0:变址寄存器SI和DI增量,使串处理从低地址向高地址方向处理。

3).系统标志位:可以用于I/O、可屏蔽中断、程序调试、任务切换和系统工作方式等的控制。

a.TF:陷阱标志(trap flag, TF),又称单步标志。用于调试时的单步方式操作。TF=1时每

条指令执行完后产生陷阱(中断),TF=0时不产生陷阱。

b.IF:中断标志(interrupt flag, IF)。IF=1时允许可屏蔽中断请求,IF=0时禁止可屏蔽中

断。

c.I/O 特权级(I/O privilege level, IOPL),在保护模式下,用于控制对I/O地址空间的访

问。

(4).标志位的测试:用调试程序DEBUG测试。测试含义见书24页表2.2所示。

3.段寄存器:是一种专用寄存器,它们专用于存储器寻址,用来直接或间接地存放段地址。在80286以前的处理器中只有CS、DS、SS、ES四个16位寄存器。从80386起增加了FS和GS两个附加的数据段寄存器。

2.4存储器

2.4.1存储单元的地址和内容:

1.字节:每8位二进制数组成一个字节(Byte)。在存储器里是以字节为单位存储信息。

2.字:16位二进制数(2个字节)组成一个字。分成低位字节和高位字节存储。

3.存储单元的地址:为了正确的存放或取得信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址。以字节为单位给存储单元按二进制从0开始顺序进行的编号。它是无符号的二进制整数,书写格式为十六进制数。

(1).选址能力:若干位(如x位)二进制数(相当于若干根地址线)所能选择的最大存储单元的地址数

(2x)。

(2).1K=1024=210。所以16位二进制数的选址能力为216=64KB。用0~FFFFH表示。IBM PC机(8086/8088

CPU)的选址能力为220=1MB。

4.存储单元的内容:该存储单元存放的信息。存储器的内容取之不尽。

(1).字节的存储:直接存入某存储单元。

(2).字的存储:一个字存入存储器要占用两个单元。存放时,低位字节存入低地址单元,高位字节

存入高位地址单元。字单元的地址用它的低地址表示,应尽量为偶数地址。

(3).如果用X表示某存储单元的地址,则X单元的内容可以表示为(X);假如X单元中存放着Y,而

Y又是一个地址,则可用(Y)=((X))来表示Y单元的内容。

(4).存储器的内容取之不尽。

2.4.2实模式存储器寻址

80x86中除8086/8088只能在实模式下工作外,其他微处理器均可在实模式或保护模式下工作。实模式就是为8086/8088而设计的工作方式,实模式下允许的最大寻址空间为1MB。它要解决在16位字

长的机器里怎么提供20位地址的问题,而解决的办法是采用存储器地址分段的方法。

1.存储器地址的分段

(1).段:程序员在编制程序时要把存储器划分成段,在每个段内地址空间是线性增长的。段的最大

长度为64KB,以便能用16位二进制数表示段内地址。

1).小段:从0地址开始,每16字节为一小段。小段的首地址用16进制数表示时其最低位为0。

2).段的起始地址:段不能起始于任意地址,而必须从任一小段(paragraph)的首地址开始。(2).物理地址、段地址、偏移地址

1).物理地址(PA):在1MB的存储器里,每一个存储单元都有一个唯一的20位地址,称为该存

储单元的物理地址(20位)。20位物理地址由16位段地址和16位偏移地址组成。

2).段地址:段起始地址的高16位值(16位),低4位固定为0被省去。

3).偏移地址(偏移量EA):指在段内相对于段起始地址的偏移值(16位)。

4).物理地址 = 段地址×10H + 偏移地址。用段地址:偏移地址表示。

2.段寄存器:在8086~80286中,有4个专门存放段地址的寄存器。

(1).代码段CS:存放当前正在运行的程序。

(2).数据段DS:存放当前运行程序所用的数据。

(3).堆栈段SS:定义堆栈的所在区域。

(4).附加段ES:附加的数据段。在80386及其后又增加了FS和GS两个附加数据段寄存器。

除非专门指定,一般情况下,各段在存储器中的分配是由操作系统负责的。而且允许段重叠。如果段超过64KB则将其作为2个以上的段,并动态修改段地址。

2.4.3保护模式存储器寻址

从80286起,就引出了保护模式的存储器寻址,其直接原因:首先是实模式的寻址空间为1MB,这不能满足80286的16MB和80386等的4GB或更多的地址空间寻址。其次是为了使微机系统能支持多任务处理。在系统支持多任务功能的同时,系统也支持了虚拟存储器特性。

1.逻辑地址

(1).在实模式下逻辑地址即为段地址:偏移地址。物理地址 = 段地址×10H + 偏移地址

(2).在保护模式下逻辑地址则由选择器和偏移地址两部分组成。选择器存放在段寄存器中,但它不

能直接表示段基地址,而由操作系统通过一定的方法取得段基地址,再和偏移地址相加,从而求得所选存储单元的物理地址。

2.描述符

(1).描述符用来描述段的大小、段在存储器中的位置及其控制和状态信息,它由基地址、界限、访

问权和附加字段四部分组成。描述符的内容是由系统设置的,而不是由用户建立的。

1).基地址(base)部分用来指定段的起始地址;

2).界限(limit)部分存放着该段的段长度;

3).访问权(access rights)部分用来说明该段在系统中的功能,并给出该段的一些控制信息;

4).附加字段部分在386及其后继机型中存在,它用来表示该段的一些属性。

(2).系统按选择器的内容,根据指定的途径可以找到所选段对应的描述符,从而可以根据其给出的

基地址和界限值,确定所要找的存储单元所在的段,再加上逻辑地址中指定的偏移地址,就可以找到相应的存储单元。

2.5外部设备

1.端口寄存器:外部设备与主机(CPU和存储器)的通信是通过接口进行的。每个接口包括一组寄存器称为端口寄存器。

(1).数据寄存器:存放要在外设和主机之间传送的数据。

(2).状态寄存器:保存外设或接口的状态信息。

(3).命令寄存器:CPU发给外设或接口的控制命令通过它传送。

2.端口地址(端口号):主机给外设中的每个寄存器定义一个二进制数的编号即为端口地址。其地址空间独立于内存地址之外可达64KB。其范围为0000~FFFFH。

3.主机与外设交换信息:通过输入/输出指令完成。

4.BIOS、DOS功能调用:操作系统提供的中断服务子程序。

(1).BIOS存放在机器的ROM中,比DOS的层次还要低。

(2).DOS功能调用是DOS的一个组成部分,在开机时由操作系统从系统磁盘装入存储器。

第 3 章80x86的指令系统和寻址方式

【教学目的】

本章内容是本课程的重点,通过本章学习,使学生掌握80x86系列CPU(特别是8086CPU)的指令系统和寻址方式。对传送类指令、算术运算类指令、控制转移类指令要非常熟悉。

【重点难点】

传送类指令、算术运算类指令、控制转移类指令、存储器寻址方式、段内直接寻址的地址位移量。【课时数】

12学时。

1.指令系统:计算机能够提供给用户的一组指令集即为该计算机的指令系统。

2.指令的组成:计算机中的指令由操作码字段和操作数字段组成。

(1).操作码字段:指示计算机所要执行的操作。

(2).操作数字段:指出在指令执行操作的过程中所需要的操作数。

3.指令的格式:操作码 [操作数 [,操作数] [,操作数] ]。8086/8088 CPU规定操作数不能超过两个。但在80286及其后的CPU可以使用3操作数指令。

4.源操作数和目的操作数:使用两地址指令的两个操作数分别称为源操作数和目的操作数。

5.操作数的表示方法使用的是寻址方式。寻址方式是规定寻找操作数的方法。

6.汇编语言:符号语言。用助记符来表示操作码,用符号或符号地址来表示操作数或操作数地址。它与机器指令一一对应。

3.180x86的寻址方式

3.1.1与数据有关的寻址方式

这种寻址方式用来确定操作数地址从而找到操作数。

1.立即数寻址方式:操作数直接存放在指令中,紧跟在操作码之后,这种操作数称为立即数。它作为指令的一部分存放在代码段里。如:MOV AL, 6;MOV AX, 300AH;MOV EAX, 2030300AH

2.寄存器寻址方式:操作数在寄存器中,指令指定寄存器号。如:MOV AL, AH

3.直接寻址方式:操作数的有效地址只包含位移量一种成份,其值就存放在代码段中的指令的操作码之后。位移量的值即操作数的有效地址EA。如:MOV AX, VALUE; MOV AX, [2000H]

(1).由此及往下的各种寻址方式的操作数都在除代码段以外的存储区中。用方括号(“[ ]”)括起来

的为存储器操作数。寄存器名称外加小括号“( )”表示是该寄存器的内容。

(2).有效地址 (effective address, EA):即操作数的偏移地址。自此开始的寻址方式即为求得有

效地址(EA)的不同途径。有效地址的计算可以用下式表示:

EA=基址+(变址×比例因子)+位移量

有效地址可以由以下四种成分组成:

1).位移量(displacement)是存放在指令中的一个8位、16位或32位的数,但它不是立即数,

而是一个地址。

2).基址(base)是存放在基址寄存器中的内容。它是有效地址中的基址部分,通常用来指向数据

段中数组或字符串的首地址。

3).变址(index) 是存放在变址寄存器中的内容。它通常用来访问数组中的某个元素或字符串中

的某个字符。

4).比例因子(scale factor)是386及其后继机型新增加的寻址方式中的一个术语,其值可为1、

2、4或8。在寻址中可用变址寄存器的内容乘以比例因子来取得变址值。

(3).段跨越前缀:80x86允许数据存放在数据段以外的段中,应在指令中用该段寄存器加冒号(“:”)

即段跨越前缀来指定该段。只要有BP则隐含的段寄存器为SS。否则隐含的段寄存器为DS。如:MOV AX, ES: VALUE。但是在以下三种情况下,不允许使用段跨越前缀,它们是:

1).串处理指令的目的串必须使用ES段;

2).PUSH指令的目的和POP指令的源必须用SS段;

3).指令代码必须存放在CS段中。

(4). 80x86 CPU 中为了使指令字不要过长,规定双操作数指令的两个操作数中,只能有一个使用存

储器寻址方式,这就是一个变量常常先要送到寄存器的原因。

4. 寄存器间接寻址方式:操作数的有效地址只包含基址寄存器或变址寄存器内容一种成份。有效地址

就在某个寄存器中,而操作数则在存储器中。可使用段跨越前缀。如:MOV AX, ES: [BX]

5. 寄存器相对寻址方式(或称直接变址寻址方式):操作数的有效地址为基址寄存器或变址寄存器的内

容和指令中指定的位移量之和,有效地址由两部分组成。可使用段跨越前缀(又称为段超越)。如:

MOV ES: STRING[SI], DL

⎭⎬⎫⎩⎨⎧+⎪⎪⎭

⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧=位位移量位位移量168)SI ()DI ()BP ()BX (EA 6. 基址变址寻址方式:操作数的有效地址EA 是一个基址寄存器和一个变址寄存器的内容之和。可使用

段跨越前缀。如:MOV AX, ES: [BX][SI]

⎬⎫⎩⎨⎧+⎭⎬⎫⎩⎨⎧=)DI ()SI ()BP ()BX (EA 7. 相对基址变址寻址方式:操作数的有效地址EA 是一个基址寄存器与一个变址寄存器的内容和指令中

指定的位移量之和。可使用段跨越前缀。如:MOV ES: MASK[BX][SI], AX

⎬⎫⎩⎨⎧+⎭⎬⎫⎩⎨⎧+⎭⎬⎫⎩⎨⎧=位位移量位位移量168)DI ()SI ()BP ()BX (EA 8. 比例变址寻址方式:操作数的有效地址EA 是变址寄存器的内容乘以指令中指定的比例因子再加上位

移量之和。如:MOV MASK[ESI*4], EAX

9. 基址比例变址寻址方式:操作数的有效地址EA 是变址寄存器的内容乘以指令中指定的比例因子再加

上基址寄存器的内容之和。如:MOV [EAX][ESI*4], EAX

10. 相对基址比例变址寻址方式:操作数的有效地址EA 是变址寄存器的内容乘以指令中指定的比例因

子,加上基址寄存器的内容,再加上位移量之和。如:MOV TABLE[EAX][ESI*4], EAX

11. 端口(输入/输出)寻址方式:一个操作数必须为AX 或AL 或EAX ,另一个用端口直接寻址方式(端口

号<256)或端口间接寻址方式(DX 的内容为端口号)。如:IN AL, 0ADH ; OUT DX, AX

3.1.2 与转移地址有关的寻址方式

这种寻址方式用来确定转移指令及CALL 指令的转向地址。

1. 段内直接寻址:转向的有效地址是当前IP 内容和指令中指定的8位或16位位移量之和。(操作数

OPR 采用相对寻址方式。) 当它用于条件转移指令时,位移量只能是8位(386及其后继机型条件转

移指令的位移量可为8位或32位)。

⎬⎫⎩⎨⎧+=←;段内直接近程转移位位移量,如:;段内直接短程转移位位移量,如: OPR PTR NEAR JMP 16 OPR SHORT JMP 8)IP (EA )IP ( 2. 段内间接寻址:转向的有效地址是一个寄存器或是一个存储单元的内容。(操作数OPR 采用除立即数

以外的任一数据寻址方式。)

⎬⎫⎩⎨⎧=←为存储器;存储器寻址方式存储器内容,如:或为;或寄存器内容,如:OPR ][ PTR ORD W JMP ECX BX OPR ECX JMP X B JMP EA )IP ( 3. 段间直接寻址:指令中直接提供了转向的段地址和偏移地址。(操作数OPR 采用立即数寻址方式。)

(IP)←EA=OFFSET OPR ;OPR 的偏移地址→(IP)

(CS)←SEG OPR ;OPR 的段地址→(CS)

4. 段间间接寻址:用存储器中两个相连字来取代IP 和CS 的内容。(操作数OPR 采用存储器寻址方式。)

(IP)←EA=存储器中双字单元的低字内容

(CS)←EA+2=存储器中双字单元的高位字内容

附:书上3.1.2所用到的操作符意义:

1. SHORT :属性操作符,表示段内短程转移。

2. PTR :属性操作符,建立一个符号地址(取后面内容的地址)。

3. NEAR :类型操作符,距离类型,段内近程。

4. FAR :类型操作符,距离类型,段间远程。

对80386及以后机型。寄存器为EAX 、EBX 、ECX 、EDX 、ESI 、EDI 、ESP 、EBP 。位移量可增加到32位的位移量(无16位位移量)。下同。

5.WORD:类型操作符,数据类型,字。

6.DWORD:类型操作符,数据类型,双字。

7.NEAR PTR:取段内近程地址值操作符。

8.FAR PTR:取段间远程地址值操作符。

9.WORD PTR:取字长地址值操作符。

10.DWORD PTR:取双字长地址值操作符。

3.2程序占有的空间和执行时间

1.80x86的机器指令是可变字节指令,即不同指令或不同寻址方式的机器指令长度不同。程序量越大,占有的存储空间也越大。

2.当程序在计算机上运行时,访问存储器取得操作数或者存放结果需要时间,运算器执行指令也需要时间。

3.完成同样功能的不同程序,可能在占有存储空间和执行时间上有很大差别。程序员在编制程序时,应尽量考虑节省程序所占用的空间和所使用的时间。

3.380x86的指令系统

3.3.1数据传送指令:负责把数据、地址或立即数传送到寄存器或存储单元中。

1.通用数据传送指令

(1).MOV——传送指令

指令格式:MOV DST,SRC ;(DST)←(SRC)。DST表示目的操作数, SRC表示源操作数

说明:①.DST为除CS外的各寄存器寻址方式或任意存储器寻址方式。SRC为任意数据寻址方式。

②.DST、SRC不能同时为存储器寻址方式,也不能同时为段寄存器寻址方式,而且在

DST为段寄存器时,SRC不能为立即数。

③.MOV指令不影响标志位。

(2).MOVSX——带符号扩展传送指令(386及其后继机型可用)

指令格式:MOVSX DST,SRC ;(DST)←符号扩展(SRC)

说明:①.DST必须为16位或32位寄存器。SRC为8位或16位的寄存器或存储单元的内容。

传送时把源操作数符号扩展送入目的寄存器。

②.MOVSX指令不影响标志位。

(3).MOVZX——带零扩展传送指令(386及其后继机型可用)

指令格式:MOVZX DST,SRC ;(DST)←零扩展(SRC)

说明:①.DST必须为16位或32位寄存器。SRC为8位或16位的寄存器或存储单元的内容。

传送时把源操作数零扩展送入目的寄存器。

②.MOVZX指令不影响标志位。

(4).PUSH——进栈指令

指令格式:PUSH SRC ;16位指令:(SP)←(SP) –2 ((SP)+1,(SP))←(SRC)

32位指令:(ESP)←(ESP) –4 ((ESP)+3, (ESP)+2, (ESP)+1, (ESP))

←(SRC)

说明:①.堆栈:计算机开辟的以“后进先出”方式工作的存储区。它必须存在于堆栈段中,只有一个出入口,所以只有一个堆栈指针SP或ESP。SP或ESP的内容在任何时候

都指向当前的栈顶。

②.8086中的SRC不能为立即数寻址方式。286及其后继机型可用立即数寻址方式。

③.PUSH指令不影响标志位。

(5).POP——出栈指令

指令格式:POP DST ;16位指令:(DST)←((SP)+1,(SP)) (SP)←(SP)+2

32位指令:(DST)←((ESP)+3, (ESP)+2, (ESP)+1, (ESP)) (ESP)←

(ESP)+4

说明:①.DST为除立即数及CS寄存器以外的任意数据寻址方式。

(6).PUSHA/ PUSHAD——所有寄存器进栈指令

指令格式:PUSHA ;16位通用寄存器依次进栈,进栈次序为:AX、CX、DX、

BX、指令执行前的SP、BP、SI、DI。指令执行后(SP)←(SP)

–16仍指向栈顶。

指令格式:PUSHAD ;32位通用寄存器依次进栈,进栈次序为:EAX、ECX、EDX、

EBX、指令执行前的ESP、EBP、ESI、EDI。指令执行后(SP)

←(SP) –32仍指向栈顶。32位地址时用ESP。

(7).POPA/ POPAD——所有寄存器出栈指令

指令格式:POPA ;16位通用寄存器依次出栈,出栈次序为:DI、SI、BP、

SP、BX、DX、CX、AX。指令执行后(SP)←(SP) +16仍指向

栈顶。注意SP内容并未恢复。

指令格式:POPAD ;32位通用寄存器依次出栈,出栈次序为:EDI、ESI、EBP、

ESP、EBX、EDX、ECX、EAX。指令执行后(SP)←(SP) +32

仍指向栈顶。注意ESP内容并未恢复。32位地址时用ESP。

说明:①.PUSHA和POPA可用于286及其后继机型。PUSHAD和POPAD可用于386及其后继机型。

②.PUSHA、POPA、PUSHAD、POPAD指令均不影响标志位。

(8).XCHG——交换指令

指令格式:XCHG OPR1,OPR2 ;(OPR1)←→(OPR2)。其中OPR表示操作数

说明:①.OPR1、OPR2为除段寄存器以外的各寄存器寻址方式或任意存储器寻址方式。

②.OPR1、OPR2不能同时为存储器寻址方式。

③.XCHG指令不影响标志位。

2.累加器专用传送指令

(1).IN——输入指令

长格式为:IN AL,PORT(字节) ;(AL)←(PORT) (字节)

IN AX,PORT(字) ;(AX)←(PORT+1,PORT) (字)

IN EAX,PORT(双字) ;(EAX)←(PORT+3, PORT+2, PORT+1,PORT) (双字) 短格式为:IN AL,DX(字节) ;(AL)←((DX)) (字节)

IN AX,DX(字) ;(AX)←((DX)+1,(DX)) (字)

IN EAX,DX(双字) ;(EAX)←((DX)+3, (DX)+2, (DX)+1, (DX)) (双字) 说明:①.80x86 CPU规定只能用低16位地址总线(A15~A0)来寻址外部设备,因此外部设备最多可有65536个I/O端口,端口地址为(0~FFFFH)。

②.长格式只适用于端口(PORT)号≤255 (FFH)。

③.短格式适用于任意端口号(0~FFFFH)。但只能用DX寄存器对端口地址进行间接寻

址。

④.IN指令不影响标志位。

(2).OUT——输出指令

长格式为:OUT PORT, AL(字节) ;(PORT)←(AL) (字节)

OUT PORT, AX(字) ;(PORT+1,PORT)←(AX) (字)

OUT PORT, EAX(双字);(PORT+3, PORT+2, PORT+1,PORT)←(EAX) (双字) 短格式为:OUT DX,AL(字节) ;((DX))←(AL) (字节)

OUT DX,AX(字) ;((DX)+1,(DX)←(AX) (字)

OUT DX,EAX(双字) ;((DX)+3, (DX)+2, (DX)+1,(DX)←(EAX) (双字) 说明:①.长格式和短格式的规定与IN指令相同。

②.OUT指令不影响标志位。

(3).XLAT——换码指令

指令格式:XLAT OPR ;16位指令:(AL)←((BX)+(AL))

32位指令:(AL)←((EBX)+(AL))

XLAT ;上式的简写,OPR为阅读程序用的表格首地址。

说明:①.在使用这条指令前,应先建立一个字节表格,表格的首地址应提前存入BX寄存器,需要转换的代码应该是相对于表格首地址的位移量也应提前存入AL寄存器中。表

格的内容则是所要换取的代码,该指令执行后就可在AL中得到转换后的代码。

3.地址传送指令

(1).LEA——有效地址(EA)送寄存器指令

指令格式:LEA REG,SRC ;(REG)←SRC

说明:①.指令把源操作数(只能是存储器寻址方式)指定的有效地址送到指令指定的16位或32位寄存器(REG)中(但不能是段寄存器)。

②.LEA指令不影响标志位。

(2).LDS、LES、LFS、LGS、LSS——地址指针送寄存器和相应段寄存器指令,以LDS为例

指令格式:LDS REG,SRC ;(REG)←(SRC),(DS)←(SRC+2)或(DS)←(SRC+4)

说明:①.该组指令的源操作数只能用存储器寻址方式,根据任一种存储器寻址方式找到一个存储单元。

②.该组指令不影响标志位。

4.标志寄存器传送指令

(1).LAHF——标志送AH指令

指令格式:LAHF ;(AH)←(FLAGS的低位字节)

(2).SAHF——AH送标志寄存器指令

指令格式:SAHF ;(FLAGS的低位字节)←(AH)

(3).PUSHF/PUSHFD——标志进栈指令

指令格式:PUSHF ;(SP)←(SP) -2,((SP)+1,(SP))←(FLAGS)

PUSHFD ;(ESP)←(ESP) -4,((ESP)+3, (ESP)+2, (ESP)+1, (ESP))

←(EFLAGS AND 0FCFFFFH)(清除VM和RF位)

(4).POPF/POPFD——标志出栈指令

指令格式:POPF ;(FLAGS)←((SP)+1,(SP)),(SP)←(SP)+2

POPFD ;(EFLAGS)←((ESP)+3, (ESP)+2, (ESP)+1, (ESP)),

(ESP)←(ESP) -4

说明:这组指令中LAHF、PUSHF/PUSHFD不影响标志位。但POPFD指令不影响VM,RF,IOPL,VIF和VIP的值。

5.类型转换指令

(1).CBW——字节转换为字指令

指令格式:CBW ;(AH)←AL内容的符号位,形成AX中的字。

(2).CWD/CWDE——字转换为双字指令

指令格式:CWD ;(DX)←AX内容的符号位,形成DX:AX中的双字。.

指令格式:CWDE ;AX内容的符号扩展到EAX的高位,形成EAX中的双字。(3).CDQ——双字转换为4字指令

指令格式:CDQ ;(EDX)←EAX内容的符号位,形成EDX:EAX中的4字。.

(4).BSWAP——字节交换指令

指令格式:BSWAP reg32 ;使指令指定的32位寄存器的字节次序变反。具体操作为:

1、4字节互换,

2、3字节互换。

说明:该指令只能用于486及其后继机型。reg32指32位寄存器。

3.3.2算术指令

80x86的算术运算指令包括二进制运算及十进制运算指令。算术指令用来执行算术运算,它们中有双操作数指令,也有单操作数指令。双操作数指令的两个操作数中除源操作数为立即数的情况外,必须有一个操作数在寄存器中。单操作数指令不允许使用立即数寻址方式。

1.加法指令

(1).ADD——加法指令

指令格式:ADD DST,SRC ;(DST)←(DST)+( SRC)

(2).ADC——带进位加法指令

指令格式:ADC DST,SRC ;(DST)←(DST)+( SRC)+CF

(3).INC——加1指令

指令格式:INC OPR ;(OPR)←(OPR)+1

说明:①.以上指令除INC不影响CF标志外,它们都影响条件标志位。

②.OF是有符号数的溢出,CF是无符号数的溢出。但CF可作为多位运算的进位标志。

(4).XADD——交换并相加指令

指令格式:XADD DST,SRC ;TEMP←(DST)+( SRC),(SRC)←(DST),(DST)←TEMP

说明:①.该指令只能用于486及其后继机型。

②.源操作数只能用寄存器寻址方式,目的操作数则可用寄存器或任一种存储器寻址

方式。指令可作双字、字或字节运算。

2.减法指令

(1).SUB——减法指令

指令格式:SUB DST,SRC ;(DST)←(DST) - (SRC)

(2).SBB——带借位减法指令

指令格式:SBB DST,SRC ;(DST)←(DST) - (SRC) - CF

(3).DEC——减1指令

指令格式:DEC OPR ;(OPR)←(OPR) -1

(4).NEG——求补指令

指令格式:NEG OPR ;(OPR)← - (OPR) 即(OPR)←0 - (OPR)

(5).CMP——比较指令

指令格式:CMP OPR1,OPR2 ;(OPR1) - (OPR2),运算后根据结果影响标志

说明:①.以上指令除DEC不影响CF标志外,它们都影响条件标志位。

②.OF是有符号数的溢出,CF是无符号数的溢出。但CF可作为多位运算的借位标志。

(6).CMPXCHG——比较并交换指令

指令格式:CMPXCHG DST, SRC ;累加器AC与DST相比较,若(AC)=(DST),则ZF←1,

(DST)←(SRC);否则ZF←0,(AC)←(DST) 说明:①.该指令只能用于486及其后继机型。

②.源操作数只能用8位、16位或32位寄存器寻址,目的操作数则可用寄存器或任

一种存储器寻址方式。该指令对其他标志的影响与CMP相同。

(7).CMPXCHG8B——比较并交换8字节指令

指令格式:CMPXCHG8B DST ;EDX, EAX与DST比较, 若(EDX, EAX)=(DST), 则ZF←1,

(DST)←(ECX, EBX);否则ZF←0,(EDX, EAX)←(DST) 说明:①.该指令只能用于Pentium及其后继机型。

②.源操作数为存放于EDX,EAX中的64位字,目的操作数可用存储器寻址方式确定

一个64位字。该指令只影响ZF标志。

3.乘法指令

(1).MUL——无符号数乘法指令

指令格式:MUL SRC ;字节操作:(AX)←(AL)×(SRC)

字操作:(DX, AX)←(AX)×(SRC)

双字操作:(EDX, EAX)←(EAX)×(SRC)

(2).IMUL——带符号数乘法指令

指令格式:IMUL SRC ;与MUL相同,但必须是带符号数,而MUL是无符号数

说明:①.在乘法指令中目的操作数必须是累加器,字运算为AX,字节运算为AL,双字运算为EAX,指令中不写出。SRC不能用立即数。

②.乘法指令对除CF和OF以外的条件码无定义。(无定义是指该标志位不确定。)

1).IMUL——在80286及其后继机型中的双操作数的带符号数乘法指令

指令格式:IMUL REG,SRC ;字操作:(REG16)←(REG16)×(SRC)

双字操作:(REG32)←(REG32)×(SRC) 说明:①.目的操作数必须是16位或32位寄存器,而源操作数则可用任一种寻址方式取得和目的操作数长度相同的数;OF=1时溢出。

②.如果源操作数为立即数时,除相应地用16位或32位立即数外,指令中也可指定

8位立即数,在运算时机器会自动把该数符号扩展成与目的操作数长度相同的数。

2).IMUL——在80286及其后继机型中的三操作数的带符号数乘法指令

指令格式:IMUL REG, SRC, IMM ;字操作:(REG16)←(SRC)×IMM

双字操作:(REG32)←(SRC)×IMM

说明:①.目的操作数必须是16位或32位寄存器,而源操作数则可用除立即数以外的任一种寻址方式取得和目的操作数长度相同的数;OF=1时溢出。

②.IMM表示立即数,它可以是8、16或32位数,但其长度必须与目的操作数一致,

如长度为8位时,运算时将符号扩展成与目的操作数长度相同的数。

4.除法指令

(1).DIV——无符号数除法指令

指令格式:DIV SRC ;字节操作:(AL)←(AX)/(SRC),(AH)←(AX)%(SRC)

字操作:(AX)←(DX,AX)/(SRC),(DX)←(DX,AX)%(SRC)

双字操作:(EAX)←(EDX,EAX)/(SRC),(EDX)←(EDX,EAX)%(SRC) (2).IDIV——带符号数除法指令

指令格式:IDIV SRC ;与DIV相同,但操作数必须是带符号数,商和余数也都

是带符号数,且余数的符号与被除数的符号相同说明:①.在除法指令中目的操作数必须是AX或DX,AX,指令中不写出。SRC不能用立即数。

②.除法指令对所有条件码均无定义。“%”为取余运算符。

③.除法指令中如除数过小,则会使商产生溢出,从而产生除数为0的0型中断。

5.十进制调整指令

(0).BCD码概述

1).BCD码(Binary Coded Decimal):用4位二进制数表示一位十进制数的编码方法。此处的BCD

码当作无符号数计算(它可用一个单独的字节作为符号位)。

2).压缩BCD码(packed BCD format):用一个字节8位的二进制数表示2个BCD码。又称为组合

BCD码。

3).非压缩BCD码(unpacked BCD format):用一个字节低4位表示1个BCD码,高4位没有意义。

又叫扩展BCD码。因此数字的ASCII码是一种非压缩BCD码。

(1).压缩的BCD码调整指令

1).DAA——加法的十进制调整指令:紧跟在ADD或ADC指令之后进行调整。

指令格式:DAA ;若((((AL)AND 0FH)>9)OR((AF)=1))则(AL)←(AL)+6,(AF)←1;

若(((AL)>9FH)OR((CF)=1))则(AL)←(AL)+60H,(CF)←1

2).DAS——减法的十进制调整指令:紧跟在SUB或SBB指令之后进行调整。

指令格式:DAS ;若((((AL)AND 0FH)>9)OR((AF)=1))则(AL)←(AL)–6,(AF)←1;

若(((AL)>9FH)OR((CF)=1))则(AL)←(AL)–60H,(CF)←1 说明:①.参加加、减运算的两个数一定为压缩BCD码,且加减法指令的目的操作数为AL。

②.除对OF标志位无定义外,影响其它所有条件码。

(2).非压缩的BCD码调整指令

1).AAA——加法的ASCII调整指令:紧跟在ADD或ADC指令之后进行调整。

指令格式:AAA ;若((((AL)AND 0FH)>9)OR((AF)=1))则(AL)←(AL)+6,(AH)←(AH)+1,

(AF)←1,(CF)←(AF),(AL)←((AL)AND 0FH);否则(AL)←((AL)AND 0FH)

2).AAS——减法的ASCII调整指令:紧跟在SUB或SBB指令之后进行调整。

指令格式:AAS ;若((((AL)AND 0FH)>9)OR((AF)=1))则(AL)←(AL)–6,(AH)←(AH)–1,

(AF)←1,(CF)←(AF),(AL)←((AL)AND 0FH);否则(AL)←((AL)AND 0FH) 说明:①.参加加、减运算的两个数一定为非压缩的BCD码,且加减法指令的目的操作数为AL。

②.影响AF、CF,其余标志位无定义。

3).AAM——乘法的ASCII调整指令:紧跟在MUL指令之后进行调整。

指令格式:AAM ;(AH)←(AL)/0AH,(AL)←(AL)% 0AH

说明:①.参加乘法运算的两数一定为高4位为0的非压缩BCD码,乘积在AL寄存器中。

②.影响SF、ZF、PF,其余标志位无定义。

③.调整方法为:把AL寄存器的内容除以0AH,商放在AH中,余数放在AL中。

4).AAD——除法的ASCII调整指令:在DIV指令之前调整。在DIV指令之后再用AAM调整。

指令格式:AAD ;(AL)←10×(AH)+(AL),(AH)←0

说明:①.被除数是存放在AX中的两位高4位为0的非压缩BCD码,除数也为高4位为0的非压缩BCD码。

②.影响SF、ZF、PF,其余标志位无定义。

③.调整方法为:在DIV指令之前把两位高4位为0的非压缩BCD码的被除数调整为

二进制数,再运行DIV指令,在DIV指令之后再用AAM指令将商调整为高4位为0

的非压缩BCD码。

④.AAD应用举例:求73÷2=?

MOV AX, 0703H ;(AH)=07H,(AL)=03H。(即73的非组合BCD码)

MOV BL, 02H ;(BL)=02H。(即2的非组合BCD码)

AAD ;(AL)=49H。(即73)

DIV BL ;除法运算,(AL)=24H(商),(AH)=01H(余数)

AAM ;(AH)=03H,(AL)=06H。(即商36的非组合BCD码) 3.3.3逻辑指令

1.逻辑运算指令:可以对双字、字或字节执行按位的逻辑运算。

(1).AND——逻辑与指令

指令格式:AND DST,SRC ;(DST)←(DST)∧(SRC)

(2).OR——逻辑或指令

指令格式:OR DST,SRC ;(DST)←(DST)∨(SRC)

(3).NOT——逻辑非指令

指令格式:NOT OPR ;(OPR)←(OPR)

(4).XOR——逻辑异或指令

指令格式:XOR DST,SRC ;(DST)←(DST)⊕(SRC)

(5).TEST——测试指令

指令格式:TEST OPR1,OPR2 ;(OPR1)∧(OPR2)

说明:①.DST、OPR、OPR1不允许使用立即数寻址方式。

②.DST与SRC及OPR1与OPR2的双操作数指令不能同时是存储器操作数。

③.NOT指令不影响标志位。其它四条指令使CF=OF=0,AF无定义,SF、ZF、PF则根

据运算结果设置。

2.位测试并修改指令:386及其后继机型增加了本组指令。

(1).BT——位测试指令

指令格式:BT DST,SRC ;把DST中由SRC所指定的位的值送往标志位CF

(2).BTS——位测试并置1指令

指令格式:BTS DST,SRC ;把DST中由SRC所指定的位的值送往标志位CF,并将

DST中的该位置1

(3).BTR——位测试并置0指令

指令格式:BTR DST,SRC ;把DST中由SRC所指定的位的值送往标志位CF,并将

DST中的该位置0

(4).BTC——位测试并变反指令

指令格式:BTC DST,SRC ;把DST中由SRC所指定的位的值送往标志位CF,并将

DST中的该位变反

说明:①.DST可用除立即数外的任一种寻址方式指定一个字或双字。

②.SRC可以使用字或双字的寄存器方式,也可用8位立即数方式,指定所要测试的

位的位置(该数值应在0~31之间)。

③.本组指令影响CF位。其它标志位则无定义。

3.位扫描指令:386及其后继机型增加了本组指令。

(1).BSF——正向位扫描指令

指令格式:BSF REG,SRC ;指令从位0开始自右向左扫描源操作数,目的是检索第一

个为1的位。如遇到第一个为1的位则将ZF位置0,并把

该位的位置装入目的寄存器中;如源操作数为0,则将ZF

位置1,目的寄存器无定义。

(2).BSR——反向位扫描指令

指令格式:BSR REG,SRC ;指令从最高有效位开始自左向右扫描源操作数,目的是检

索第一个为1的位。该指令除方向与BSF相反外,其他同

BSF指令。

说明:①.目的操作数必须用字或双字寄存器。

②.源操作数可以用除立即数外的任一种寻址方式指定一个字或双字。

③.本组指令影响ZF位。其它标志位则无定义。

4.移位指令

(1). 移位指令

1). SHL ——逻辑左移指令

指令格式:SHL OPR ,CNT ; 2). SAL ——算术左移指令

指令格式:SAL OPR ,CNT ;同上

3). SHR ——逻辑右移指令 指令格式:SHR OPR ,CNT ;

4). SAR ——算术右移指令

指令格式:SAR OPR ,CNT ;

(2). 循环移位指令

1). ROL ——循环左移指令 指令格式:ROL OPR ,CNT ;

2). ROR ——循环右移指令

指令格式:ROR OPR ,CNT ;

3). RCL ——带进位位循环左移指令 指令格式:RCL OPR ,CNT ;

4). RCR ——带进位位循环右移指令

指令格式:RCR OPR ,CNT ; 说 明:①.OPR 为除立即数以外的任意寻址方式。移位次数由CNT 决定,CNT=1只移位1次;

若移位次数超过1次,在8086中则CNT 必须用CL 代替。而在其他机型中也可用

8位立即数指定范围从1~31的移位次数。

②.CF 位已在指令中给出其影响情况。OF 位只有在CNT=1时有效,一次移位前后的最

高有效位(符号位)发生变化则OF=1,否则OF=0。循环指令不影响其它条件。移位

指令由结果影响SF 、ZF 、PF ,而AF 无定义。

(3). 双精度移位指令:386及其后继机型增加了本组指令。

1). SHLD ——双精度左移指令

指令格式:SHLD DST ,REG ,CNT ;

2). SHRD ——双精度右移指令

指令格式:SHRD DST ,REG ,CNT ;

说 明:①.DST 为除立即数以外的任意寻址方式指定字或双字操作数。

②.源操作数则只能使用寄存器方式指定与目的操作数相同长度的字或双字。

③.第三个操作数CNT 用来指定移位次数,它可以是一个8位的立即数,也可以是CL ,

用其内容存放移位计数值。数值范围应为1~31,对于大于31的数,机器自动取模

32的值来取代。

④.指令执行后,REG 不变,只取DST 作为移位的结果。

3.3.4 串处理指令

用一条指令实现对一串字符或数据的操作。

1. 与REP 相配合工作的MOVS 、STOS 、LODS 、INS 和OUTS 指令

(1). REP 重复串操作直到计数寄存器Count Reg (CX 或ECX)的内容为0为止

指令格式:REP string primitive ;其中string primitive 可为MOVS, STOS, LODS, INS

或OUTS

执行操作:①.如(Count Reg)=0,则退出REP ,否则往下执行;

②.(Count Reg)←(Count Reg)-1

③.执行其后的串指令

④.重复①~③

(2). MOVS ——串传送指令

指令格式:[REP] MOVS [ES:]DST ,[Sreg:]SRC ;[Sreg:]为段跨越前缀。“[]”中为可选项。

[REP] MOVSB ;字节

[REP] MOVSW ;字

[REP] MOVSD ;双字(386及其后继机型可用)

执行操作:((ES):(Destination-index))←((Sreg):(Source-index))。Sreg 缺省时为DS 。指针

修改为: CF

OPR 0 CF OPR 0 CF OPR CF OPR CF

OPR CF OPR CF OPR CF DST REG CF DST REG

字节操作:(Source-index)←(Source-index)±1,(Destination-index)←(Destination-index)±1

字操作:(Source-index)←(Source-index)±2,(Destination-index)←(Destination-index)±2

双字操作:(Source-index)←(Source-index)±4,(Destination-index)←(Destination-index)±4

说明:①.在上述操作中,当方向标志DF=0时用“+”,DF=1时用“-”。可以使用指令CLD 使DF=0,STD使DF=1。

②.Source-index为源变址寄存器,当其地址长度为16位时用SI寄存器,当其地址

长度为32位时用ESI寄存器。

③.Destination-index为目的变址寄存器,当其地址长度为16位时用DI寄存器,

当其地址长度为32位时用EDI寄存器。以上3条说明适用于所有的串操作指令。

④.该指令不影响条件码。

补充说明:在执行串操作指令之前,应该先做好以下准备工作:

①.把存放在数据段中的源串首地址(如反向传送则为末地址)放入源变址寄存器中;

②.把将要存放数据串的附加段中的目的串首地址(或反向传送时的末地址)放入目的

变址寄存器中;

③.把数据串长度放入计数寄存器(CX或ECX);

④.建立方向标志。在完成这些准备工作后,就可以使用串指令传送信息了。

(3).STOS——存入串指令

指令格式:[REP] STOS [ES:]DST

[REP] STOSB ;字节

[REP] STOSW ;字

[REP] STOSD ;双字(386及其后继机型可用) 字节操作:((Destination-index))←(AL),(Destination-index)←(Destination-index)±1 字操作:((Destination-index))←(AX),(Destination-index)←(Destination-index)±2 双字操作:((Destination-index))←(EAX),(Destination-index)←(Destination-index)±4 (4).LODS——从串取指令

指令格式:LODS [Sreg:]SRC ;该指令与REP连用无多大意义

LODSB ;字节

LODSW ;字

LODSD ;双字

字节操作:(AL)←(Source-index),(Source-index)←(Source-index)±1

字操作:(AX)←(Source-index),(Source-index)←(Source-index)±2

双字操作:(EAX)←(Source-index),(Source-index)←(Source-index)±4

(5).INS——串输入指令

指令格式:[REP] INS [ES:]DST,DX

[REP] INSB ;字节

[REP] INSW ;字

[REP] INSD ;双字(386及其后继机型可用) 字节操作:((Destination-index))←((DX))(字节),(Destination-index)←(Destination-index)±1

字操作:((Destination-index))←((DX))(字),(Destination-index)←(Destination-index)±2

双字操作:((Destination-index))←((DX))(双字),(Destination-index)←(Destination-index)±4

(6).OUTS——串输出指令

指令格式:[REP] OUTS DX,[Sreg:]SRC

[REP] OUTSB ;字节

[REP] OUTSW ;字

[REP] OUTSD ;双字(386及其后继机型可用) 字节操作:((DX))←(Source-index)(字节),(Source-index)←(Source-index)±1

新版汇编语言程序设计课后答案

第2章(03) 2.12; 指令注释执行结果CF OF SF ZF PF mov si,ax si=ax si=0008h - - - - - shl si,1 si=2*ax si=0010h 0 0 0 0 0 add si,ax si=3*ax si=0018h 0 0 0 0 1 mov dx,bx dx=bx dx=0010h - - - - - mov cl,03h cl=03h - - - - - shl dx,cl dx=8*bx dx=0080h 0 u 0 0 0 sub dx,bx dx=7*bx dx=0070h 0 0 0 0 0 add dx,si dx=7*bx+3*ax dx=0088h 0 0 0 0 1 注意: 1. 左移N次相当于乘于2的N次方,右左移N次相当于除乘于2的N次方。 2. 移位指令根据是否移入“1”到CF,设置CF,根据移位后的结果影响SF,ZF,PF。根据最高符号位是否改变设置OF,如改变OF=1. 3. ‘u ’表示无定义,‘- ’表示无影响。 2.13; (1) ;不考虑进位mov bl,al mov cl,3 shl al,cl add al,bl ;shl bl,1 add al,bl

;考虑进位xor ah,ah mov bx,ax mov cl,3 shl ax,cl add ax,bx ;shl bx,1 add ax,bx (2) 数字0~9的ASCII码是:30h~39h 非压缩BCD码的0~9是:00h~09h 方法一: and al,0fh ;实现ASCII到非压缩BCD码的转换 or al,30h ;实现非压缩BCD码到ASCII的转换 方法二: xor al,30h ;求反D5D4位,其他不变 ;即高4位为3,则变为0;高4位为0,则变为3 mov cl,4 again: shr dx,1 ;实现逻辑右移 ;采用“sar dx,1”,则实现算术右移 rcr ax,1 dec cl jnz again 2.14; (1)用sar编写 mov al,0f7h ;-9送al sar al,1 ;结果:al=0fbh 即-5 (2)用idiv编写 mov al,0f7h ;-9送al cbw ;字节符号扩展位字 mov bl,2 ;注意除数不可为立即数 idiv bl ;结果:商为al=fch (-4) ;余数为ah=ffh (-1) 结论:符号数的除法用idiv 准确 2.19; 短转移:指段内-128~127之间的转移,位移量用一个字节表示 近转移:指段内±32K之间的转移,位移量用一个字表示 远转移:指段间1MB范围的转移 段内转移:指在同一个代码段内的转移,可以是短转移或者近转移 段间转移:指转移到另外一个代码段,就是远转移 8086/8088CPU的JMP、CALL和INT n指令可以实现段间转移 第2章(04) 2.20; 8086的条件转移的转移范围:在当前指令地址的+127---- -128之内。

新版汇编语言程序设计习题答案(钱晓捷主编)

第1章汇编语言基础知识 〔习题1.1〕简述计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐 条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处 理单元提供所需要的数据。 存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。 外部设备:实现人机交换和机间的通信。 〔习题1.2〕明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 〔解答〕 主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU 可以直接存取,它 由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大 量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。 RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读 写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息 只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电后能保存信息。 存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地 址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端 口。 KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。 〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的 程序就是目标程序。 〔习题1.4〕汇编语言与高级语言相比有什么优缺点? 〔解答〕 汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件

《汇编语言程序设计》(第四版)教案及答案解析

《汇编语言程序设计》教案 附:习题参考答案 《汇编语言程序设计》(第4版) 钱晓捷主编 前言 1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。 2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。 3.本教材共有十一章,其内容安排如下: (1).第一、二章为汇编语言所用的基础知识。 (2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。 (3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。 (4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。 (5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。 (6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。 (7).第九章说明BIOS和DOS系统功能调用的使用方法。 (8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设 计方法和程序实例。 附:教学参考书 1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,2001年(教材) 2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年 3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月 4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年 5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,1991 6.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,1995 7.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,1990 8.杨素行,微型计算机系统原理及应用,清华大学出版社,1995 9.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,1996 10.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,1991 11.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,1993 12.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社

《汇编语言程序设计》1~10章习题答案

1.1 1.2 1.3 1.4 1.5 (字长 n=8) 1.6 1.7 (1) (2) (3) (4) (5) 1.8 设补码长度为字节(即为8位) 1.9 (1) 21-(-18)= 15H-0EEH= 27H (2) 71- 36 = 47H- 24H= 23H (3) -5+ 120 =0FBH+ 78H= 73H (4) -10- 20 =0F6H- 14H=0E2H (5) -85-(-40)=0ABH-0D8H=0D3H 1.10 57H,69H,6EH,64H,6FH,77H,73H,20H,39H,35H, 56H,69H,73H,75H,61H,6CH,20H,62H,61H,73H,69H,63H P26 第二章习题·答案 2.6 见P19 堆栈:内存中以”先入后出”为原则存取、最大空间为64KB 的存储区域称之为堆栈 栈底:栈区最高地址单元的前一个单元为栈底 2.7 2.8 4017H:000AH=4017AH 4015H:002AH=4017AH 4010H:007AH=4017AH 说明了同一个物理地址可以用多个逻辑地址表示。

3.1(1) 寄存器寻址 (2) 寄存器间接寻址, 物理地址=30700H (3) 变址寻址/寄存器相对寻址,物理地址=31804H (4) 基址寻址/寄存器相对寻址,物理地址=41700H (5) 基址变址寻址, 物理地址=30800H (6) 相对基址变址寻址, 物理地址=42504H 3.2(1) 错:源不能是基址基址寻址。 (2) 错:源和目不能同时为内存单元。 (3) 错:直接给出的移位位数不能是3。 (4) 错:取反指令只能有一个操作数。 (5) 错:不能将立即数直接送入段寄存器。 (6) 错:目不能是段寄存器CS。 (7) 错:第一个操作数不能是立即数。 (8) 当VALUE1为字变量时,对;否则为错:源和目的类型(长度)不一致。 (9) 错:源和目不能同时为段寄存器。 (10)对。 (11)错:出栈指令的目不能是立即数。 (12)错:输入指令的目必须是累加器,源必须是小于0FFH的端口地址 或者是存放端口地址DX寄存器。 (13)错:源不能是立即数。 (14)错:寄存器CX不能用于寄存器间接寻址。 3.3 MOV AX,84A0H ;所有的标志位保持不变 ADD AX,9460H ;AF=0,CF=1,OF=1,SF=0,ZF=0,PF=1。 3.4(1) SUB AX,AX;或用XOR AX,AX;或用 MOV AX,0;或用 AND AX,0 (2) MOV CL,4 ROR BL,CL ;也可以用 ROL BL,CL (3) ①若都为字节变量,程序如下:②若都为字变量,程序如下: MOV AL,N1 MOV AX,N1 CBW CWD IDIV N2 IDIV N2 MOV M1,AL MOV M1,AX MOV M2,AH MOV M2,DX (4) AND BX,0F7AFH;0F7AFH =1111 0111 1010 1111B (5) XOR AX,4020H ; 4020H =0100 0000 0010 0000B (6) TEST DX,0201H ; 0201H =0000 0010 0000 0001B (7) OR CX,1 3.5(1) MOV BX,OFFSET BLOCK+(6-1)*2 MOV AX,[BX] (2) MOV BX,OFFSET BLOCK ;也可以用LEA BX,BLOCK MOV AX,10[BX] (3) LEA BX,BLOCK MOV SI,0 MOV AX,10[BX+SI] (4)MOV AX,BLOCK+10 3.6(1) (BX)= 009AH (3) (BX)= 8071H (4) (BX)= 10F7H (2) (BX)= 0061H (5) (BX)=0FF1CH 3.7(AX)=8D00H,(CX)=0004H 3.8(1) JCXZ L2 (2) L1: JCXZ L2 DEC CX CMPSB JZ L1 L2: 3.9 MOV CL,3 MOV BX,4DABH ;(BX)= 4DABH ROL BX,1 ;(BX)= 9B56H ROR BX,CL ;(BX)=0D36AH 3.10 MOV AX,BCD1 ADD AL,BYTE PTR BCD2 DAA MOV BYTE PTR BCD3,AL MOV AL,AH ADC AL,BYTE PTR BCD2+2 DAA MOV BYTE PTR BCD3+2,AL 程序段执行完后,BCD3 单元的值如左示: 3.11 CLD LEA SI,STRING1 LEA DI,DESTIN MOV CX,20 ;也可以这样 MOV CX,20/2 REP MOVSB ; REP MOVSW 3.12MOV AX,X CMP AX,50 JG N_HIGH SUB AX,Y JO OVERFLOW ;求绝对值 JNS L ;正数转 NEG AX ;负数的补码求补=绝对值L: MOV RESULT,AX 3.13设变量单元为字长 (1) MOV AX,W SUB AX,Z SUB AX,X MOV Z,AX (2) MOV AX,W ADD AX,X ADD AX,6 SUB AX,R SUB AX,9 MOV Z,AX (3) MOV AX,W MUL AX,X ADD Y,6

汇编语言知识学习程序设计(第四版)第3章【课后答案解析】

汇编语言程序设计第四版 【课后习题答案】--囮裑為檤 第3章汇编语言程序格式 〔习题3.1〕伪指令语句与硬指令语句的本质区别是什么?伪指令有什么主要作用? 〔解答〕 伪指令语句与硬指令语句的本质区别是能不能产生CPU动作; 伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生CPU动作的说明,并在程序执行前由汇编程序完成处理。 〔习题3.2〕什么是标识符,汇编程序中标识符怎样组成? 〔解答〕 为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符; 汇编语言中的标识符一般最多由31个字母、数字及规定的特殊符号(如-,$,?,@)组成,不能以数字开头。 〔习题3.3〕什么是保留字,汇编语言的保留字有哪些类型,并举例说明。 〔解答 保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。汇编语言对大小写不敏感。如定义字节数和字符串的DB就是伪指令助记符。 〔习题3.4〕汇编语句有哪两种,每个语句由哪4个部分组成? 〔解答〕 汇编语句有执行性语句和说明性语句; 执行性语句由标号、硬指令助记符、操作数和注释四部分组成; 说明性语句由名字、伪指令助记符、参数和注释四部分组成 〔习题3.5〕汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。 〔解答〕 ⒈编辑文本编辑程序汇编语言源程序.asm ⒉汇编汇编程序目标模块文件.obj ⒊连接连接程序可执行文件.exe或.com

⒋调试调试程序应用程序 〔习题3.6〕区分下列概念: (1)变量和标号 (2)数值表达式和地址表达式 (3)符号常量和字符串常量 〔解答〕 (1)变量是在程序运行过程中,其值可以被改变的量;标号是由用户自定义的标识符,指向存储单元,表示其存储内容的逻辑地址。 (2)数值表达式一般是由运算符连接的各种常数所构成的表达式,地址表达式是由名字、标号以及利用各种的操作符形成的表达式。 (3)在程序中,为了使常量更便于使用和阅读,经常将一些常量用常量定义语句定义为符号常量,被一对双引号括起来的若干个字符组成的字符序列被称为字符串常量。 〔习题3.7〕假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的错误原因。 (1)mov byte ptr [bx],1000 (2)mov bx,offset myword[si] (3)cmp mybyte1,mybyte2 (4)mov al,mybyte1+mybyte2 (5)sub al,myword (6)jnz myword 〔解答〕 (1)1000超出了一个字节范围 (2)寄存器的值只有程序执行时才能确定,而offset是汇编过程计算的偏移地址,故无法确定,改为lea bx,myword[si] (3)两个都是存储单元,指令不允许 (4)变量值只有执行时才确定,汇编过程不能计算 (5)字节量AL与字量myword,类型不匹配 (6)Jcc指令只有相对寻址方式,不支持间接寻址方式 〔习题3.8〕OPR1是一个常量,问下列语句中两个AND操作有什么区别? AND AL,OPR1 AND 0feh 〔解答〕

汇编语言程序设计(第四版)【课后答案】

汇编语言程序设计第四版 【课后习题答案】 第1章汇编语言基础知识 〔习题1.1〕简述计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处理单元提供所需要的数据。 存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。 外部设备:实现人机交换和机间的通信。 〔习题1.2〕明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB。 〔解答〕 主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。 RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电

后能保存信息。 存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端口。 KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。 〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的程序就是目标程序。 〔习题1.4〕汇编语言与高级语言相比有什么优缺点? 〔解答〕 汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件,因而容易产生运行速度快,指令序列短小的高效目标程序,可以直接控制计算机硬件部件,可以编写在“时间”和“空间”两方面最有效的程序。 汇编语言与高级语言相比的缺点:由于与处理器密切相关导致通用性差、可移植性差,汇编语言功能有限,又涉及寄存器、主存单元等硬件细节,编写汇编语言比较繁琐,调试起来也比较困难,编译程序产生的目标程序往往比较庞大、程序难以优化,运行速度慢。 〔习题1.5〕将下列十六进制数转换为二进制和十进制表示 (1)FFH (2)0H (3)5EH

计算机组成原理与汇编语言程序设计课后习题及解答(详解)

计算机组成原理与汇编语言程序设计课后习题及解答 徐, 第1章习题一 1.什么是程序存储工作方式? 答:计算机的工作方式——存储程序工作方式。即事先编写程序,再由计算机把这些信息存储起来,然后连续地、快速地执行程序,从而完成各种运算过程。 2.采用数字化方法表示信息有哪些优点? 用数字化方法表示信息的优点: (1)抗干扰能力强, 可靠性高。 (2)依靠多位数字的组合,在表示数值时可获得很宽的表示范围以及很高的精度。 (3)数字化的信息可以存储、信息传送也比较容易实现。 (4)可表示的信息类型与范围及其广泛,几乎没有限制。 (5)能用逻辑代数等数字逻辑技术进行信息处理,这就形成了计算机硬件设计的基础。 3.如果有7×9点阵显示出字符A的图像,请用9个七位二进制代码表示A的点阵信息。 4.数字计算机的主要特点是什么? 1. (1)能在程序控制下自动连续地工作; (2|)运算速度快; (3)运算精度高; (4)具有很强的信息存储能力; (5)通用性强,应用领域及其广泛。 5.衡量计算机性能的基本指标有哪些? 答:衡量计算机性能的基本指标: (1)基本字长——参加一次运算的数的位数; (2)数据通路宽度——数据总线一次能并行传送的位数; (3)运算速度——可用①CPU的时钟频率与主频,②每秒平均执行指令数,③典型四则运算的时间来表示。 (4)主存储器容量——可用字节数或单元数(字数)×位数来表示。 (5)外存容量——常用字节数表示。 (6)配备的外围设备及其性能。 (7)系统软件配置。 7.系统软件一般包括哪些部分?列举你所熟悉的三种系统软件。 系统软件一般包括操作系统,编译程序、解释程序、各种软件平台等。例如WINDOWS98操作系统,C语言编译程序等,数据库管理系统。 8.对源程序的处理有哪两种基本方式? 对源程序的处理通常有两种处理方式:解释方式和编译方式。 第2章习题二 1.将二进制数(101010.01)2 转换为十进制数及BCD码。 解:(101010.01)2 = (42.25)10 = (01000010.00100101)BCD 2.将八进制数(37.2)8转换为十进制数及BCD码. 解:(37.2)8 = (31.25)10 =(00110001.00100101)BCD 3.将十六进制数(AC.E)转换为十进制数及BCD码. 解: (AC.E)16 =(172.875)10 = 0.1)BCD 4.将十进制数(7 5.34)10转换为8位二进制数及八进制数、十六进制数。

汇编语言程序设计习题-答案

4.1分析执行下列指令序列后的结果:1)MOVAX,1234H MOVBX,00FFH ANDAX,BX 【答】(AX)=0034H 2)MOVAL,0101B ANDAL,000111B;(AL)=000101B ORAL,11000B;(AL)=110101B XORAL,0011B;(AL)=11010B NOTAL 【答】(AL)=00101B 3)MOVDL,05H MOVAX,0A00H MOVDS,AX MOVSI,0H MOVCX,0FH AGAIN: INCSI CMP[SI],DL LOOPNE AGAIN HLT

本程序实现了什么功能? 【答】在以0A001H开始的15个单元中查找05H。 4)MOVAX,DSEGADDR MOVDS, AX MOVES,AX MOVSI, OFFSET B1ADDR MOVDI,OFFSET B2ADDR MOVCX,N CLD REPMOVSB HLT 本程序实现了什么功能? 【答】将B1ADDR中N个字节数据传送到B2ADDR开始的15个存储单元。5)MOVAX, 0H MOVDS,AX MOVES, AX MOVAL,05H MOVDI,0A000H MOVCX,0FH CLD AGAIN:

SCASB LOOPNEAGAIN HLT 本程序实现了什么功能? 【答】从地址0A000H开始的15个单元中查找字节型数据05H,用条件循环LOOPNZ,控制数据05H的查找。 4.2阅读程序: 1).CLD LEADI,[0100H] MOVCX, 0080H XORAX, AX REPSTOSW 本程序实现了什么功能? 【答】将DS中起始地址为0100H的128个字节单元清零。 2).MOVAL, 08H SAL,01H;(AL)=000100H MOVBL, AL MOVCL ,02H SAL,CL;(AL)=01000H ADDAL,BL;(AL)=0100H 本程序实现了什么功能?

汇编语言程序设计答案

汇编语言程序设计答案2篇 汇编语言程序设计答案(一) 汇编语言是一种底层的计算机语言,通过程序设计来控制计算机 硬件的运行。它是计算机体系结构的基础,可以用来编写高效的程序,实现各种任务。下面是两个关于汇编语言程序设计的答案,帮助初学 者理解汇编语言的基本概念和编程技巧。 答案一: ```assembly mov ax, 5 mov bx, 6 add ax, bx ``` 这个程序的作用是将寄存器ax的值设置为5,寄存器bx的值设置为6,然后将ax和bx的值相加,结果保存在ax中。最后,ax的值为11。 答案二: ```assembly mov ax, 10 mov bx, 2 div bx ``` 这个程序的作用是将寄存器ax的值设置为10,寄存器bx的值设置为2,然后将ax和bx的值相除,商保存在ax中,余数保存在dx中。最后,ax的值为5,dx的值为0。 通过以上两个简单的答案,我们可以看到汇编语言的基本操作和 计算能力。编写汇编语言程序需要了解计算机的底层架构和指令集, 因为每种计算机体系结构都有不同的汇编语言。因此,学习汇编语言 需要掌握计算机组成原理和计算机体系结构的基本知识。 在编写汇编语言程序时,我们通常需要使用一些常见的指令,例

如mov(数据传送)、add(加法运算)、sub(减法运算)、mul(乘法运算)、div(除法运算)、jmp(跳转指令)等等。掌握这些常用指令和相应的语法规则是学习汇编语言的基础。 另外,汇编语言程序设计也需要学习如何使用寄存器和内存。寄存器是存储在CPU内部的非常快速的存储器,可以暂时存储数据和指令。CPU可以直接读取和写入寄存器中的数据。内存是存储在计算机主存储器中的大量数据和指令。CPU需要通过地址来访问内存中的数据和指令。 要编写高效的汇编语言程序,我们需要理解计算机的硬件原理和底层运行机制。了解汇编语言可以提供对程序的细粒度控制,对程序性能的优化有很大帮助。 总的来说,汇编语言程序设计是一项复杂而有趣的任务。掌握汇编语言可以让程序员对计算机的运行原理有更深入的理解,也能开发出更高效的程序。学习汇编语言需要耐心和熟练,但一旦掌握了它的技巧,将会有很多有趣的事情等待你去探索。 汇编语言程序设计答案(二) 汇编语言是一种底层的计算机语言,通过控制计算机硬件的运行来实现各种任务。在这里,我们将提供两个关于汇编语言程序设计的答案,帮助初学者理解汇编语言的基本概念和编程技巧。 答案一: ```assembly mov ax, 1 mov bx, 2 cmp ax, bx jg bigger jl smaller jmp end bigger: mov cx, ax jmp end

80x86汇编语言程序设计教程答案

80x86汇编语言程序设计教程答案 【篇一:《80x86汇编语言程序设计》教案及答案(第二 版)】 汇编语言程序设计》 (第2版) 沈美明、温冬婵编著 教案编写时间:2007年8月18日 前言 1. 汇编语言是计算机能提供给用户的最快而又最有效的语言,也是 能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。 2. 汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学 生必修的核心课程之一。它不仅是计算机原理、操作系统等其它核 心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉 上机操作和程序调试技术都有重要作用。 3. 本教材共有十一章,其内容安排如下: (1). 第一、二章为汇编语言所用的基础知识。 (2). 第三章详细介绍80x86系列cpu的指令系统和寻址方式。 (3). 第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。 (4). 第五、六章说明循环、分支、子程序结构和程序设计的基本方法。 (5). 第七章说明宏汇编、重复汇编及条件汇编的设计方法。 (6). 第八章叙述输入/输出程序设计方法,重点说明中断原理、中断 过程及中断程序设计方式。 (7). 第九章说明bios和dos系统功能调用的使用方法。 (8). 第十~十一章分别说明图形显示、发声及磁盘文件存储的程序 设计方法,同时提供各种程序设计方法和程序实例。 附:教学参考书 1. 沈美明、温冬婵编著,ibm–pc汇编语言程序设计(第2版),清华 大学出版社,2001年(教材) 2. 沈美明、温冬婵编著,ibm–pc汇编语言程序设计,清华大学出 版社,1991年 3. 沈美明、温冬婵编著,ibm–pc汇编语言程序设计—例题习题集,清华大学出版社,1991年6月

汇编语言程序设计课后答案

汇编语言程序设计课后答案 天龙百度@n维空间提供 第二章(更新完毕~) 1。在80x86微机的输入输出指令中,i/o端口号通常就是由dx寄存器提供更多的, 但是有时也可以在指令中轻易选定00---ffh的端口号。何况,可以轻易由指令选定的i/0端口数~ 解答:有256个~~书上有原话~~可以找到~~ 2。存有两个16十一位字节1ee5h和2a3ch分别存放在80x86微机的存储器的000b0h 和000b3h单元中,Poissons图则表示出来它们在存储器里的放置情况。 解答:如下图.第一个络子为000b0h字单元,注意,是字单元~~第五个格子为000b3h 字单元~ e51e3c2a唉,羞愧,学计算机的,竟然连个表格也搞不好!3.图在书上,我就不图画了,太麻烦~~轻易请问吧~ 解答:30022h字节单元内容:abh30024h字节单元内容:efh30021h字单元内 容:ab34h30022h字单元内容:cdabh4.对了,看这个的人.,肯定都有那本书,所以,以后我就 不抄题目哈~~~ 答疑:这三个物理地址都就是3017ah,刚好说明了相同的段地址和偏转地址对应同一物理地址~~ 5.解答:cs+ip第一个字的物理地址为:0aaa40h 6.答疑:图,真的不晓得怎么画,等待我想要办法~~条件标志of,sf,zf,cf,的值依次为:0,0,0,0 7。下列操作可使用那些寄存器? (1)乘法和加法ax,bx,cx,dx,当然,除了这几个通用寄存器的多寡位了,如 ah,al,.等~~(2)循环计数cx (3)乘法和除法dx,ax,ah,al(4)保存段地址cs,ds,es,ss(5)表示运算结果为oflags(6)将要执行的指令地址ip (7)将要从堆栈抽出数据的地址bp,sp,ss 天龙百度@n维空间提供

汇编语言课后习题解答

第1章汇编语言基础知识 1.简述汇编语言源程序、汇编程序、和目标程序的关系。 答:用汇编语言编写的程序称为汇编源程序;汇编源程序在汇编程序的翻译下转换成计算机语言变成目标程序。 2. 简述汇编语言的优缺点。 答:(1) 汇编语言的优点: ①可有效地访问、控制计算机各种硬件设备,如磁盘、存储器、CPU、I/O端口等。. ②目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 ③可与高级语言配合使用,应用十分广泛。 (2) 汇编语言的缺点: ①通用性和可移植性较差 ②相对于高级语言来说较繁锁、易出错、不够直观。 3.CPU的寻址能力为8KB,那么它的地址总线的宽度为多少? 答:13 4. 1KB的存储器有多少个存储单元? 答:1024个字节。 5. 指令中的逻辑地址由哪两部分组成? 答:指令中的逻辑地址由段基址和偏移量组成。 6. 以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。 (1) 12F8:0100 (2) 1A2F:0103 (3) 1A3F:0003 (4) 1A3F:A1FF 答: (1) 13080H (2) 1A3F3H (3) 1A3F3H (4) 245EFH 7. 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示): 03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据的值。 答:字节型数据:11H 字型数据:0A311H 双字型数据:0113A311H 8. 内存中某单元的物理地址是19318H,段基地址为1916H,则段内偏移地址为多少?若 段内偏移地址为2228H,则段基地址为多少? 答:若段基地址为1916H,则段内偏移地址为01B8H;若段内偏移地址为2228H,则段基地址为170FH 9. 在实模式环境中,一个段最长不能超过多少字节? 答:64KB 10. 实模式可寻址的内存范围是多少? 答:1MB 第2章汇编语言源程序格式 1.请解释变量和标号的含义,两者有何区别?

汇编语言程序设计(第四版)第4章[课后答案]

汇编语言程序设计(第四版)第4章[课后答案]汇编语言程序设计第四版 【课后习题答案】--暄[| 第4章基本汇编语言程序设计 〔习题4.1〕例题4.2如果要求算术右移8位,如何修改程序。〔解答〕 思路:首先由最低位字节向次低位字节传输……次低位字节向最高位字节传输(共7次);再被判最低位字节符号位,如为0,送来00h至最低位字节;如为1,送来ffh至最低位字节。传输可以参照例题4.2,不过需从第一号字节送来第零号字节,……最低位字节向次低位字节传输;也可以用循环去顺利完成:.modelsmall.stack256.data qvardq1234567887654321h.code.startupmovcx,7movsi,1 again:moval,byteptrqvar[si]movbyteptrqvar[si-1],alincsi loopagaintestal,80hjzezz movbl,0ffhjmpdoneezz:movbl,0 done:movbyteptrqvar[7],bl.exit0end 〔习题4.2〕例题4.2如果建议算术左移7十一位,如何用移位指令同时实现。〔答疑〕 思路:可设计外循环体为8个字节左移一次,方法是:最低位字节算术左移一次,次低位字节至最高位字节依次带cf位循环左移一次(内循环共8次),外循环体控制执行7次即可。 .modelsmall.stack256.data qvardq1234567887654321h .code.startup movdx,7;外循环次数 movax,byteptrqvar[0];最高位字节送来ax lpp:shlax,1;最低位字节左移一次,其d7移入cf位movsi,1 movcx,7;内循环次数 again:rclbyteptrqvar[si],1;高位字节依次左移p50incsi

汇编语言程序设计试题及答案合集

汇编语言程序设计试题及答案 1.对于有符号的数来说,下列哪个值最大(D) A:0F8H B:11010011B C:82 D:123Q 2.下列有关汇编语言中标号的命名规则中,错误的是(D) A:通常由字母打头的字符、数字串组成 B:标号长度不能超过31个字符 C:?和$不能单独作为标号 D:.号不可位于标号首 3.8088/8086存储器分段,每个段不超过(D ) A.64K个字 B.32K个字节 C.1兆个字节 D.64K个字节 4.寻址指令MOV CX, [BX + DI + 20]使用的是哪一种寻址方式(B)A:寄存器寻址B:相对基址变址寻址 C:变址寻址D:基址变址寻址 5.若AX= - 15要得到AX=15应执行的指令是(A ) A.NEG AX B.NOT AX C.INC AX D.DEC AX 6.8086/8088系统执行传送指令MOV时( A) A.不影响标志位 B.影响DF方向标志 C.影响SF符号标志 D.影响CF进位标志 7.若要求一个操作数中的若干位维持不变,若干位置“1”,可以使用(B)A:NOT B:OR C:AND D:XOR 8.下列指令中段默认为堆栈段的是( C) A.MOV AX,[BX+SI+10] B.ADD AX,ES:[SI] C.SUB [BX],[BP][DI] D. MOV DX,[1000H] 9.关于8086/8088微机系列,下列说法哪个是正确的(D) A:一个存储单元由16个二进制位组成,简称字。

B:当存储一个字数据时,低字节放高地址位,高字节放低地址位。 C:在内存空间中,可以无限分配段,且段的大小不受限制。 D:段与段之间可以邻接,也可以重叠。 10.下列关于堆栈的说法,错误的是(D) A:以“先入后出”为原则。 B:栈区最高地址单元的前一个单元为栈底。 C:运行中SP寄存器动态跟踪栈顶位置。 D:压栈和弹出都是以字节为单位。 11.表示过程定义结束的伪指令是( A) A.ENDP B.ENDS C.END D.ENDM 12.BUF1 DB 3 DUP(0,2 DUP (1,2),3) COUNT EQU $-BUF1 符号COUNT等价的值是( B) A.6 B.18 C.16 D.9 13.下列标志位中,可以用来判断计算结果正负的是(B) A:PF B:SF C:DF D:OF 14.下列指令正确的是( CD) A. MOV [100H], [BX] B.MOV DS, ES C. ADD V[BX], CX D.MOV AX, 34H 15.下列哪个寄存器是属于指针寄存器(C) A:SI B:DX C:SP D:ES 二、填空题 (每小题4 分,共 20 分) 1.下列程序段求数组FLD的平均值,结果在AL中。请将程序填写完整(不考虑溢出) FLD DW 10, -20, 30, -60, -71, 80, 79, 56 _LEA SI,FLD______ MOV CX, 8 XOR AX, AX

汇编语言程序设计习题-答案【范本模板】

4。1 分析执行下列指令序列后的结果: 1)MOV AX,1234H MOV BX,00FFH AND AX,BX 【答】(AX)=0034H 2)MOV AL,01010101B AND AL,00011111B ;(AL)=00010101B OR AL,11000000B ;(AL)=11010101B XOR AL,00001111B ;(AL)=11011010B NOT AL 【答】(AL)=00100101B 3)MOV DL,05H MOV AX,0A00H MOV DS,AX MOV SI,0H MOV CX,0FH AGAIN: INC SI CMP [SI],DL LOOPNE AGAIN HLT 本程序实现了什么功能? 【答】在以0A001H开始的15个单元中查找05H. 4)MOV AX,DSEGADDR MOV DS,AX MOV ES,AX MOV SI, OFFSET B1ADDR MOV DI,OFFSET B2ADDR MOV CX,N CLD REP MOVSB HLT 本程序实现了什么功能? 【答】将B1ADDR中N个字节数据传送到B2ADDR开始的15个存储单元. 5)MOV AX, 0H MOV DS,AX MOV ES, AX MOV AL,05H MOV DI,0A000H MOV CX,0FH CLD AGAIN:SCASB LOOPNE AGAIN HLT 本程序实现了什么功能? 【答】从地址0A000H开始的15个单元中查找字节型数据05H,用条件循环LOOPNZ,控制数据05H的查找。 4.2 阅读程序: 1)。CLD LEA DI,[0100H] MOV CX, 0080H XOR AX, AX REP STOSW 本程序实现了什么功能? 【答】将DS中起始地址为0100H的128个字节单元清零。 2)。MOV AL, 08H SAL AL,01H ;(AL)=00010000H MOV BL,AL MOV CL ,02H

汇编语言程序的设计答案

《汇编语言程序设计教程》人民邮电2013 习题及参考答案 1.1什么是机器语言?什么是汇编语言?简述汇编语言的特点。 机器语言就是用二进制编码组成的机器指令的集合和一组使用机器指令的规则。汇编语言是对机器指令中的操作码用英文单词的缩写描述,对操作数用标号、变量、常量描述。 汇编语言的特点: (1)与机器有关:移植性差,但可直接控制硬件。 (2)程序效率高。 (3)局限性:受指令的限制,如考虑存储单元等。 (4)调试困难。 1.2汇编程序与汇编源程序的区别是什么? 汇编源程序是指用汇编语言编写的程序,而汇编程序特指将汇编源程序汇编成目标文件的编译程序。 1.3把下列十进制数转换为二进制数和十六进制数。 (1) 67 (2)34 ( 3)254 (4)123 答:(1)1000011,43 (2)100010, 22 (3)1111 1101,FE (4)111 1011,7B 1.4把下列二进制数转换为十六进制数和十进制数。 (1) 01101101 (2)10110010 (3)111111 答:(1)6D, 109 (2)B2,178,(3)3F,63 1.5作下列十六进制数的运算,并转换为十进制数校核。 (1) 5A+64 (2)86-49 (3)123-9A (4)43 X 2B 答:(1) BE (2) 3D (3) 89 (4) B41 1.6根据补码定义把下列十进制数表示为8位二进制补码。 (1) 64 ⑵-24 答:(1) 0100 0000 (2) [10011000]原=[1110 1000]补 1.7下列各数均为十进制数,请采用8位二进制补码运算,并回答标志寄存器FLAGS^ CF和OF的值,运算结果所代表的十进制数是多少?如果用16位二进制补码运算,其结果所代表的十进制数是多少?FLAGS 中CF和OF的值呢? (1)85+69 (2)85+(-69) (3)85-(-69) (4)85-(69) 答:85=55H,69=45H,-69=BBH 8位二进制补码运算: (1) 85+69 =55H+45H=9AH=154, CF=0,OF=1 (2) 85+(-69)=55H+BBH=10H=16,CF=1,OF=0 (3) 85-(-69)=55H-BBH=9AH=154,CF=1,OF=1 (4) 85-(69)=55H-45H=10H=16,CF=0,OF=0

相关主题