《汇编语言程序设计》教案及答案第二版.docx

上传人:b****5 文档编号:7636887 上传时间:2023-01-25 格式:DOCX 页数:297 大小:360.62KB
下载 相关 举报
《汇编语言程序设计》教案及答案第二版.docx_第1页
第1页 / 共297页
《汇编语言程序设计》教案及答案第二版.docx_第2页
第2页 / 共297页
《汇编语言程序设计》教案及答案第二版.docx_第3页
第3页 / 共297页
《汇编语言程序设计》教案及答案第二版.docx_第4页
第4页 / 共297页
《汇编语言程序设计》教案及答案第二版.docx_第5页
第5页 / 共297页
点击查看更多>>
下载资源
资源描述

《汇编语言程序设计》教案及答案第二版.docx

《《汇编语言程序设计》教案及答案第二版.docx》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》教案及答案第二版.docx(297页珍藏版)》请在冰豆网上搜索。

《汇编语言程序设计》教案及答案第二版.docx

《汇编语言程序设计》教案及答案第二版

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

附:

习题参考答案

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

(第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月

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

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

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

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

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

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

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

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

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

第1章

基础知识

【教学目的】

本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。

【重点难点】

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

【课时数】

3学时。

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

1.1.1二进制数

1.十进制数:

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

(1).十进制数表示为:

anan-1…a0.a-1a-2…a-m其含义如下:

1).基数为10

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

3).逢10进1

(2).权:

相应于式中每位数字的10k称为该位数的权。

(3).数的值:

每位数字乘以其权所得到的乘积之和即为该数的值。

即如上述多项式展开后所得到的和。

2.r进制数:

(1).r进制数表示为:

anan-1…a0.a-1a-2…a-m其含义如下:

1).基数为r

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

3).逢r进1

(2).权:

相应于式中每位数字的rk称为该位数的权。

(3).数的值:

每位数字乘以其权所得到的乘积之和即为该数的值。

即如上述多项式展开后所得到的和。

3.二进制数:

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

(1).二进制数表示为:

anan-1…a0.a-1a-2…a-m其含义如下:

1).基数为2

2).2个数码0和1

3).逢2进1

(2).权:

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

(3).数的值:

每位数字乘以其权所得到的乘积之和即为该数的值。

即如上述多项式展开后所得到的和。

4.十六进制数:

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

(1).十六进制数表示为:

anan-1…a0.a-1a-2…a-m其含义如下:

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).权:

相应于式中每位数字的16k称为该位数的权。

(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(Binarydigit的缩写)是量度信息的最小单位,1比特为二进制的一位包含的信息量。

(2).字节(Byte)。

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

一个字节可以代表一个数字、一个字母或一个特殊符号。

也是计算机存储容量的单位。

(3).字(Word)。

在计算机中,一般称两个字节为一个字。

(4).字长(WordLength)。

计算机的每个字所包含的位数称为字长。

字长是计算机的一项重要指标。

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

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.补码表示法

3.补码求法

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

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

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

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

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

5.n位补码所表示数的范围:

-2n-1≤N≤2n-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.5BCD码:

4位二进制数编码的十进制数称为BCD码(又叫8421码)。

BCD码是无符号整数

1.压缩BCD码:

用4位二进制数表示一个十进制数位。

2.非压缩BCD码:

用8位二进制数表示一个十进制数位。

1.4几种基本的逻辑运算

1.4.1“与”运算(AND)

Y=A·B=A∧B=AANDB

1.4.2“或”运算(OR)

Y=A+B=A∨B=AORB

1.4.3“非”运算(NOT)

Y=

1.4.4“异或”运算(XOR)

Y=

B=AXORB

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

第2章

80x86计算机组织

【教学目的】

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

【重点难点】

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

【课时数】

5学时。

2.180x86微处理器

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

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

3.中央处理器(centralprocessingunit,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).算术逻辑部件(arithmeticlogicunit,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:

标志寄存器,又称为程序状态字寄存器(programstatusword,PSW)。

由条件码标志(flag)、控制标志和系统标志构成。

80386及其后继机型则是EFLAGS。

8086/8088的FLAGS如下所示:

1514131211109876543210

OF

DF

IF

TF

SF

ZF

AF

PF

CF

1).条件码:

用来记录程序中运行结果的状态信息,它们是根据有关指令的运行结果由CPU自动设置的。

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

a.OF:

溢出标志(overflowflag)。

结果溢出OF=1,否则OF=0。

b.SF:

符号标志(signflag)。

结果为负SF=1,否则SF=0。

c.ZF:

零标志(zeroflag)。

结果为0时ZF=1,否则ZF=0。

d.CF:

进位标志(carryflag)。

最高有效位有进位或借位CF=1,否则CF=0。

e.AF:

辅助进位标志或半进位标志(auxiliarycarryflag)。

半个字节产生的进位或借位时AF=1,否则AF=0。

f.PF:

奇偶标志(parityflag)。

结果低8位中所含的1的个数为偶数时PF=1,否则PF=0。

2).控制标志位:

为方向标志(directionflag,DF),在串处理指令中控制处理信息的方向用。

a.DF=1:

变址寄存器SI和DI减量,使串处理从高地址向低地址方向处理。

b.DF=0:

变址寄存器SI和DI增量,使串处理从低地址向高地址方向处理。

3).系统标志位:

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

a.TF:

陷阱标志(trapflag,TF),又称单步标志。

用于调试时的单步方式操作。

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

b.IF:

中断标志(interruptflag,IF)。

IF=1时允许可屏蔽中断请求,IF=0时禁止可屏蔽中断。

c.I/O特权级(I/Oprivilegelevel,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表示。

IBMPC机(8086/8088CPU)的选址能力为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).

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1