文档视界 最新最全的文档下载
当前位置:文档视界 › 汇编语言程序设计教案及习题答案

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

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

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

附:习题参考答案

《IBM-PC汇编语言程序设计》

(第2版)

沈美明、温冬婵编著

教案编写时间:20XX年8月18日

前言

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

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

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

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

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

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

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

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

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

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

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

方法和程序实例。

附:教学参考书

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

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 章基础知识4

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

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

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

1.4几种基本的逻辑运算7

第 2 章80X86计算机组织7

2.180X86微处理器7

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

2.3中央处理机8

2.4存储器10

2.5外部设备11

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

3.180X86的寻址方式11

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

3.380X86的指令系统13

第 4 章汇编语言程序格式29

4.1汇编程序功能29

4.2伪操作30

4.3汇编语言程序格式33

4.4汇编语言程序的上机过程36

第 5 章循环与分支程序设计38

5.1循环程序设计38

5.2分支程序设计39

5.3如何在实模式下发挥80386及其后继机型的优势39第 6 章子程序结构40

6.1子程序的设计方法40

6.2子程序的嵌套42

6.3子程序举例42

第7 章高级汇编语言技术42

7.1宏汇编42

7.2重复汇编44

7.3条件汇编44

第8 章输入/输出程序设计45

8.1I/O设备的数据传送方式45

8.2程序直接控制I/O方式46

8.3中断传送方式46

第9 章BIOS和DOS中断49

9.1键盘I/O49

9.2显示器I/O51

9.3打印机I/O52

9.4串行通信口I/O53

第10 章图形与发声系统的程序设计错误!未定义书签。

10.1显示方式错误!未定义书签。

10.2视频显示存储器错误!未定义书签。

10.3 EGA/VGA 图形程序设计错误!未定义书签。

10.4 通用发声程序错误!未定义书签。

10.5 乐曲程序错误!未定义书签。

第 11 章 磁盘文件存取技术错误!未定义书签。

11.1 磁盘的记录方式错误!未定义书签。

11.2 文件代号式磁盘存取错误!未定义书签。

11.3 字符设备的文件代号式I/O 错误!未定义书签。

11.4 BIOS 磁盘存取功能错误!未定义书签。

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

第 一 章.习题54

第 二 章.习题55

第 三 章.习题56

第 四 章.习题69

第 五 章.习题74

第 六 章.习题92

第 七 章.习题105

第 八 章.习题112

第 九 章.习题117

第 十 章.习题错误!未定义书签。

第 十一 章.习题错误!未定义书签。

第 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 16a 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.1 80x86微处理器

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如下所示:

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

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: V ALUE 。但是在以下三种情况下,不允许使用段跨越前缀,它们是:

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

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 :类型操作符,距离类型,段间远程。

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

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

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

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

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

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

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

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

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

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

3.3 80x86的指令系统

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寄存器以外的任意数据寻址方式。

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

(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中得到转换后的代码。

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

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).BSW AP——字节交换指令

