微机原理第三章汇编语言程序设计

上传人:我*** 文档编号:137269972 上传时间:2020-07-06 格式:PPT 页数:132 大小:593KB
返回 下载 相关 举报
微机原理第三章汇编语言程序设计_第1页
第1页 / 共132页
微机原理第三章汇编语言程序设计_第2页
第2页 / 共132页
微机原理第三章汇编语言程序设计_第3页
第3页 / 共132页
微机原理第三章汇编语言程序设计_第4页
第4页 / 共132页
微机原理第三章汇编语言程序设计_第5页
第5页 / 共132页
点击查看更多>>
资源描述

《微机原理第三章汇编语言程序设计》由会员分享,可在线阅读,更多相关《微机原理第三章汇编语言程序设计(132页珍藏版)》请在金锄头文库上搜索。

1、第三章 汇编语言程序设计,第一节 机器语言、汇编语言与高级语言 一、机器语言与汇编语言,计算机完成任何一个特定的功能都是通过执行特定的程序来实现的,程序是一系列指令组成的,计算机通过对每条指令的译码和执行来完成一系列操作。计算机最终能理解并执行的是以二进制代码表示的机器语言。 例31 在内存中有一个数据块,其首地址为Buffer (3000H:0200H),其中存放16位的符号数20个。现要找出其中的最大值,并将其存入MAX字单元(其偏移地址为0228H)。 借助8086汇编指令我们可以编写出如下程序:,; exm3_1 find the largest number and store in

2、 the max unit,MOV AX,3000H MOV DS,AX MOV SI,0200H MOV CX,14H DEC CX MOV AX,SI CHKMAX: ADD SI,2,CMP SI,AX JLE NEXT MOV AX,SI NEXT: LOOP CHKMAX MOV 0288H,AX INT 20H,汇编以后机器码在内存中的形式如表31所示。表中第三列是汇编语言指令,它是用便于记忆的符号和格式来表示每一条实际的机器指令代码。 用机器语言来编写程序很不直观,也是不现实的,特别是对于复杂问题。PC机有专门的汇编程序,可以用汇编语言直接编程。,二、汇编语言与高级语言,汇编语言

3、程序设计的基本单位仍然是机器指令,只是采用助记符表示,便于人们记忆。因此汇编语言对机器的依赖性很大,称为面向机器的语言。 每种机器都有它专用的汇编语言,在一种机器上用的汇编语言程序很难搬到另一种机器上使用,即不具备通用性和可移植性。汇编语言程序设计员必须对机器的硬件及软件资源有足够的了解才能设计程序。尽管如此,各种汇编语言在基本原理、基本概念和基本编程方法等方面是相同或相近的。 高级语言,如BASIC、FORTRAN、C语言等是进一步发展了的计算机语言。它们是面向过程的语言,不依赖于机器,因而有很好的通用性和可移植性,而且用高级语言设计具有很高的程序设计效率。,高级语言优点很多,还要学习汇编语

4、言的理由如下: (1) 汇编语言仍然是各种系统软件(如操作系统)设计的基本语言。虽然有人用C语言来编写系统软件,但是要将它翻译成机器语言,还必须用到汇编语言。 (2) 用汇编语言编写的程序一般比用高级语言编写的程序执行得快,且所占内存较少。 (3) 在许多实时控制系统中,高级语言并不完全适合,汇编语言就是不可缺少的了。特别是在直接有效地利用机器硬件功能方面,比如中断等就都少不了汇编语言。 (4) 用高级语言开发中,有时需要编写一些非标准过程,而高级语言可能并不支持。这时就需用汇编语言来补充高级语言在某些特定领域中的功能不足。 (5) 学习汇编语言对于学习计算机硬件组成及工作原理是十分重要的。,

