



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
68086/8088汇编语言程序设计6.1.1汇编语言的语句格式 汇编语句分为指令语句和汇编命令语句。 指令语句的格式如下: (标号:)(前缀指令)助记符(操作数);(注释)其中()中的内容是可以省略的,多个操作数间是以逗号隔开的。 汇编命令语句不汇编成机器代码,它仅仅在汇编过程中告诉汇编程序应如何编译汇编命令式为汇编程序在编译时用的。汇编命令语句用四个字段组成,格式如下: (名字)助记符(操作数);(注释) 当伪指令是数据定义的伪指令时,它称为变量。6.1.2 标号、变量及表达式标号是用符号表示的地址。标号有3个属性:段地址、偏移地址和类型。标号的段地址和偏移地址是指标号对应的指令首字节所在的段地址和段内的偏移地址。标号的类型属性有两种:NEAR和FAR类型。在转移和调用指令中常将标号作为转移目标地址使用。变量是与一个数据项的第一字节相对应的标识符。它表示该数据项第一字节在现行段中的偏移量。变量有3个属性:段地址(SEG)、偏移地址(OFFSET)、类型(TYPE)。表达式由运算符和运算对象组成。运算符有算术、逻辑、关系运算符和汇编语言特定的运算符(分析、合成等)运算对象可以是常数、变量和标号,也可以是操作数,还可以是构成程序的段、偏移量或圆括号内的偏移量。6.1.3 伪指令 伪指令共有20条,常用有以下几条: (1)赋值伪指令EQU, 利用EQU指令可用标号来代表数据、数据地址或程序地址。伪指令EQU有两种格式,即 A. 名称 EQU 表达式 B. 名称 EQU 被定义过的名称或标号 (2)定义变量(分配存储单元)伪指令,就是给变量分配内存的伪指令。这些伪指令是DB, DW, DD, DQ, DT。 A. 当用DW定义地址表达式时,地址表达式中的变量名称表示该变量的第一个存储单元的偏移地址。 B. 当用DD定义地址表达式时,低字节用预置偏移地址,高位字用于预置段地址。 C. 地址表达式中的变量或标号可与常数值相加减。对于变量来说运算结果的类型不变;对标号来说,运算结果仍表示原标号段中的偏移地址。 D. 变量或标号不能相加,但可相减,结果是没有属性的纯数值。 (3)定义存储单元类型伪指令(PTR)。这类指令不单独使用,而是和指令结合起来使用。利用这些伪指令,对存储单元指定数据类型。 (4)段定义伪指令 A. 段定义伪指令SEGMENT/ENDS主要是用来定义段的名称和范围,还可指明段的定位类型、组合类型和分类名。段定义伪指令的格式是: 段名1 SEGMENT 定位类型组合类型分类名 段名1 ENDS当定义数据段、附加数据和堆栈段时,在SEGMENT/ENDS伪指令中间的语句,只能包括伪指令语句,不能包括指令语句。只有当SEGMENT/ENDS定义代码段时,中间的语句才能为指令语句以及与指令有关的伪指令语句。由SEGMENT/ENDS所定义的段小于64KB。B. OGR伪指令。该指令用来规定目标程序存放单元的偏移量。它的格式如下: ORG 表达式该指令前面不能带标识符。 C. ASSUME 伪指令。该指令语句用来告诉汇编程序在指令执行期间内存的哪一段是数据段,哪一段是堆栈段,哪一段是代码段。该指令的格式为: ASSUME 段寄存器名:段名符,段寄存器名:段名符,ASSUME语句只能安排在代码段内,一般应排在代码段作为首指令。(5)定义过程的伪指令有PROC, ENDP, NEAR和FAR。一个过程可以被其他程序所调用,它的最后一条指令总是返回指令,返回到主程序。定义过程的伪指令总是成对出现的,在这两条伪指令间的内容就作为一个过程,即一个子程序。(6)定义结构的伪指令STRUC/ENDS。定义结构伪指令的格式如下: 结构名称 STRUC 由DB, DW, DD伪指令所组成的语句序列字段标识符 结构名称 ENDS结构定义并不保留任何存储空间,也不为任何存储单元赋值,它仅仅是一种模式。因而在引用结构和其字段之前,必须为结构分配空间或赋值。要给结构分配存储空间或赋值,必须有一个引用该结构的语句,其格式如下:变量 结构名称访问结构的方法是:变量名,字段名 (7)源程序结束伪指令END。该指令表明了源程序的终结,其格式如下: END 表达式(表达式通常就是程序第一条指令的语句标号)6.1.4 分支程序设计 程序的分支主要是靠条件转移指令来实现。这里需要注意的是条件转移语句都是近程跳转。若程序所要转移的地址超出其范围时,需利用一条无条件转移语句作为中转。6.1.5 循环程序设计 循环程序设计主要用于某些需要重复进行的操作,主要使用循环指令LOOP,LOOPZ或LOOPNZ或条件转移指令。循环程序的设计可分为设置循环初始状态、循环体和循环控制条件三部分。 (1)设置循环初始状态主要是指设置次数的计数初值,以及其他为能使循环体正常工作而设置的初始状态等。 (2)循环体是循环操作(重复执行)的部分,包括循环的工作部分及修改部分。循环的工作部分是实现程序功能的主要程序段;循环的修改部分是指当程序循环执行时,对一些参数如地址、变量的有规律的修正。 (3)循环控制部分是循环程序设计的关键。每个循环程序必须选择一个控制循环程序运行和结束的条件。6.1.6 子程序设计 子程序可以被调用,且该子程序完成确定的功能后便返回调用程序处。 (1)过程的定义和调用,过程的定义格式为: 过程名 PROC属性 RET 过程名 ENDP 调用过程时只要在CALL指令后写上该过程名即可。属性字段用来指明过程的类型属性是NEAR还是FAR。RET指令总是放在过程体的末尾,用来返回主程序。 (2)寄存器内容的保护和恢复。即保护现场和恢复现场,通常是用堆栈压入指令和弹出指令来实现。必须注意:并不是过程中用的所有寄存器内容都要保护(只有那些子程序和主程序都要用的寄存器才予以保护)。例如,若用寄存器在主程序和过程间传递参数就不需要保护。(3)主程序和过程间的参数传递。主程序调用过程时,必须先把过程所需的初始数据(即入口参数)设置好,过程执行完毕返回主程序时也必须将过程运行所得的结果(即出口参数)送给主程序。过程入口参数传入和出口参数的送出称为主程序和过程间的参数传送。参数传送的方法主要有以下4种:A. 用CPU内部的寄存器传送参数。B. 当过程和主程序同在一个代码段时,过程可以直接访问该代码段中的变量(即参数)。C. 通过地址表传送变量地址。该方法是将所有变量的偏移地址顺序存放在一张地址表中,然后通过寄存器将地址表的地址传送给过程,进入过程后可用寄存器间接寻址方式从地址表中取出变量地址,以便访问所需变量。D. 通过堆栈传送参数或参数地址。该方法是:调用过程前在主程序中用PUSH指令将参数地址压入堆栈;进入过程后再用基址寄存器BP从堆栈中取出这些参数地址,并送寄存器,以便寄存器间接寻址方式访问所需变量。4. 过程的重入。保证子程序可重入性的方法,通常也是将每次调用子程序时所用到的参数和中间结果逐层压入堆栈,以达到每次调用的结果都能正确保存的目的。5. 过程的嵌套、递归的调用。过程嵌套的层次是没有限制的,只要堆栈空间允许即可,但当嵌套层次较多时,应特别注意寄存器内容的保护和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 邮储银行2025秋招半结构化面试题库及参考答案陕西地区
- 2025年3D打印的个性化医疗
- 农业银行2025神农架林区半结构化面试15问及话术
- 邮储银行2025衡水市秋招半结构化面试题库及参考答案
- 邮储银行2025沈阳市秋招笔试专业知识题专练及答案
- 建设银行2025秋招笔试英语题专练及答案新疆地区
- 工商银行2025绍兴市半结构化面试15问及话术
- 农业银行2025陇南市秋招笔试英语题专练及答案
- 建设银行2025秋招群面模拟题及高分话术甘肃地区
- 农业银行2025铜仁市半结构化面试15问及话术
- 劳动合同法全文(2024年版)
- 餐饮服务与数字化运营 习题及答案 项目三
- 预防校园欺凌家长告知书
- 《空调基础知识》课件
- 南海区高一上学期9月初高中衔接测试语文试题(含答案)
- 事业单位考试职业能力倾向测验(自然科学专技类C类)试卷及解答参考(2025年)
- 人教统编版(部编版)小学科学教材目录
- 6.4.3.1余弦定理教学设计高一下学期数学人教A版
- 颈椎后路单开门椎管扩大成形术的护理课件
- 新外研版(三起)三年级上册英语全册教学课件(2024年新版教材)
- 外研版七年级上册初一英语全册课时练(一课一练)
评论
0/150
提交评论