指令格式: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。指针修改为:字节操作:(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 ;字节

汇编语言程序设计练习题

汇编语言程序设计练习题 一、字符与串处理类 1.逆序输出字符串“BASED ADDRESSING”。 2.试编写一段程序,要求对键盘输入的小写字母用大写字母显示出来。 3.编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。 4.从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果。 5.从键盘上输入一串字符(用回车键结束,使用0A号功能调用。)放在STRING中,试编制一个程序测试字符串中是否存在数字。如有,则把CL的第5位置1,否则将该位置置0。 6.从键盘上输入一串字符(用回车键结束,使用0A号功能调用。),将其中的小写英文字母变换为大写英文字母,其他字符保持不变。然后将变换后的字符串显示出来。 7.试编制一个程序:从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不是,则退出程序;如是,则开始接收键入的字符并顺序存放在首地址为buffer的缓冲区中(空格符不存入),直到接收到第二个空格符时退出程序。 8.试编写一段程序,要求比较两个字符串string1和string2所含字符是否相等,如相等则显示“MATCH”, 若不相同则显示“NO MATCH”。 9.试编写一段程序,要求输入两个字符串,如两个字符串相等则显示“MATCH”, 否则显示“NO MATCH”。 10.试编写一段程序,要求在长度为100H字节的数组中,找出大于61H的无符号数的个数并存入字节单元UP中,找出小于2FH的无符号数的个数并存入字节单元DOWN中。 11.在内存区域0B800:0000-0B800:0FFFF(都是16进制数)内查找首地址为SOURCE的串(SOURCE的首字节为串长度),如果找到,则把AL的第0位置0,否则将该位置置1。 12.已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序,把既在A中又在B中出现的整数存放于数组C中。 13.在附加段中,有一个首地址为LIST和未经排序的字数组。在数组的第一个字中,存放着该数组的长度,数组的首地址已存放在DI寄存器中,AX寄存器中存放着一个数。要求编制一个程序:在数组中查找该数,如果找到此数,则把它从数组中删除。 二、数字输入输出类 1. 试编制一个程序,把BX寄存器内的二进制数以十六进制数的形式在屏幕上显示出来。 2. 试编制一个程序,把BX寄存器内的二进制数以八进制数的形式在屏幕上显示出来。 3. 试编制一个程序,把BX寄存器内的二进制数以十进制数的形式在屏幕上显示出来。 4.从键盘上输入2个一位数,求出它们的和(假设和不超过1位)。 5.试编写一段程序,从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。 6.试编写一段程序,从键盘接收一个0-65535间的十进制无符号数,并在终端上显示与它等值的二进制数。 7.试编写一段程序,从键盘接收一个-32768-32767间的十进制有符号数,并在终端上显示与它等值的二进制数。 8.编写一个程序,从键盘输入一个0~65535之间的10进制无符号数,然后以16进制

汇编语言程序的设计试卷与答案

汇编语言程序设计试卷 一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内,每小题1分,共20分) 1.十六进制数88H,可表示成下面几种形式,请找出错误的表示()。 ① 无符号十进制数136 ② 带符号十进制数-120 ③ 压缩型BCD码十进制数88 ④ 8位二进制数-8的补码表示 2.指令指针寄存器是()。 ① IP ② SP ③ BP ④ PSW 3.当执行指令ADD AX,BX后,若AX的内容为2BA0H, 设置的奇偶标志位PF=1,下面的叙述正确的是()。 ① 表示结果中含1的个数为偶数 ② 表示结果中含1的个数为奇数 ③ 表示该数为偶数 ④ 表示结果中低八位含1的个数为偶数 4.完成将累加器AL清零,并使进位标志CF清零, 下面错误的指令是()。 ① MOV AL,00H ② AND AL,00H

③ XOR AL,AL ④ SUB AL,AL 5.下列指令执行后总是使CF=0,OF=0的是()。 ① AND ② NEG ③ NOT ④ INC 6.完成同指令XCHG AX,BX相同功能的指令或指令序列是()。 ① MOV AX,BX ② MOV BX,AX ③ PUSH AX POP BX ④ MOV CX,AX MOV AX,BX MOV BX,CX 7.设AH=0,AL=06H,BL=09H,执行指令 ADD AL,BL AAA 之后,其结果应是()。 ① AH=01,AL=05 ② AH=1 AL=15 ③ AH=0 AL=0FH ④ AH=0 AL=05 8.设AL=0B4H,BL=11H,指令“MUL BL”和指令“IMUL BL”分别执行后OF,CF的值为

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

《汇编语言程序设计试题及答案》合集 汇编语言程序设计试题及答案 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

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

一、单项选择题(在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。) 1.为在一连续的存储单元中,依次存放数据41H,42H,43H,44H,45H,46H,可选用的数据定义语句是(D) A.DB 41,42,43,44,45,46 B.DW 4142H,4344H,4546H C.DW ‘AB’,‘CD’,‘EF’D.DW ‘BA’,‘DC’,‘FE’ 2.DA2 DB‘AB’,‘CD’ ┇ MOV AX,WORD PTR DA2+1 上述语句执行后AX中的值是(D) A.‘AD’B.‘BC’ C.‘DA’D.‘CB’ 3.下列数据定义语句中可实现留空20H个字节存储单元的是(D) A.DB 20 DUP(?) B.DW 20H DUP(?) C.DB 10H DUP(4 DUP(?)) D.DD 08H DUP(?) 4.如某存储器分段时,表示偏移地址是17位二进制代码,那么一个段最多的存储单元数是(D) A.32K字节B.32K字 C.64K字节D.64K字 5.下列寄存器中用来指示堆栈中任意数据区的偏移地址的是(B)A.BX B.BP C.SI D.DI 6.下列指令中有语法错误的是(C) A.PUSH AX B.PUSH [20H+SI+BX] C.POP CS D.PUSH CS 7.执行PUSH BP指令时,目的操作数的物理地址表达式是(D) A.16*SS+BP B.16*DS+BP C.16*CS+IP D.16*SS+SP 8.把BL中的数据输出到端口8CH中正确指令是(C) A.OUT 8CH,BL B.IN 8CH,BL C.MOV AL,BL D.MOV AL,BL OUT 8CH,AL IN 8CH,AL 9.结果为零的条件转移指令,其测试条件是(A) A.ZF=1 B.ZF=0 C.SF=l D.SF=0 10.下面程序段完成测试DA-BYTE字节单元中数是否为负数,若是则将全l送DH中,否则全0送DH中,那么程序段中方框里应填的语句是 MOV CH,0 MOV CH,0FFH ZERO:MOV DH,CH(C) A.JNZ ZERO B.JS ZERO