5、三、汇编与连接,用汇编语言设计程序首先应根据任务编写汇编语言源程序,文件类型一般标为ASM文件。汇编语言源程序编写有许多规则和方法,本章将予以介绍。 可以用各种文本编辑软件建立源文件,如全屏幕编辑软件EDIT,还有WORD等,ASM文件采用ASCII码。通常文件名的后缀是.ASM。,汇编语言源程序必须经过翻译才能变为二进制机器代码。在计算机中完成这种翻译工作的软件叫汇编程序或汇编器(Assembler)。MASM.EXE就是汇编程序。如果源程序名为:SAMPLE.ASM则用命令: C:MASM SAMPLE.ASM 就可产生目标程序,文件类型一般标为OBJ。为了便于程序调试,同时还产生列表文件

6、,一般标为LST。,目标文件一般还不是可执行的程序,目标文件并没有最终解决机器的寻址问题。程序究竟装在内存的哪个区域?目标文件没有指定。另外,多个不同的目标文件以及库文件LIB可以组合在一起形成一个更大的文件。 连接装配程序LINK.EXE则用来把指定的目标文件和库文件组装成一个完整的程序文件,并且完成相对地址的调整和对变量引用的处理。在汇编后再用LINK命令: C:LINK SAMPLE 则产生SAMPLE.EXE,这是一个可执行文件。EXE文件除了程序、数据等代码之外,还包含一个文件头。 这个文件头也称程序段前缀PSP,占256个字节。文件头中包含了操作系统中的装入程序在把该EXE文件装入

7、内存时所需要的有关信息,如重定位表和初始化有关段寄存器信息等。,PSP的头两个字节是一条INT 20H指令,即返回DOS指令。当一个用户程序运行结束时,可以通过把控制返回给PSP中的这条指令而终止自已的进程。这是由用户程序返回操作系统的传统 方法。 当DOS加载一个可执行文件的程序代码到内存中去时,它首先为该程序建立一个程序段前缀PSP,然后把可执行的程序代码,加载到PSP后续的地址上。(即CS指向地点),而DS和ES初始化在PSP的起始地址。DOS装入EXE文件后的内行分配如图所示。,第二节 汇编语言源程序的结构,如果把例31改写为标准的汇编语言源程序,就可以用MASM命令进行汇编,则源程序

8、如下: ; exm3_1.asm find the largest number and ; store in the max unit data segment org 0200h buffer dw 0, 1, -5, 10, 256, -128, -100, 45, 6 dw 3, -15, -67, 39, 4, 20, -1668,-32766 dw 32765, -525, 300 count equ ($-buffer)/2 max dw ? data ends,stack segment stack stack db 100 dup (s) stack ends code se

9、gment para code assume cs: code, ds: data, ss: stack sta proc far push ds xor ax, ax push ax mov ax, data mov ds, ax lea si, buffer mov cx, count dec cx mov ax, si,chkmax: add si, 2 cmp si, ax jle next mov ax, si next: loop chkmax mov max, ax ret sta endp code ends end sta,一、汇编语言的语句格式,下面分析汇编语言源程序的结构

10、。,汇编语言包含两类语句:CPU指令语句和汇编语言伪指令语句。 指令语句指定CPU做什么操作,如第二章所述; 伪指令语句指定汇编器作何种操作,这是这一章要学习的。 指令语句都有对应的机器码,而伪指令语句一般不产生机器码(只有少数一些数据定义伪指令会产生机器代码)。,1指令语句的格式 汇编语言的CPU指令语句格式如下: label: memonic operand ,operand ;comments 标号域 助记符域 操作数域 注释域 四个域中只有助记符域是必不可缺的,其他的域都是可选的。 助记符域是指令的操作码助记符,如MOV、ADD、SUB等等。助记符域与操作数域之间至少应留有一个空格。两

11、个操作数之间要有逗号分开。 标号一般为转移指令提供目标地址的符号名,例如上例中的CHKMAX。程序员不必去计算相对转移的地址偏移量,汇编器会自动完成这一工作。标号后面跟一个冒号。伪指令前的名字不能后跟冒号。 注释域以分号打头。,汇编语言中的标号或名字或其他变量名必须是由字母或特殊字符打头的字母数字串,中间不能有空格。合法的字符包括: 字母:AZ 或 az 数字:09 特殊字符:问号(?)、圆点()、下横线( _ )和美元符号(),圆点只能作为第一个字符。 标号和名字的长度不超过31个字符,超过部分均被删去。,2汇编伪指令的格式 伪指令是针对汇编程序的命令。它可以用来定义段和过程、定义语句、分配

