《《汇编语言程序设计》教案》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》教案(31页珍藏版)》请在金锄头文库上搜索。
1、1汇编语言程序设计汇编语言程序设计 教教 案案编 号:1 第一章第一章 基础知识基础知识教学目的:教学目的:(1) 了解机器语言 (2) 理解汇编语言的涵义(3) 理解 8086CPU 硬件系统结构教学重点及难点:教学重点及难点:汇编语言的涵义,CPU 对存储器的读写原理,内存地址空间的分配教学方法:教学方法:讲授、示例、练习教学过程:教学过程:1. 提出三个问题什么是汇编语言为什么学汇编语言如何学习汇编语言2. 介绍本书内容结构及特点3. 教学内容 引言汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。1.1 机器语言机器语言是机器指令的集合。
2、阐述机器语言的原理,发展及弊端。 1.2 汇编语言的产生汇编语言的主体是汇编指令。汇编指令是机器指令的助记符 (两者一一对应)。1.3 汇编语言的组成汇编语言由以下 3 类组成:1、汇编指令(机器码的助记符)2、伪指令 (由编译器执行)3、其它符号(由编译器识别)汇编语言的核心是汇编指令,它决定了汇编语言的特性。 1.4 存储器3CPU 是计算机的核心部件它控制整个计算机的运作并进行运算,要想让一个 CPU 工作,就必须向它提供指令和数据。指令和数据在存储器中存放,也就是平时所说的内存。1.5 指令和数据指令和数据是应用上的概念。在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。1.6
3、存储单元存储器被划分为若干个存储单元,每个存储单元从 0 开始顺序编号;例如:一个存储器有 128 个存储单元, 编号从 0127。存储器的计量单位 B、KB、MB、GB、TB1.7 CPU 对存储器的读写CPU 要想进行数据的读写,必须和外部器件(标准的说法是芯片)进行三类信息的交互:存储单元的地址(地址信息)地址总线器件的选择,读或写命令(控制信息)数据总线读或写的数据(数据信息)数据总线CPU 在内存中读或写的数据演示:读演示、写演示机器码:101000000000001100000000对应的汇编指令:MOV AX,3含义:传送 3 号单元的内容到 AX1.8 地址总线CPU 是通过地
4、址总线来指定存储单元的。一个 CPU 有 N 根地址总线,则可以说这个 CPU 的地址总线的宽度为 N。这样的 CPU 最多可以寻找的 N 次方个内存单元。1.9 数据总线CPU 与内存或其它器件之间的数据传送是通过数据总线来进行的。数据总线的宽度决定了 CPU 和外界的数据传送速度。1.10 控制总线CPU 对外部器件的控制是通过控制总线来进行的。在这里控制总线是个总称,控制总线是一些不同控制线的集合。有多少根控制总线,就意味着 CPU 提供了对外部器件的多少种控制。所以,控制总线的宽度决定了 CPU 对外部器件的控制能力。1.11 内存地址空间(概述)什么是内存地址空间不同的计算机系统的内
5、存地址空间分配情况是不同的。讲解 8086PC 机内存地址空间分配的基本情况4作业:作业:5汇编语言程序设计汇编语言程序设计 教教 案案编 号:2 第二章第二章 寄存器寄存器教学目的:教学目的:(1) 理解通用寄存器的逻辑结构及其存储原理(2) 理解物理地址、段地址及偏移地址的本质含义(3) 理解 8086CPU 读取执行指令的工作原理,及代码段寄存器 CS 和指令指针寄存器IP 的含义,并掌握其使用方法教学重点及难点:教学重点及难点:8086CPU 读取执行指令的工作原理,及代码段寄存器 CS 和指令指针寄存器 IP 的使用方法教学方法:教学方法:讲授、示例、练习教学过程:教学过程:1.CP
6、U 概述一个典型的 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 字在寄存器中的
7、存储一个字可以存在一个 16 位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高 8 位寄存器和低 8 位寄存器中。2.3 几条汇编指令汇编指令不区分大小写注意:在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的。62.4 物理地址CPU 访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址。2.5 16 位结构的 CPU概括的讲,16 位结构描述了一个 CPU 具有以下几个方面特征:1、运算器一次最多可以处理 16 位的数据。2、寄存器的最大宽度为 16 位。3、
8、寄存器和运算器之间的通路是 16 位的。2.6 8086CPU 给出物理地址的方法8086CPU 采用一种在内部用两个 16 位地址合成的方法来形成一个 20 位的物理地址。地址加法器合成物理地址的方法:物理地址=段地址16+偏移地址2.7 “段地址16+偏移地址=物理地址”的本质含义用两个比喻说明2.8 段的概念错误认识:内存被划分成了一个一个的段,每一个段有一个段地址。 其实: 内存并没有分段,段的划分来自于 CPU,由于 8086CPU 用“(段地址16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。两点需要注意(1)段地址16 必然是 16 的
9、倍数,所以一个段的起始地址也一定是 16 的倍数;(2)偏移地址为 16 位,16 位地址的寻址能力为 64K,所以一个段的长度最大为 64K。结论:CPU 可以用不同的段地址和偏移地址形成同一个物理地址。2.9 节2.12 节1、段地址在 8086CPU 的寄存器中存放。当 8086CPU 要访问内存时,由段寄存器提供内存单元的段地址。8086CPU 有 4 个段寄存器,其中 CS 用来存放指令的段地址。2、CS 存放指令的段地址,IP 存放指令的偏移地址。8086 机中,任意时刻,CPU 将 CS:IP 指向的内容当作指令执行。3、8086CPU 的工作过程:(1)从 CS:IP 指向内存
10、单元读取指令,读取的指令进入指令缓冲器;(2)IP 指向下一条指令;(3)执行指令。 (转到步骤(1) ,重复这个过程。 )4、8086CPU 提供转移指令修改 CS、IP 的内容。作业:作业:7汇编语言程序设计汇编语言程序设计 教教 案案编 号:3 第三章第三章 寄存器(内存访问)寄存器(内存访问)教学目的:教学目的:(1) 掌握汇编指令访问内存的方法(2) 理解汇编指令 mov、add、sub 的格式及含义,并掌握其使用方法(3) 理解 CPU 的堆栈机制,掌握汇编指令 push、pop 的含义及其使用方法(4) 理解数据段、代码段、栈段的内涵教学重点及难点:教学重点及难点:汇编指令访问内
11、存的方法,汇编指令格式,及堆栈机制教学方法:教学方法:讲授、示例、练习教学过程:教学过程:1.引言在第 2 章中,我们主要从 CPU 如何执行指令的角度讲解了 8086CPU 的逻辑结构、形成物理地址的方法、相关的寄存器以及一些指令。这一章中,我们从访问内存的角度继续学习几个寄存器。2.教学内容3.1 内存中字的存储结论:任何两个地址连续的内存单元,N 号单元和 N+1 号单元,可以将它们看成两个内存单元 ,也可以看成一个地址为 N 的字单元中的高位字节单元和低位字节单元。3.2 DS 和addressCPU 要读取一个内存单元的时候,必须先给出这个内存单元的地址;在 8086PC 中,内存地
12、址由段地址和偏移地址组成。8086CPU 中有一个 DS 寄存器,通常用来存放要访问的数据的段地址。问题:如何用 mov 指令从 10000H 中读取数据?结论:mov bx,1000Hmov ds,bxmov al ,0注意:8086CPU 不支持将数据直接送入段寄存器的操作,ds 是一个段寄存器。(硬件设计的问题)mov ds,1000H 是非法的。3.3 字的传送因为 8086CPU 是 16 位结构,有 16 根数据线,所以,可以一次性传送 16 位的数据,也就是一次性传送一个字。93.4 mov、add、sub 指令已学 mov 指令的几种形式:mov 寄存器,数据mov 寄存器,寄
13、存器mov 寄存器,内存单元mov 内存单元,寄存器mov 段寄存器,寄存器根据已知指令进行推测:mov 段寄存器,寄存器mov 寄存器,段寄存器(验证)mov 内存单元,寄存器mov 内存单元,段寄存器mov 段寄存器,内存单元注意:add 和 sub 指令同 mov 一样,都有两个操作对象。3.5 数据段定义:将一组长度为 N(N64K) 、地址连续、起始地址为 16 的倍数的内存单元当作专门存储数据的内存空间,从而定义了一个数据段。访问数据段中的数据:用 ds 存放数据段的段地址,再根据需要,用相关指令访问数据段中的具体单元。示例3.6 栈栈是一种具有特殊的访问方式的存储空间。它的特殊性
14、就在于,最后进入这个空间的数据,最先出去。栈有两个基本的操作:入栈和出栈。入栈:将一个新的元素放到栈顶;出栈:从栈顶取出一个元素。栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。栈的操作规则:LIFO(Last In First Out,后进先出)3.7 CPU 提供的栈机制8086CPU 提供入栈和出栈指令: (最基本的)PUSH(入栈) POP (出栈)push ax:将寄存器 ax 中的数据送入栈中;pop ax :从栈顶取出数据送入 ax。注意:8086CPU 的入栈和出栈操作都是以字为单位进行的。push 指令的执行过程:push ax10(1)SP=SP2;(2)将 ax
15、中的内容送入 SS:SP 指向的内存单元处,SS:SP 此时指向新栈顶。pop 指令的执行过程:pop ax(1)将 SS:SP 指向的内存单元处的数据送入 ax 中;(2)SP = SP+2,SS:SP 指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶。3.8 栈顶超界的问题当栈满的时候再使用 push 指令入栈,栈空的时候再使用 pop 指令出栈,都将发生栈顶超界问题。栈顶超界是危险的。我们在编程的时候要自己操心栈顶超界的问题 ,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;执行出栈操作的时候也要注意,以防栈空的时候继续出栈而导致的超界。3.9 push
16、、pop 指令push 和 pop 指令的格式(1)push 寄存器:将一个寄存器中的数据入栈pop 寄存器:出栈,用一个寄存器接收出栈的数据push 和 pop 指令的格式(2)push 段寄存器:将一个段寄存器中的数据入栈pop 段寄存器:出栈,用一个段寄存器接收出栈的数据push 和 pop 指令的格式(3)push 内存单元:将一个内存单元处的字入栈(栈操作都是以字为单位)pop 内存单元:出栈,用一个内存字单元接收出栈的数据3.10 栈段定义:将长度为 N(N 64K )的一组地址连续、起始地址为 16 的倍数的内存单元,当作栈来用,从而定义了一个栈段。访问:如何使用如 push、pop 等栈操作指令访问我们定义的栈段呢? 将 SS:S