汇编语言程序设计期末考试题

汇编语言程序设计期末考试题 学院(系):学号: 姓名: 计分: 一、项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号 内。每小题1分,共10分) 1.CPU发出的访问存储器的地址是( ) A.物理地址 B.偏移地址C.逻辑地址D.段地址 2.将高级语言的程序翻译成机器码程序的实用程序是( ) A.编译程序 B.汇编程序 C.解释程序 D.目标程序 3.DEC BYTE PTR[BX]指令中的操作数的数据类型是( ) A.字 B.双字C.字节D.四字 4.在下列语句中,BUFFER称为( ) BUFFER DB 01H,0AH A.符号 B.变量 C.助记符D.标号 5.串操作指令中,源串操作数的段地址一定在( )寄存器中。 A. CS B. SS C. DS D. ES 6.使计算机执行某种操作的命令是( ) A.伪指令B.指令 C.标号D.助记符 7.将数据5618H存放在存储单元中的伪指令是( ) A. DATA1 DW 1856H B. DATA1 DB 18H,56H C. DATA1EQU 5618H D. DATA1 DB 18H,00H,56H,00H 8.若AX=3500H,CX=56B8H,当AND AX,CX指令执行后,AX=( ) A.1400H B. 77F8H C. 0000H D. 0FFFFH 9.计算机处理问题中会碰到大量的字符、符号,对此必须采用统一的二进制编码。目前,微机中普遍 采用的是( )码。 A. BCD码 B.二进制码 C.ASCII码D.十六进制码 10.用指令的助记符、符号地址、标号和伪指令、宏指令以及规定的格式书写程序的语 言称为( ) A.汇编语言 B.高级语言 C.机器语言 D.低级语言 二、填空题(每空1分,共20分) 1.在8086/8088汇编语言中,有五条串操作指令,其中搜索字符串指令的助记符是______。 2.通常所说的计算机系统包括________和________两大部分。 3.8086/8088存储器分四个段,这四个段的段名所对应的段寄存器分别是________、_____ ___、________、________。 4.现有AX=2000H,BX=1200H, DS=3000H, DI=0002H, (31200H)=50H,(31201H)=02H, (31202H)=40H,请写出下列各条指令独立执行完后有关寄存器及存储单元的内容,并指出标 志位ZF、CF的值。 A.ADDAX,1200H;问AX=________H,ZF=________

汇编语言程序设计

汇编语言程序设计 一、选择题 (共72题) 1、 用于指针及变址寄存器的有()。 A、 AX,BX,CX,DX B、 SP,BP,IP C、 CS,DS,SS D、 PSW 考生答案:B 2、 完成把汇编语言源程序模块转换为目标模块的程序是()。 A、 编辑程序 B、 汇编程序 C、 连接程序 D、 调试程序 考生答案:B 3、 指令JMP FAR PTR DONE中的寻址方式属于()。 A、 段内转移直接寻址 B、 段内转移间接寻址 C、 段间转移直接寻址 D、 段间转移间接寻址 考生答案:C 4、 对于下列程序段: AGAIN:MOV AL,[SI]

MOV ES:[DI],AL INC SI INC DI LOOP AGAIN 也可用()指令完成同样的功能。 A、 REP MOVSB B、 REP LODSB C、 REP STOSB D、 REPE SCASB 考生答案:A 5、 在程序执行过程中,IP寄存器中始终保存的是()。 A、 上一条指令的首地址 B、 下一条指令的首地址 C、 正在执行指令的首地址 D、 需计算有效地址后才能确定地址 考生答案:B 6、 在汇编语言程序的开发过程中使用宏功能的顺序是()。 A、 宏定义,宏调用 B、 宏定义,宏展开 C、 宏定义,宏调用,宏展开 D、 宏定义,宏展开,宏调用 考生答案:C 7、 CPU要访问的某一存储单元的实际地址称()。 A、 段地址