12、内存空间以及完成各种与程序设计有关的重要说明。汇编伪指令也有四个域: 名字 伪指令 操作数 注释 一般来说,只有伪指令域是必须的。对于某些伪指令,名字域也是必须的,但是要注意的是名字域后面不能用冒号(:)相随。域与域之间用空格隔开。 伪指令的操作数域是可选的,它可以有多个操作数,只受行长度的限制。 有的伪指令操作数域部分的各操作数之间要求用逗号(,)分开,而有些伪指令则要求用空格分开,必须严格遵循有关规定。,二、汇编语言源程序的段定义,汇编语言源程序的段定义与内存的分段组织直接相关。典型的程序包含代码段、数据段和堆栈段。SEGMENT和ENDS伪指令用于定义各种段。它们的语句格式如下: 段名字

13、 SEGMENT 可选项 (段模块) 段名字 ENDS 段名字必须在两处出现,而且必须一致。SEGMENT和ENDS必须成对出现。 SEGMENT定义一个段的开始,ENDS定义一个段的结束。,SEGMENT语句可以有三种可选项:定位类型、连接方式和类别。可选项之间用空格符或制表符TAB分开。格式如下: 段名 SEGMENT 定位类型 连接方式 类别 1定位类型 定位类型指明该段进入内存时从何种类型的边界开始。有四种定位类型:PAGE、PARA、WORD、BYTE。起始地址分别是: PAGE: 0 0 0 0 0 0 0 0 B PARA: 0 0 0 0 B WORD: 0 B BYTE: B

14、 分别表示以页、段、字、字节为起始地址。若缺省则隐含为PARA。,2连接方式 连接方式告诉链接程序本段与其他段的关系。共有六种方式。 NONE 表示本段与其他段在逻辑上没有关系,每段都有自己的基址。这是隐含方式。 PUBLIC 链接程序把本段与同名同类别的其他段连接成一个段。 STACK 表示此段为堆栈段。连接时将所有STACK连接方式的同名段连接成一个段。程序中必须至少有一个STACK段,否则用户必须指令初始化SS和SP;若有多个,初始化时SS指向第一个STACK段。,COMMON 链接程序为本段和同名同类型的其他段指定相同的基址,因而本段将与同名同类别的其他段相覆盖。段的长度为最长的COM

15、MON段的长度。 AT 表达式 链接程序把本段装在表达式的值所指定 的段地址上。 例:AT 1234H,该段的首地址为12340H。 MCODE SEGMENT AT 2050H ;该段从20508H开始, ORG 0008H ; ORG 伪指令给定偏移地址值 START:MOV AX,0 ; 该指令与段基址偏移 8 个字节 . MCODE ENDS MEMORY 链接程序把本段定位在其他所有同名段之上(即地址较大的区域)。若有多个MEMORY段,则第一个按MEMORY方式处理,其余均按COMMON方式处理。,3类别 类别必须用单引号括起来。类别指定同样只在模块连接时才需要。一般对于堆栈段总定

16、义类别为STACK;对代码段通常指定类型为CODE;对数据段则指定为DATA。如果一个程序不准备和其他程序组合,也可以不指定类别。 类别名可由用户任意设定。链接程序把类别名相同的段(段名未必相同)放在连续的存储区间内。但仍为不同的段(连接方式为PUBLIC、COMMON的段除外)。 在前面例子中的堆栈段定义如下: STACK SEGMENT PARA STACK STACK 堆栈段名 定位 连接方式 类别,在堆栈段里一般只要简单地定义一下堆栈段空间大小就行了。 如DB 100 DUP(?) 语句为堆栈分配了100个字节的空间。堆栈空间的大小取决于程序如何使用堆栈。最大不能超过64KB。定义堆栈空间时还可以给字节以初始化,例如: DB 100 D

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号