汇编语言程序设计教案.docx
- 文档编号:5998698
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:31
- 大小:39.25KB
汇编语言程序设计教案.docx
《汇编语言程序设计教案.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计教案.docx(31页珍藏版)》请在冰豆网上搜索。
汇编语言程序设计教案
《汇编语言程序设计》教案
编号:
1
第一章基础知识
教学目的:
(1)了解机器语言
(2)理解汇编语言的涵义
硬件系统结构8086CPU(3)理解
教学重点及难点:
汇编语言的涵义,CPU对存储器的读写原理,内存地址空间的分配
教学方法:
讲授、示例、练习
教学过程:
1.提出三个问题
什么是汇编语言?
为什么学汇编语言?
如何学习汇编语言?
2.介绍本书内容结构及特点
3.教学内容
引言
汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应?
用汇编语言对其编程。
1.1机器语言
机器语言是机器指令的集合。
?
阐述机器语言的原理,发展及弊端。
?
1.2汇编语言的产生
汇编语言的主体是汇编指令。
?
汇编指令是机器指令的助记符(两者一一对应)。
?
1.3汇编语言的组成
汇编语言由以下3类组成:
?
1、汇编指令(机器码的助记符)?
2、伪指令(由编译器执行)?
3、其它符号(由编译器识别)?
汇编语言的核心是汇编指令,它决定了汇编语言的特性。
?
1.4存储器
30
/1
工作,CPU它控制整个计算机的运作并进行运算,要想让一个CPU是计算机的核心部件.?
就必须向它提供指令和数据。
指令和数据在存储器中存放,也就是平时所说的内存。
?
指令和数据1.5
指令和数据是应用上的概念。
?
在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。
?
存储单元1.6
开始顺序编号;存储器被划分为若干个存储单元,每个存储单元从0?
0~127。
例如:
一个存储器有128个存储单元,编号从?
TB
GB、KB、MB、存储器的计量单位B、?
1.7CPU对存储器的读写CPU要想进行数据的读写,必须和外部器件(标准的说法是芯片)进行三类信息的交互:
?
存储单元的地址(地址信息)——地址总线?
器件的选择,读或写命令(控制信息)——数据总线?
读或写的数据(数据信息)——数据总线?
在内存中读或写的数据演示:
读演示、写演示CPU?
10
机器码:
?
MOVAX,[3]对应的汇编指令:
?
AX号单元的内容到含义:
传送3?
地址总线1.8
是通过地址总线来指定存储单元的。
CPU?
N。
根地址总线,则可以说这个有NCPU的地址总线的宽度为一个CPU?
N次方个内存单元。
这样的CPU最多可以寻找2的?
1.9数据总线与内存或其它器件之间的数据传送是通过数据总线来进行的。
CPU?
和外界的数据传送速度。
数据总线的宽度决定了CPU?
控制总线1.10
控制总线是在这里控制总线是个总称,CPU对外部器件的控制是通过控制总线来进行的。
?
一些不同控制线的集合。
CPU提供了对外部器件的多少种控制。
有多少根控制总线,就意味着?
对外部器件的控制能力。
所以,控制总线的宽度决定了CPU内存地址空间(概述)1.11
什么是内存地址空间?
不同的计算机系统的内存地址空间分配情况是不同的。
?
8086PC讲解机内存地址空间分配的基本情况?
作业:
30
/2
《汇编语言程序设计》教案
编号:
2
第二章寄存器
教学目的:
(1)理解通用寄存器的逻辑结构及其存储原理
(2)理解物理地址、段地址及偏移地址的本质含义
(3)理解8086CPU读取执行指令的工作原理,及代码段寄存器CS和指令指针寄存器IP的含义,并掌握其使用方法
教学重点及难点:
8086CPU读取执行指令的工作原理,及代码段寄存器CS和指令指针寄存器IP的使用方法
教学方法:
讲授、示例、练习
教学过程:
概述1.CPU一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。
?
内部总线实现CPU内部各个器件之间的联系。
?
外部总线实现CPU和主板上其它器件的联系。
?
2.寄存器概述
8086CPU有14个寄存器它们的名称为:
?
AX、BX、CX、DX、SI、DI、SP、BP、
IP、CS、SS、DS、ES、PSW。
3.教学内容
2.1通用寄存器
8086CPU所有的寄存器都是16位的,可以存放两个字节。
?
AX、BX、CX、DX通常用来存放一般性数据被称为通用寄存器。
?
讲解寄存器的逻辑结构。
?
为保证兼容性,这四个寄存器都可以分为两个独立的8位寄存器使用。
?
2.2字在寄存器中的存储
一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存?
器的高8位寄存器和低8位寄存器中。
2.3几条汇编指令
汇编指令不区分大小写
注意:
在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的。
30
/3
2.4物理地址所有的内存单元构成的存储空间是一个CPU访问内存单元时要给出内存单元的地址。
?
这个唯一的地址称为物理一维的线性空间。
每一个内存单元在这个空间中都有唯一的地址,地址。
CPU
2.516位结构的具有以下几个方面特征:
CPU概括的讲,16位结构描述了一个?
位的数据。
1、运算器一次最多可以处理16?
位。
2、寄存器的最大宽度为16?
、寄存器和运算器之间的通路是316位的。
?
给出物理地址的方法2.68086CPU位的物理地址。
16位地址合成的方法来形成一个208086CPU采用一种在内部用两个?
地址加法器合成物理地址的方法:
?
偏移地址段地址×16+物理地址=的本质含义物理地址”2.7“段地址×16+偏移地址=用两个比喻说明?
段的概念2.8
错误认识:
内存被划分成了一个一个的段,每一个段有一个段地址。
?
偏移)+“8086CPU用(段地址×16其实:
内存并没有分段,段的划分来自于CPU,由于?
”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。
地址=物理地址两点需要注意?
16的倍数;16的倍数,所以一个段的起始地址也一定是1()段地址×16必然是。
64K,所以一个段的长度最大为64K位地址的寻址能力为2)偏移地址为16位,16(可以用不同的段地址和偏移地址形成同一个物理地址。
结论:
CPU?
节2.9节~2.12由段寄存器提供内存要访问内存时,当8086CPU1、段地址在8086CPU的寄存器中存放。
?
CS个段寄存器,其中用来存放指令的段地址。
单元的段地址。
8086CPU有4IP存放指令的偏移地址。
2、CS存放指令的段地址,?
指向的内容当作指令执行。
CPU机中,任意时刻,将CS:
IP8086的工作过程:
3、8086CPU?
指向内存单元读取指令,读取的指令进入指令缓冲器;)从CS:
IP(1IP指向下一条指令;
(2))1),重复这个过程。
3()执行指令。
(转到步骤(的内容。
CS、IP提供转移指令修改、48086CPU?
作业:
30
/4
《汇编语言程序设计》教案
编号:
3
第三章寄存器(内存访问)
教学目的:
(1)掌握汇编指令访问内存的方法
(2)理解汇编指令mov、add、sub的格式及含义,并掌握其使用方法
(3)理解CPU的堆栈机制,掌握汇编指令push、pop的含义及其使用方法
理解数据段、代码段、栈段的内涵(4)
教学重点及难点:
汇编指令访问内存的方法,汇编指令格式,及堆栈机制
教学方法:
讲授、示例、练习
教学过程:
1.引言
在第2章中,我们主要从CPU如何执行指令的角度讲解了8086CPU的逻辑结构、形成物理地址的方法、相关的寄存器以及一些指令。
这一章中,我们从访问内存的角度继续学习几个寄存器。
2.教学内容
3.1内存中字的存储
结论:
任何两个地址连续的内存单元,N号单元和N+1号单元,可以将它们看成两个内存单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。
3.2DS和[address]
CPU要读取一个内存单元的时候,必须先给出这个内存单元的地址;
在8086PC中,内存地址由段地址和偏移地址组成。
8086CPU中有一个DS寄存器,通常用来存放要访问的数据的段地址。
问题:
如何用mov指令从10000H中读取数据?
结论:
movbx,1000H
movds,bx
moval,[0]
注意:
8086CPU不支持将数据直接送入段寄存器的操作,ds是一个段寄存器。
(硬件设计的问题)movds,1000H是非法的。
3.3字的传送
因为8086CPU是16位结构,有16根数据线,所以,可以一次性传送16位的数据,也就是一次性传送一个字。
30
/5
指令、sub3.4mov、add指令的几种形式:
已学mov寄存器,数据mov
寄存器,寄存器mov
寄存器,内存单元mov
内存单元,寄存器mov
mov段寄存器,寄存器
根据已知指令进行推测:
mov段寄存器,寄存器mov寄存器,段寄存器(验证)mov内存单元,寄存器mov内存单元,段寄存器mov段寄存器,内存单元mov一样,都有两个操作对象。
和sub指令同注意:
add数据段3.5
的倍数的内存单元当作1664K)、地址连续、起始地址为定义:
将一组长度为N(N≤专门存储数据的内存空间,从而定义了一个数据段。
再根据需要,用相关指令访问数据存放数据段的段地址,访问数据段中的数据:
用ds
段中的具体单元。
示例栈3.6
最后进入这个空间的数它的特殊性就在于,栈是一种具有特殊的访问方式的存储空间。
据,最先出去。
栈有两个基本的操作:
入栈和出栈。
入栈:
将一个新的元素放到栈顶;出栈:
从栈顶取出一个元素。
栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。
LastInFirstOut,后进先出)栈的操作规则:
LIFO(3.7CPU提供的栈机制(最基本的)8086CPU提供入栈和出栈指令:
(出栈)(入栈)PUSHPOP
中的数据送入栈中;pushax:
将寄存器ax
ax。
popax:
从栈顶取出数据送入的入栈和出栈操作都是以字为单位进行的。
注意:
8086CPUpush指令的执行过程:
pushax
30
/6
;SP=SP–2
(1)此时指向新栈顶。
指向的内存单元处,SS:
SP2)将ax中的内容送入SS:
SP(指令的执行过程:
pop
popax
中;指向的内存单元处的数据送入ax
(1)将SS:
SP以当前栈顶下面的单元为新的栈顶。
SS:
SP指向当前栈顶下面的单元,2)SP=SP+2,(3.8栈顶超界的问题指令出栈,都将发生栈顶指令入栈,栈空的时候再使用pop当栈满的时候再使用push超界问题。
栈顶超界是危险的。
,要根据可能用到的最大栈空间,来安我们在编程的时候要自己操心栈顶超界的问题
以防栈空防止入栈的数据太多而导致的超界;执行出栈操作的时候也要注意,排栈的大小,的时候继续出栈而导致的超界。
pop指令3.9push、1)和pop指令的格式(push寄存器:
将一个寄存器中的数据入栈push
寄存器:
出栈,用一个寄存器接收出栈的数据pop)pop指令的格式(2push和段寄存器:
将一个段寄存器中的数据入栈push
段寄存器:
出栈,用一个段寄存器接收出栈的数据pop)指令的格式(3push和pop内存单元:
将一个内存单元处的字入栈(栈操作都是以字为单位)push
内存单元:
出栈,用一个内存字单元接收出栈的数据pop
3.10栈段的倍数的内存单元,)的一组地址连续、起始地址为16(N≤64K定义:
将长度为N当作栈来用,从而定义了一个栈段。
指向我SS:
SP、pop等栈操作指令访问我们定义的栈段呢?
将push访问:
如何使用如们定义的栈段。
、段的综述3用偏移地址访问段内的单元。
用一个段地址指示段,我们可以将一段内存定义为一个段,这完全是我们自己的安排。
我们可以用一个段存放数据,将它定义为“数据段”;我们可以用一个段存放代码,将它定义为“代码段”;我们可以用一个段当作栈,将它定义为“栈段”;还可以是栈空间,也可以可以既是代码的存储空间,又是数据的存储空间,一段内存,DS、的指向。
SPSSIPCS中寄存器的设置,即:
什么也不是。
关键在于CPU、、、
作业:
30
/7
《汇编语言程序设计》教案
编号:
4
第四章第一个程序
教学目的:
(1)掌握源程序书写格式
(2)理解一个源程序从写出到执行的过程
掌握程序的执行过程及其跟踪方法(3)
教学重点及难点:
汇编语言源程序的书写格式,执行过程及跟踪方法
教学方法:
讲授、示例、练习
教学过程:
4.1一个源程序从写出到执行的过程
编写源程序——>编译——>链接——>执行
注意:
解释可执行文件
4.2源程序
汇编指令:
有对应的机器码的指令,可以被编译为机器指令,最终为CPU所执行。
1.伪指令
没有对应的机器码的指令,最终不被CPU所执行。
3种伪指令
(1)段定义伪指令segment和ends
(2)汇编结束伪指令END
(3)ASSUME段分配伪指令
2.标号:
一个标号指代了一个地址。
(代表某一存储单元地址的名字)
字母:
A~Z数字:
0~9特殊字符:
?
.@_$
codesg:
放在segment的前面,作为一个段的名称,这个段的名称最终将被编译、连接程序处理为一个段的段地址。
start:
放在某个指令前,作为程序的入口,程序加载到内存后,CS:
IP会指向这个标号,从start指向的指令开始运行。
3.源程序中的“程序”
汇编源程序:
伪指令(编译器处理)、汇编指令(编译为机器码)
程序:
源程序中最终由计算机执行、处理的指令或数据。
4.汇编语言源程序的结构
30
/8
数据段和堆栈即代码段、一般来说,一个完整的汇编源程序应由三个程序段组成,
结束,代码段包含程序要执行的指令;堆栈段ENDSSEGMENT开始,以段,每个段都以以存放程数据段用来在内存中建立一个适当容量的工作区,用来在内存中建立一个堆栈区;序中所需的数据。
而数据段和堆栈段可以没有或有其中一个。
代码段是必须的,注意:
一个源程序中,
段定义时一般最后定义代码段。
5.程序返回存储经编译、连接后转变为机器码,我们的程序最先以汇编指令的形式存在源程序中,在可执行文件中,那么,它怎样得到运行呢?
(讨论)的控制权交还给使它得以运行的程序,我现在,我们知道,一个程序结束后,将CPU们称这个过程为:
程序返回。
应该在程序的末尾添加返回的程序段。
movax,4c00H
int21H
注意:
几个和结束相关的内容:
段结束、程序结束、程序返回6.语法错误和逻辑错误语法错误:
程序在编译时被编译器发现的错误;容易发现。
逻辑错误:
程序在编译时不能表现出来的、在运行时发生的错误;不容易发现。
编辑源程序4.3.notepad++我们使用WORD等),使用工具:
可使用各种文本编辑工具(记事本、写字板、文本编辑器。
功能:
产生一个存储源程序的文本文件。
文件。
使用方法:
输入汇编源程序并保存为.asm对源程序进行编译4.4
编译器使用工具:
使用MASM6.15)。
(.obj功能:
使用编译器对源程序文件进行编译,生成包含机器代码的目标文件masm.exe程序使用方法:
在dos下运行编译器输出的最后两行告诉我们这个源程序有没有警告错误和必对源程序的编译结束,须要改正的错误。
对目标文件进行连接4.5
连接器使用工具:
使用LINK.EXE。
.EXE功能:
对目标文件(.obj)进行连接,从而得到一个可执行文件程序下运行使用方法:
在DOSlink.exe:
注意讲解连接的作用4.6以简化的方式进行编译和连接用一种较为简捷的方式进行编译、连接。
30
/9
XXX;masmC:
\MASM\
XXX;C:
\MASM\link
XXX.asm;C:
\MASM\ml
的执行4.71.exe提问:
程序到底运行没有?
程序运行了,只是从屏幕上不可能看到任何运行结果。
程序只是做了一些将数据送入寄存器和加法的我们的程序没有像显示器输出任何信息。
操作,而这些事情,我们不可能从显示屏上看出来。
程序执行完成后,返回,屏幕上再次出现操作系统的提示符。
谁将可执行文件中的程序装载进入内存并使它运行?
4.8
的执行过程:
1.exe)编译连接键。
(”,按Enter
(1)我们在提示符“C:
\masm>ml1.asm4.1
中的程序运行;问题)1.exe(24.2”。
问题)运行结束,返回,再次显示提示符“(3C:
\masm两个问题中的程序加载入内存,)步操作,有一个正在运行的程序将1.exe问题4.1:
执行第(2这个正在运行的程序是什么?
它将程序加载入内存后,如何使程序得以运行?
3)步操作,程序运行结束后,返回到哪里?
问题4.2:
执行第(4.2
4.1和回答问题中的程序加1.exe时,是正在运行的command将1.exe
(1)我们在DOS中直接执行
载入内存。
,从而使程指向程序的第一条指令(即程序的入口)CPU的CS:
IP
(2)command设置序得以运行。
。
继续运行command3)程序运行结束后,返回到command中,CPU(程序执行过程的跟踪4.9
debug
使用工具:
指向程序的可以将程序加载入内存,设置CS:
IP功能:
观察程序的运行过程(Debug
的相关命令来单的控制,这样,我们就可以使用DebugDebug并不放弃对CPU入口,但)步执行程序,查看每条指令指令的执行结果。
下运行使用方法:
在DOSDEBUG.EXE程序。
xxx.exe(后缀不能省略):
C\debug
作业:
案《汇编语言程序设计》教30
/10
编号:
5
指令和loop第五章[bx]
教学目的:
理解汇编语言的循环结构
(1)
联合使用访问内存实现循环结构的方法和loop
(2)掌握[bx]的格式,理解其工作原理掌握汇编指令loop(3)
掌握段前缀的使用(4)
教学重点及难点:
loop指令的工作原理和[bx]loop联合使用实现循环结构,及
教学方法:
讲授、示例、练习
教学过程:
1、几个概念1.[bx]和内存单元的描述loop”有循环的含义,显然这个指令和循环有关。
2.loop:
英文单词“:
为了描述上的简洁,在以后的课程中,我们将使用一个描述性的符()”3.描述性符号“()”来表示一个寄存器或一个内存单元中的内容。
号“表示常量4.约定符号idata、教学内容25.1[bx]
下面指令的功能:
movax,[bx]
SA:
EA将ds中,EA,段地址SA默认在功能:
bx中存放的数据作为一个偏移地址(ax)=((ds)*16+(bx));处的数据送入ax中。
即:
mov[bx],ax
中的中,将axSA默认在dsbx功能:
中存放的数据作为一个偏移地址EA,段地址。
=(ax)数据送入内存SA:
EA处。
即:
(ds*16+(bx))
)
循环控制指令指令(5.2Loop标号格式:
loop
指令的时候,要进行两步操作:
loopCPU执行;①(cx)=(cx)-1cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。
②判断
作计数器控制程序的循环次数。
CXloop注意:
循环中用
30
/11
补充:
通用寄存器:
累加器:
AXAccumulator
常用于存放算术逻辑运算中的操作数基址寄存器BX:
Baseregister
常用来存放访问内存时的基址(段地址)计数器CX:
Countregister在循环和串操作指令中用作计数器一般数据寄存器DX:
Dataregister也可用于存放I/O的端口地址。
在进行乘、除运算时,它可作为默认的操作数参与运算,指令实现的循环程序中跟踪用loop5.3在Debug中。
,结果存储在dx示例:
计算ffff:
0006单元中的数乘以3分析:
所能存储的范围?
)运算后的结果是否会超出dx
(1)我们用循环累加来实现乘法,用哪个寄存器进行累加?
(2数据长度不一样,如何16位寄存器,单元是一个字节单元,ax是一个ffff:
0006(3)
赋值?
Masm对指令的不同处理5.4Debug和汇编编译器dlcl,,bl,2000:
1、2000:
2、2000:
3单元中的数据送入al2000:
0示例任务:
将内存、中。
中编程实现1)在Debug()汇编程序实现(2段前缀5.6
、cs:
(ds:
、“段寄存器:
在访问内存单元的指令中,用于显式地指明内存单元的段地址的”,在汇编语言中称为段前缀。
或es:
)ss:
一段安全的空间5.7
因为这段空间中可能存放,模式中,在8086随意向一段内存空间写入内容是很危险的着重要的系统数据或代码。
要保证所写入的内存汇编语言程序直接面向机器,如果我们要向内存空间写入数据时,用使不机中都PC在常系响统的正运行,一般的影则,数要有中没重的据否会个字节内存空间,所以我们可以放心使用这段安全的空2560:
200~0:
2ff(00200h~002ffh)这段间。
5.8段前缀的使用0:
200~0:
20b单元中。
段元中的数据拷贝到将内存ffff:
0~ffff:
b
作业:
30
/12
《汇编语言程序设计》教案
编号:
6
第六章包含多个段的程序
教学目的:
(1)理解在代码段中使用数据的原理及不便之处
(2)理解在代码段中使用栈的原理及不便之处
掌握将数据、代码、栈放入不同的段的应用(3)
教学重点及难点:
将数据、代码、栈放入不同的段的应用
教学方法:
讲授、示例、练习
教学过程:
1、引言
前面我们写的程序中,只有一个代码段。
现在有一个问题是:
如果程序需要用其他空间来存放数据,我们使用哪里呢?
我们将以这样的顺序来深入地讨论多个段的问题:
(1)在一个段中存放数据、代码、栈,我们先来体会一下不使用多个段时的情况;
(2)将数据、代码、栈放入不同的段中。
6.1在代码段中使用数据
(将数据定义在代码段中)
示例:
编程计算以下8个数据的和,结果存在ax寄存器中:
0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H。
6.3将数据、代码、栈放入不同的段
在前面的内容中,我们在程序中用到了数据和栈,我们将数据、栈和代码都放到了一个段里面。
我们在编程的时候要注意何处是数据,何处是栈,何处是代码。
这样做显然有两个问题:
(1)把它们放到一个段中使程序显得混乱;
(2)前面程序中处理的数据很少,用到的栈空间也小,加上没有多长的代码,放到一个段里面没有问题。
但如果数据、栈和代码需要的空间超过64KB,就不能放在一个段中(一个段的容量不能大于64KB,是我们在学习中所用的8086模式的限制,并不是所有的处理器都这样)。
所以,我们应该考虑用多个段来存放数据、代码和栈。
作业:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 教案