偏移地址 C、 物理地址 D、 逻辑地址 考生答案:C 8、 AND、OR、XOR、NOT为四条逻辑运算指令,下面解释正确的是()。 A、 指令XOR AX,AX执行后,AX内容不变,但设置了标志位 B、 指令OR DX,1000H执行后,将DX最高位置1,其余各位置0 C、 指令AND AX,OFH执行后,分离出AL低四位 D、 NOT AX,执行后,将AX清0 考生答案:C 9、 完成对CL寄存器的内容乘以2的正确操作是()。 A、 ROL CL,1 B、 MUL 2 C、 SHL CL,1 D、 SHR CL,1 考生答案:C 10、 检查两个无符号数的关系,若要实现AL≥BL时分支去LOP1处,那么在“CMP A L,BL”指令后应跟的分支指令是()。 A、 JE LOP1 B、 JAE LOP1 C、 JC LOP1 D、 JGE LOP1 考生答案:B 11、 已知变量VAR为字型,则TYPEVAR=()。

汇编语言程序设计课后习题解答宋人杰2版

第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

汇编语言程序设计试题A卷

陕西电子信息职业技术学院考试试卷(A) 2011至2012学年度第一学期 期末 班级: 09成教 课程: 汇编语言程序设计 题 号 一 二 三 四 五 合分人 分 数 总 分 (考试时间:120分钟 满分100分) 一、单项选择题(本大题共10小题,每小题2分,共20分) 1. 计算机硬件中最核心的部件是( )。 A. 运算器 B. 主存储器 C. CPU D. 输入 / 输出设备 2. 指令指针寄存器(IP )中存放的内容( )。 A. 指令 B. 指令地址 C. 操作数 D. 操作数地址 3. 寄存器间接寻址方式中,要寻找的操作数位于( )中。 A. 通用寄存器 B. 内存单元 C. 段寄存器 D. 堆栈 4. I/O 端口的编址方式分为统一编址和( )。 A. 独立编址 B. 选择编址 C. 设置编址 D. 控制编址 5. 汇编语言程序中可执行的指令位于( )中。 A. 数据段 B. 堆栈段 C. 代码段 D. 附加数据段 6. 循环结构设计中,要考虑的核心问题是( )。 A. 循环的控制 B. 选择循环结构 C. 设置循环参数初始值 D. 修改循环控制参数 7. 在汇编中用于管理和控制计算机相关功能的指令是( )。 A. 伪指令 B. 机器指令 C. 宏指令 D. 目标指令 班级 姓名 学号 — — — — — — — — — — — — — — — — 密 — — — — — — — — — 封 — — — — — — — — — — 线 — — — — — — — — — — — — — — — —

8. 识别中断源的方法包括查询中断和()共两种类型。 A. 指令中断 B. 故障中断 C. 矢量中断 D. 实时时钟中断 9. CPU与I/O设备之间需要传输的信息通常包括()、状态信息 和控制信息。 A. 编址信息 B. 格式信息 C. 中断信息 D. 数据信息 10. 一般情况下,汇编源程序应由数据段、()和代码段共三个逻 辑段组成。 A. 逻辑段 B. 堆栈段 C. 指令段 D. 类型段 二、名词解释(本大题共5小题,每小题4分,共20分) 11. 微处理器: 12. 寻址方式: 13. 伪指令: 14. 中断源:

51汇编语言程序设计

第四章MCS-51汇编语言程序设计 重点及难点: 单片机汇编语言程序设计的基本概念、伪指令、单片机汇编语言程序的三种基本结构形式、常用汇编语言程序设计。 教学基本要求: 1、掌握汇编语言程序设计的基本概念; 2、掌握伪指令的格式、功能和使用方法; 3、掌握顺序结构、分支结构和循环结构程序设计的步骤和方法; 4、掌握常用汇编语言程序设计步骤和方法。 教学内容 §4.1汇编语言程序设计概述 一、汇编语言的特点 (1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。 (2)使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。 (3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。 (4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用;但是掌握了一种计算机系统的汇编语言后,学习其他的汇编语言就不太困难了。 二、汇编语言的语句格式 [<标号>]:<操作码> [<操作数>];[<注释>] 三、汇编语言程序设计的步骤与特点 (1)建立数学模型 (2)确定算法 (3)制定程序流程图 (4)确定数据结构 (5)写出源程序 (6)上机调试程序 §4.2伪指令 伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。 MCS- 51常见汇编语言程序中常用的伪指令:

第四章MCS-51汇编语言程序设计91 1.ORG (ORiGin)汇编起始地址命令 [<标号:>] ORG <地址> 2.END (END of assembly)汇编终止命令 [<标号:>] END [<表达式>] 3.EQU (EQUate)赋值命令 <字符名称> EQU <赋值项> 4.DB (Define Byte)定义字节命令 [<标号:>] DB <8位数表> 5.DW (Define Word)定义数据字命令 [<标号:>] DW <16位数表> 6.DS (Define Stonage )定义存储区命令 [<标号:>] DW <16位数表> 7.BIT位定义命令 <字符名称> BIT <位地址> 8.DA TA数据地址赋值命令 <字符名称> DATA <表达式> §4.3单片机汇编语言程序的基本结构形式 一、顺序程序 [例4-1]三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、5414和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。 MOV R0 ,# 52H ;被加数的低字节地址 MOV R1 ,# 55H ;加数的低字节地址 MOV A ,@ R0 ADD A ,@ R1 ;低字节相加 MOV @ R0 , A ;存低字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;中间字节带进位相加 MOV @ R0 , A ;存中间字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;高字节带进位相加 MOV @ R0 , A ;存高字节相加结果 CLR A

实验一基础汇编语言程序设计

实验一基础汇编语言程序设计 实验目的 1.学习和了解TEC-XP十六位机监控命令的用法; 2.学习和了解TEC-XP十六位机的指令系统; 3.学习简单的TEC-XP十六位机汇编程序设计。 实验内容 1.使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容; 2.使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T、P命令单步运行并观察程序单步执行情况。 3.学习联机使用TEC-XP教学试验系统和仿真终端软件。 实验要求 在使用该教学机之前,应先熟悉教学机的各个组成部分及其使用方法。 实验步骤 1.关闭电源,将大板上的COMl口与PC机的串口相连; 2.接通电源,在PC机上运行PCEC.EXE文件,设置所用PC机的串口为“l”或“2”,其它的设置一般不用改动,直接回车即可; 3.置控制开关为001110(连续、内存读指令、组合逻辑、16位、联机),开关拨向上方表示“1”,拨向下方表示“0”,“X”表示任意。其它实验相同; 4.按一下“RESET”按键,再按一下“START”’按键,主机上显示: 5.用R命令查看寄存器内容或修改寄存器的内容 1.用R命令查看寄存器或修改寄存器内容 1)在命令行提示符状态下输入: R↙;显示寄存器的内容 注:寄存器的内容在运行程序或执行命令后会发生变化。

2)在命令行提示符状态下输入: R R0↙;修改寄存器R0的内容,被修改的寄存器与所赋值之间可以无空格, 也可有—个或数个空格 主机显示: 寄存器原值:xxxx 在后面输入新的值0036 再用R命令显示寄存器内容,则R0的内容变为0036。 2.用D命令显示存储器内容 在命令行提示符状态下输入: D 2000↙ 会显示从2000H地址开始的连续128个字的内容; 连续使用不带参数的D命令,起始地址会自动加128(即80H)。

汇编语言程序设计

汇编语言程序设计 实验报告 实验名称上机过程及顺序结构与分支结构程序设计实验班级 学号 姓名 日期2017年10月26号 成绩 评阅人 软件学院

一、实验目的与意义 理解并熟练掌握汇编语言程序设计过程中的编辑、汇编、链接和调试等各个步骤,提高对汇编课程内容的理解和汇编语言的掌握,通过上机练习加深对课程内容的理解和掌握。通过汇编语言编制的程序上机调试、运行检验程序设计是否正确。熟悉和掌握编辑、汇编、连接和调试四个实用程序的使用方法,掌握调试程序中的几个常用命令的使用方法。熟悉其基本的指令操作,debug调试操作命令以及分支结构、顺序结构和循环结构的程序设计。 二、实验环境 操作系统:Microsoft Windows8 集成环境:Masm for Windows 上机地点:信息楼B405教室 三、实验的预习内容 预习的主要内容: 1. 使用DEBUG命令的方法; 2. 熟悉掌握从理论上定义数据的类型(即DB,DW,DD,); 3. 分支结构和顺序结构的步骤以及相关的指令; 4. 常用的标志位状态及相应的作用; 实验思路: 在对题目进行分析后,分析出解题方法,并做出与实验思路相对应的程序框图。依照程序框图的内容输入相对应的代码,最终在调试代码后,发现并解决一系列的汇编语言错误。进一步优化算法。实验之前必须了解十进制、十六进制和ASCII码之间的转换。预习查表法相关命令,掌握顺序程序的结构,从键盘输入数据的命令及显示到屏幕上的命令。 实验一: 题目1:将程序编辑、汇编、连接并通过集成环境中的debug调试,观察运行结果;用E命令修改指定地址的数据,再用G命令执行程序查看变化,用A 命令将加法指令修改成减法指令,再将其编译运行,查看寄存器值变化的异同。 题目2:分别用DB、DW和DD数据段9H,0FAH,41H,27H,编译链接之后生成exe文件,再用debug的r命令找到数据段地址,用d命令指定数据段地址,观察汇编后在机器内部对应的存储情况。 实验二: 先设置数据段地址和堆栈段地址;设置堆栈段指针;读取一个字符然后存储在AL中;用BX来存储AL中字符对应的数值;将BX中的值作为偏移地址;并在数据段中查找对应字符串;最终输出结果结束程序。 实验三: 先初始化数据段地址与堆栈段地址;设置堆栈段指针;然后将数据段中的data1放入AL中;读取数据段中的data2并判断data2是否大于0;然后读取数

汇编语言程序设计试题

汇编语言程序设计试题 一、单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.设SS=2050H,SP=0140H,则栈顶存贮单元的物理地址是( A ) A.20640H B.2063EH C.2063FH D.21900H 2.使用DOS功能调用时,子程序编号应放在( B ) A.AL B.AH C.AX D.任意指定 3.没有 ..语法错误的输出指令是( B ) P76 A.OUT AX,30H B.OUT DX,AL C.OUT AL,DX D.OUT 30H,AH 4.用MOV指令将十进制数89以非压缩BCD码格式送入AX,可使用的指令是( B ) A.MOV AX,89 B.MOV AX,0809H C.MOV AX,89H D.MOV AX,0809 5.设AX=8765H,DX=4321H,执行CWD指令后,DX中的内容是( B ) P117 A.4321H B.0FFFFH C.8000H D.0001H 6.设CL=05H,要获得CL=0AH,可选用的指令是( A) A.XOR CL,0FH B.NOT CL C.OR CL,0AH D.AND CL,0FH 7.假设执行ADD指令后AL=8CH,再执行DAA指令,AL中的值是( A ) A.92H B.0104H C.74H D.8CH 8.MOV AL,79H ADD AL,B1H 上面指令执行后,设置的标志位CF和ZF的值是( D ) A.CF=0,ZF=1 B.CF=l,ZF=1 C.CF=0,ZF=0 D.CF=1,ZF=0 9.TEST DL,55H P123 JZ NEXT NEXT:…… … 上述程序段,执行JZ指令时能产生转移的情况是( D ) A.DL>55H B.DL<55H C.DL=55H D.DL中第0、2、4、6位均为0 10.假设AL=28H, 执行ROL AL,1 指令之后的情况是( D ) P125 A.AL=14H, CF=1 B.AL=50H, CF=1 C.AL=14H, CF=0 D.AL=50H, CF=0 11. 98的BCD码是(B) A)10011001 B) 10011000 C) 10011010 D) 10001010 12. –0110110 的补码是(A) A) 11001010 B) 11001001 C) 10110110 D) 00110110

全国1月高等教育自学考试汇编语言程序设计试题历年试卷

做试题,没答案?上自考365,网校名师为你详细解答! 全国2005年1月高等教育自学考试 汇编语言程序设计试题 课程代码:02321 一、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填 在题干的括号内。每小题1分,共16分) 1.已知某操作数的物理地址是2117AH,则它的段地址和偏移地址可能是( )。 A.2025∶0F2A B.2108∶00EA C.2000∶017A D.2100∶117A 2.某程序装入内存后,DS=1200H,CS=1400H,则程序中数据段中的数据最多是( )字节。 A.2K B.4K C.8K D.16K 3.以寄存器DI间接寻址的存储器字节单元内容加1的指令是( )。 A.INC [DI] B.INC DI C.INC BYTE PTR[DI] D.ADD [DI],1 4.有语句:COUNT EQU 256,下列四种叙述中,正确的是( )。 A.COUNT是变量 B.COUNT占用一个字节存储单元 C.COUNT是符号常数 D.COUNT占用二个字节存储单元 5.下面指令中,源操作数的寻址方式为立即寻址的是( )。 A.MOV AX,OFFSET A B.MOV AX,A C.MOV AX,A+1 D.MOV AX,A[BX] 6.已知SP=2110H,执行POP AX后,SP寄存器的值是( )。 A.2111H B.2112H C.210FH D.210EH 7.将AX中有符号数除以2的正确指令是( )。 A.SHR AX,1 B.SAR AX,1 C.ROR AX,1 D.RCR AX,1 8.比较BX和SI中的两个存储器地址,若BX≥SI转向HIGH的正确指令是( )。 A.JAE HIGH B.JBE HIGH C.JEG HIGH D.JLE HIGH 9.指令SCASB操作数的段地址一定在( )寄存器中。 A.CS B.DS C.ES D.SS 10.有数据定义语句BUF DW 0ABH,1,10 DUP(3 DUP(1,0),2)汇编后,为变量BUF分配 的存储单元字节数是( )。 A.48H B.90H C.120 D.60 11.下列指令执行后,不改变AL寄存器内容的指令是( )。 1

新版汇编语言程序设计钱晓捷第1章习题答案

第1章汇编语言基础知识(全) 2010-10-18 19:32:40| 分类:答案集锦| 标签:|字号大中小订阅 第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〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编 译通过的程序就是目标程序。

汇编语言程序设计试题

汇编语言程序设计试题 一、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。每小题2分,共50分) 1.CPU发出的访问存储器的地址是( A ) A.物理地址 B.偏移地址 C.逻辑地址 D.段地址 2.使计算机执行某种操作的命令是( B ) A.伪指令 B.指令 C.标号 D.助记符 3.若AX=3500H,CX=56B8H,当AND AX,CX指令执行后,AX=(A) A. 1400H B. 77F8H C. 0000H D. 0FFFFH 4.计算机处理问题中会碰到大量的字符、符号,对此必须采用统一的二进制编码。目前,微机中普遍采用的是( C)码。 A. BCD码 B.二进制码 C.ASCII码 D.十六进制码 5.下列关于8086CPU的工作原理的描述错误的是__C___。 A.汇编程序员可以通过对各种寄存器中内容的修改实现对CPU的控制。B.CPU在访问内存时,采用“段地址*16+偏移地址”的形式给出要访问的内存单元的物理地址。 C.任意时刻,CS:IP指向的内容即是此刻CPU正在执行的指令。 D.传送指令能够更改所有通用寄存器的内容。 6.一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是(C) A.12CFBH B.12B6BH C.12C5BH D.12BFEH 7. 16位结构的CPU 不一定具备的特性是(D)。 A. 运算器一次最多可以处理16位的数据 B. 寄存器的最大宽度为16位 C. 寄存器和运算器之间的通路为16位 D. 地址总线为16根 8. 下列指令的书写正确的是(C)。 A. push al B. mov cs:[0],ds:[10] C. pop si D. mov ds:[0],2 9.在DEBUG工具中,显示寄存器内容的命令是( D )。 A. G B. D C. T D. R 10. 能够将ax中的内容送到内存0000:0200H处的指令序列是(D)。

汇编语言程序设计题库

汇编语言程序设计题库 一.选择题(100选20个每个1,共20分) 1. 1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 A. 10 B.11 C.12 D.13 2.在存储器中,数据和程序以形式存放。 A.二进制 B.十进制 C.八进制 D.十六进制 3.CPU要访问的某一存储单元的实际地址称 A.段地址 B.偏移地址 C.物理地址 D.逻辑地址 4.某存储单元的物理地址是12345H,可以作为它的段地址的有 A.2345H B.12345H C.12340H D.1234H 5.设物理地址(21000H)=20H ,(21001H)=30H,(21002H)=40H。如果从地址21001H 中取出一个字的内容是 A. 2030H B.3040H C.3020H D.4030H 6.在实模式下,段地址和偏移地址为3017:000A的存储单元的物理地址为() A. 3017BH B. 30170H C. 3017AH D. 30210H 7.在DEBUG工具中,单步执行指令的命令是()。 A. G B. D C. T D. R 8. 在DEBUG工具中,显示寄存器内容的命令是()。 A. G B. D C. T D. R 9.若栈顶的物理地址为20100H,当执行完指令PUSH AX后,栈顶的物理地址为()。 A. 20098H B. 20102H C. 200FEH D. 20100H 10.若栈顶的物理地址为20100H,当执行完指令POP AX后,栈顶的物理地址为()。 A. 20098H B. 20102H C. 200FEH D. 20100H 11.如代数据段名为DATA_SEG,它的起始地址为20A00H,对数据段寄存器DS赋值段地址值的方法是()。 A. MOV DS,20A0H B. ASSUME DS:DATA_SEG C. DATA_SEG SEGMENT D. MOV AX,DATA_SEG MOV DS,AX 12.执行PUSH BP指令时,源的操作数的物理地址表达式是() A.16*SS+BP B.16*DS+BP C.16*CS+IP D.16*SS+SP 13.用户为了解决自己的问题,用汇编语言所编写的程序,称为() A目标程序B源程序C可执行程序D汇编程序 14.已知AX=8065H,BX=103AH,则指令ADD BL,AL执行后,OF和CF的值分别为()。 A. 0,0 B. 0,1 C. 1,0 D. 1,1 15. 当CX=0时,REP MOVSB执行的次数为。( ) A. 1次 B. 0次 C. 25535次 D. 25536次 16.条件转移指令JB产生程序转移的条件是() A.CF=1 B.CF=0 C.CF=1和ZF=1 D.CF=1和ZF=0 17.设AL=20H,SI=0500H,DS=3000H,(30500H)=0C0H,CF=1。执行SBB AL,[SI]后,正确的结果是() A.AL=5FH SF=1 CF=1 B.AL=60H SF=1 CF=0

汇编语言程序设计

实验四程序设计 一、实验目的 学习数据传送指令和算术运算指令的用法;掌握数据定义伪指令的格式,会用DEBUG 中的D命令观察DB、DW、DD存储数据的格式;熟悉汇编语言的基本框架,掌握编写汇编语言程序的基本方法。 二、实验题 1、已知当前数据段中DADT1和DADT2开始分别存放若干字节数据,数据个数相同,编制程序检查两数据块中数据是否相同,若相同,则在屏幕上显示1,否则显示0。 【参考程序如下】 DSEG SEGMENT DATA1 DB 'ABCDEFG3' DATA2 DB 'ABCDEF3G' CNT DW 8 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX MOV DL,31H LEA SI,DATA1 LEA DI,DATA2 MOV CX,CNT DEC SI DEC DI AGAIN:INC SI INC DI MOV AL,[SI] CMP AL,[DI] LOOPZ AGAIN JZ DISP DEC DL DISP: MOV AH,2

INT 21H MOV AH,4CH INT 21H CSEG ENDS END START 阅读程序,理解循环程序结构及执行过程,并改成串指令实现。 2 编写程序,将00H~0FH共16个数写入内存3000H开始的连续16个存储单元中。 三、实验报告 写出程序清单,记录运行结果。 改写串指令实现: DSEG SEGMENT DATA1 DB'ABCDEFG3' DATA2 DB'ABCDEF3G' CNT DW8 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX MOV ES,AX MOV DL,31H LEA SI,DATA1 LEA DI,DATA2 MOV CX,CNT CLD

《汇编语言程序设计》期末复习题答案_57431457509182192

《汇编语言程序设计》复习题(答案指导/带页号)一、选择(30题) 1.下列是8位带符号二进制数的补码,其中最大的是( B )。参见P22 A、10001000 B、00000001 C、00000000 D、11111111 2.在一段汇编语言程序中多次调用另一段程序,用宏指令比用子程序实现 ( C )参见P157、158 A、占内存空间小,但速度慢 B、占内存空间相同,速度快 C、占内存空间大,但速度快 D、占内存空间相同,速度慢 3.数据定义为:EE DB 3,4 CC DW 3456H,6789H 执行指令“MOV CX,WORD PTR EE+1”后,(CX)= ( B )参见P27、63、64 A、0304H B、5604H C、3404H D、3456H 4.有如下指令序列: MOV AL,95H MOV CL,2 SAR AL,CL 上述指令序列执行后,AL的内容是( D )参见P95 A、05H B、25H C、24H D、0E5H 5.设A=18610,B=2738,C=0BB16,把这三个数看成无符号数,则它们之间的关系是( D )参见P23、15 A、A>B>C B、 A

相关文档