微机原理第五章:汇编语言程序设计.ppt

上传人:小飞机 文档编号:6572832 上传时间:2023-11-13 格式:PPT 页数:58 大小:277.16KB
返回 下载 相关 举报
微机原理第五章:汇编语言程序设计.ppt_第1页
第1页 / 共58页
微机原理第五章:汇编语言程序设计.ppt_第2页
第2页 / 共58页
微机原理第五章:汇编语言程序设计.ppt_第3页
第3页 / 共58页
微机原理第五章:汇编语言程序设计.ppt_第4页
第4页 / 共58页
微机原理第五章:汇编语言程序设计.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《微机原理第五章:汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《微机原理第五章:汇编语言程序设计.ppt(58页珍藏版)》请在三一办公上搜索。

1、第五章 汇编语言程序设计,内容摘要:,从汇编语言程序的基本概念出发,介绍汇编语言语法规则、汇 编语言程序段结构、伪指令、上机操作环境等基础知识。通过对程序的基本结构 顺序、分支、循环、子程序结构 的介绍,举例讨论其程序设计方法和技巧。,学习要点:,熟悉汇编语言的语法规则 掌握汇编语言程序的基本结构及书写格式 掌握等伪指令的语句格式、功能及应用 掌握汇编语言源程序的建立、汇编、连接、调试及运行 掌握汇编语言程序的设计方法和技巧,第五章 汇编语言程序设计,本章主要内容,51 基础知识52 汇编语言程序的设计思想53 常用DOS功能调用54 汇编语言程序上机调试过程55 汇编语言程序设计实验一:汇编

2、语言上机实验实验二:分支、循环程序设计实验试验三:DOS 系统功能调用实验实验四:子程序结构设计实验,51 基础知识,5.1.1 汇编语言和汇编程序,一、汇编语言,是一种面向机器的程序设计语言,它是助记符来表示操作码和 操作数,用符号地址表示操作数地址。与机器语言相比,具有易记、易读、易修改和易交流的优点。用汇编语言编写的程序称为汇编语言源程序,它就是机器语言 程序的符号表示,汇编语言源程序与其经过编译所产生的目标 代码程序之间存在一一对应关系。汇编语言源程序能够直接利用硬件系统的特性对位、字节、字、寄存器、存储单元、I/O 端口等进行处理,可直接使用CPU指令 系统的寻址方式编制出高质量的程

3、序,程序不但占用空间少,而且执行速度快。,5.1.1 汇编语言和汇编程序,二、汇编程序,将汇编语言源程序编译成目标代码程序(机器语言程序)的程序 称为汇编程序。它是一种系统软件。常用的汇编程序有:Microsoft 公司推出的宏汇编程序 MASM 和 Borland公司推出的TASM,本书只介绍MASM。,汇编程序以汇编语言源程序文件作为输入,经编译后产生两个 输出文件:目标程序文件、源程序列表文件。目标程序文件经连接定位后,才可以被计算机执行;源程序列表文件列出源程序、目标程序的机器语言代码及符号表。符号表是汇编程序所提供的一种诊断手段,它包括程序中所用的 所有符号和名字以及这些符号和名字所

4、指定的地址,如果程序出 错,设计者较容易地从符号表中检查出错误。,5.1.1 汇编语言和汇编程序,二、汇编程序,汇编程序和汇编语言源程序是两种不同类型的程序。汇编程序是将汇编语言源程序编译成机器代码程序的系统程序;汇编程序可识别指令助记符和汇编程序提供的对汇编过程起控制 作用的伪指令,即汇编命令。汇编程序是最成熟的一种系统软件,其主要功能有:1检查汇编语言源程序中的语法错误,并给出错误信息。2产生汇编语言源程序的目标程序文件和列表文件。编写汇编语言源程序时,应严格遵守汇编语言程序的书写规范,否则就会出错。,5.1.2 汇编语言程序的语法规则,一、汇编语言语基本语法(词法),汇编语言源程序是汇编

5、语言语句的有序集合;语句是由一个具有独立定义的单词按一定的句法组合而成;而单词是语言的基本元素字符按一定的词法规则构成。,5.1.2 汇编语言程序的语法规则,一、汇编语言语基本语法(词法),1字符集(基本元素)汇编语言中所有的操作符、助记符、标识符都由基本元素按词法 规则构成。,2标识符(标识符号),标识符是编程人员为便于记忆而自己创造的一些有意义的符号,用来给程序中的标号、变量、结构、过程、段 等起名字;标识符的创造应符合词语规则:1)第一个字符必须是字母、“?”、“”或“-”;2)第二个字符开始可以是字母、数字、问号、“”或“-”;3)一个标识符的最大长度为 31个字符,5.1.2 汇编语

6、言程序的语法规则,一、汇编语言语基本语法(词法),3保留字:是不能用来做标识符的一些单词 寄存器名、指令助记符、各种操作符等系统专用的保留字,4语句:8086汇编语言有三类语句(1)指令语句:可产生机器指令代码的语句,是执行性语句。(2)汇编命令语句:也称伪指令语句,是一种指示性语句,用以 指示汇编程序如何对汇编语言源程序进行编译,以产生正确 的目标代码程序。(3)宏指令语句:宏汇编中的指示性语句,由宏命令构成。汇编命令语句和宏指令语句都不产生可执行的机器指令代码,仅在汇编和宏汇编的过程中起汇编(编译)的指示作用。,5.1.2 汇编语言程序的语法规则,一、汇编语言语基本语法(词法),5程序结构

7、 汇编语言源程序的结构是段式结构。一个源程序最多有 四种段:即:代码段、数据段、堆栈段、扩展段。每种段在源程序中的先后顺序(位置)可任意。但个数不受限。每个段必须有段名。指令语句必须安排在代码段中,代码段中可以定义过程。例:完整段定义的汇编语言源程序结构(如下),5.1.2 汇编语言程序的语法规则,二、汇编语言语句(句法),1指令语句(执行性语句)标号:前缀指令 助记符 操作数,操作数;注释 标号是指令语句在代码段内的地址,2汇编命令语句(指示性语句)名字 助记符 操作数,操作数,;注释 名字和标号一样,都是符号地址,反映所属对象的逻辑地址EA;不同的伪指令,其名字的叫法也不同:变量名:所定义

8、的存储单元在数据段中的地址。段名:表示相应段的段首地址(段基址)。过程名:表示相应子程序在代码段中的起始地址。,5.1.2 汇编语言程序的语法规则,标号和名字一经定义,便具有以下三种属性值:(1)段值:所属段的段基址。(2)偏移值:在段内的偏地址。(3)类型值:标号、过程名具有 NEAR 和 FAR 类型。变量名的类型有:BYTE,WORD,DWORD。,指令性语句指示性语句,CPU执行的语句经汇编后能够生成目标代码,汇编程序执行的语句不产生目标代码CPU 不执行,指令性语句与指示性语句的区别,5.1.2 汇编语言程序的语法规则,二、汇编语言语句(句法),在写程序中,往往需要在不同地方重复使用

9、某几条语句。为使 源程序书写精练、可读性好,可以先将这几条语句定义为一条 宏指令语句。写程序时,可以用宏指令语句来代替这几条语句。汇编时,汇编程序按照宏指令的定义,在出现宏指令的地方将 其展开还原。引入宏指令语句的目的仅仅在于简化汇编语言源程序的书写,但并不能缩小目标代码文件,更谈不上节省内存空间。宏指令语句是由标号、宏指令和注释组成。,3宏指令语句,5.1.2 汇编语言程序的语法规则,引入“域”的概念,将三种语句结构统一,汇编语言的语句可由14个“域”组成。标号/名字域 操作数域 注释域,1)此域是标识符,可选项;应按照标识符的命名规则进行命名。2)标号和名字的区别:标号是指令所在单元的符号

10、地址,在汇编语言源程序中,标号 出现在代码段,后面跟有冒号“:”。名字可以是变量、段名、过程名、符号名等,在汇编语言的源 程序中,名字出现在伪指令语句中,其后不允许出现冒号“:”。,第一部分:标号/名字域,5.1.2 汇编语言程序的语法规则,第一部分:标号/名字域,3)标号和变量的属性:变量是某操作数所存放单元的符号地址。标号和变量都表示单元的符号地址,因此具有相同的三种属性:段属性 偏移地址属性 类型属性,变量的属性,标号的属性,下一页,段属性 偏移地址属性 类型属性,变 量 的 属 性,数据定义伪指令 DB、DW、DD 前的名字,称为变量 例:DATA DB 24H,31H,A,B,100

11、,64H 段属性:表示变量所在的逻辑段的段基地址。偏移量属性:表示变量所在逻辑段的段内有效地址EA。类型属性:表示变量占用存储单元的字节数,有三种类型:BYTE(字节)、WORD(字)、DWORD(双字),返回,段属性 偏移地址属性 类型属性,标 号 的 属 性,返回,标号对应该指令代码第一个字节在代码段中的偏移地址EA。段属性:表示指令代码所在逻辑段的段基地址。偏移地址属性:表示指令代码所在逻辑段的段内偏移地址。类型属性:表示标号是在段内或段间引用 NEAR(近)类型,在本逻辑段内被引用的标号;FAR(远)类型,在段间引用的标号。,5.1.2 汇编语言程序的语法规则,第二部分:指令助记符域,

12、指令、伪指令、宏指令的助记符,是必选项。指令是指CPU指令系统中的指令,汇编程序能将其编译成对应 的机器指令代码;伪指令不能被编译成对应的指令代码,只是在汇编过程中完成 相应的控制操作,所以又称为汇编控制指令或指示性指令。作用:定义并分配存储单元、赋值、控制汇编开始或结束等。宏指令是有限的一组指令的代号,编译时将根据其定义展开成 相应的指令。,表达式,常数,5.1.2 汇编语言程序的语法规则,第三部分:操作数域,操作数是指令的操作对象,可以有一个、多个或隐含操作数,当有两个、两个以上的操作数时,各操作数之间用逗号隔开。操作数可使用常数、寄存器、标号、变量、表达式等形式。操作数分为数值型:常数、

13、数值表达式 地址型:标号、变量、过程名及地址表达式等,操作符:汇编语言可提供相关的操作符,表达式是由操作数和 8086汇编中的运算符及操作符构成。,下一页,5.1.2 汇编语言程序的语法规则,第三部分:操作数域,1运算符与常数、寄存器名、标号、变量等一起共同构成表达式,在编译过程中,汇编程序先运算表达式的值,然后再进行编译。2运算符的优先级别决定了运算的顺序,同时也决定了运算的结果。3当一个表达式中包含有多个运算符时,其运算按以下规则进行:优先级高的先运算,优先级低的后运算;优先级相同时,按表达式中从左到右的顺序运算;括号可以提高运算的优先级,括号内的运算优先于相邻的运算。,各类运算符的优先级

14、别 见教材 108页表 53,下一页,5.1.2 汇编语言程序的语法规则,第四部分:注释域,下一页,注释域是从分号“;”开始。注释用来说明一段程序或几条指令的功能,便于程序阅读。注释可有可无,在编译时不会处理注释。,常 数,常数是指令中出现的固定数值。如:立即数、直接地址等。,常数只能作为源操作数,不能作为目标操作数。1数值常数:二进制数“以B结尾”;十进制数;十六进制数“以H结尾”以字母开始的十六进制常数,必须在字母前面加上“0”,作为 十六进制常数的标识,以与标识符相区别。2字符常数:是以单引号括起来的一个或多个字符。由字符的ASCII码值构成字符或字符串常数,字符常数的长度 必须为一个字

15、节或一个字,以便与目标操作数的长度相匹配。3符号常数:用一个标识符表示一个常数值。,返回,表 达 式 的 构 成,表达式由操作数和 8086 汇编中的运算符或操作符构成,运算符或操作符的运算,是在汇编过程中进行的。,表达式可分为:数值表达式和地址表达式 数值表达式的运算结果是一个常数,在指令中做为操作数使用 地址表达式的运算结果是一个存储单元的地址。在指令中做为 存储器操作数使用,下一页,操作符:汇编语言提供的操作符有以下五种:,算术运算符,逻辑运算符,关系运算符,属性操作符,数值回送符,算 术 运 算 符,举例:MOV AL,NUM 3 MOV AL,2003H MOV AL,BX 10H

16、MOV AL,1210H MOV BX,40H 2 MOV BX,80H NUM:符号常数,BX=1200H,算术运算符用于完成算术运算,算术运算符有:加“”、减“”、乘“”、除“/”求余“MOD”、左移“SHL”、右移“SHR”其中加、减、乘、除运算都是整数运算,结果也是整数;除运算得到商的整数部分;求余运算得到两数整除后的余数;特别注意:算术运算符用于地址表达式时,只有加、减运算才有 实际意义,要求进行加或减的两个地址必须在同一段内,其物理 意义表示在原地址基础上偏移了若干单元。,返 回,逻 辑 运 算 符,举例:MOV AX,00FFH AND 0FF0H MOV AX,0000H MO

17、V AL,35H XOR 0FH MOV AL,0CAH AND BL,32 OR 64 AND BL,60H,逻辑运算是对常数值操作数进行按位操作。逻辑运算符有:与“AND”、或“OR”、异或“XOR”、非“NOT”。NOT是单操作数运算符,其它逻辑运算符为双操作数运算符。逻辑运算符与指令中的逻辑运算指令不同,它在汇编过程中产生 一个逻辑运算值,不会影响标志位。需要注意的是:逻辑运算符只能用于数值表达式,不能用于地址表达式。,返 回,关 系 运 算 符,关系运算符有六种:相等“EQ”小于“LT”小于或等于“LE”、不等“NE”大于“GT”大于或等于“GE”。用于连接两个操作数,操作数应为数值

18、或同一逻辑段内的地址。关系运算的结果只有两种情况:关系成立、不成立。若关系成立,关系运算的逻辑结果值为“真”,结果全1,如:MOV CX,5 NE 3;汇编后为:MOV CX,0FFFFH 若关系不成立,其结果的逻辑值为“假”,结果全0,如:MOV AL,56 LT 24;汇编后为:MOV AL,0,返 回,数 值 回 送 符,数值回送符是对存储器地址进行运算,又称为分析运算符。它可以将存储器地址的三个重要属性:段、偏移量和类型分离出来,其返回值作为地址操作数使用。,数值回送符是一类获取符号地址属性的操作符,有五个:SEG、OFFSET、TYPE、LENGTH、SIZE,下一页,数 值 回 送

19、 符,1格式:SEG 名字/标号 功能:获取名字/标号所属段的段基址,以数字形式表达出。2格式:OFFSET 名字/标号 功能:获取名字/标号的有效地址EA,以数值型形式表达出。3格式:TYPE 变量/标号 功能:获取变量/标号的类型值,以数值形式表达出。类型与类型值对照表见 105 页 表 5.14格式:LENGTH 变量 功能:对用 DUP重复定义符定义的数组变量,获取其重复定义 的变量个数,不分字节、字或双字。对于其他变量,则给出的值为 1。5格式:SIZE 变量 功能:获取变量所占的字节数。,举 例,XX1 DW 40 DUP(?)VR1 DB AB VR2 DW 20,64H MOV

20、 BX,OFFSET XX1;取变量 XX1 的有效地址送 BXMOV SS,SEG XX1;取变量 XX1 的段基地址送 SSMOV AL,LENGTH XX1;取变量 XX1 被重复定义的次数送 ALMOV DL,TYPE VR1;取变量 VR1 的类型值送 DLMOV DH,TYPE VR2;取变量 VR2 的类型值送 DHMOV CL,SIZE XX1;取变量 XX1 所占的字节数送 CL SIZE XX1 TYPE XX1 LENGTH XX180 DUP 重复定义符(复制操作符)表达式 1 DUP(表达式 2)表达式1:为重复定义的数量。表达式2:为重复定义的内容,可以是数字,或字

21、符串。当为“?”时。其内容为随机数。,举 例,返 回,属 性 操 作 符,为存储器操作数(地址表达式)临时指定一个类型属性,而忽略 原有的属性 PTR 属性操作符 格式:类型 PTR 地址表达式 功能:按 PTR 后面的表达式去寻址时,不管它原来有无类型,均以 PTR 前的类型为准。存储器操作数类型:BYTE,WORD,DWORD 标号、过程名类型:NEAR,FAR 例如:MOV BYTE PTR 1000H,0;MEM的 1000H 单元清零 MOV WORD PTR 1000H,0;1000H、1001H 单元清零,下一页,属 性 操 作 符,THIS 属性操作符 格式:THIS 类型 功

22、能:指定一个新变量或标号类型。一般用在 EQU 伪指令后。例:Z2 EQU THIS WORD;Z2被指定成字变量 Z1 DB 20H,40H;Z1定义为字节变量,;并分配存储单 Z2 被定义为字变量,但它并不具有变量(标号)的另两个 属性值,即段值和偏移值。用THIS 属性操作符指定的变量/标号具有与其后最先出现 的变量/标号相同的地址属性。所以 Z2 和 Z1 具有相同的段基址和段内偏移地址。,下一页,属 性 操 作 符,段属性前缀 CS:、SS:、DS:、ES:格式:段寄存器名称:地址表达式 作用:逻辑地址中段的属性是可以缺省的,但系统对缺省的段 有明确的规定。如:若用 BP 作基址寻址

23、,则规定此单元位于堆栈段 SS;若用 BX 作基址寻址,则规定此单元位于数据段 DS。但对于某些特例,则必须使用段属性(超越)前缀,例如:MOV AX,ES:BXSI 该指令是把 ES 段中偏移地址为BXSI 单元中的字送AX,而不是到 DS 段去寻址这个单元。,下一页,属 性 操 作 符,SHORT 属性操作符 格式:SHORT 标号 作用:SHORT 操作符用来指定 JMP 指令中跳转地址的属性,指出跳转地址是以下一条指令地址为中心,在:128 127 个字节范围之内。例:JMP SHORT NEXT 使用SHORT运算符后,跳转的标号地址NEXT与JMP指令 的距离不能超出128 127

24、个字节范围。JMP 指令可以实现段间或段内跳转。在段内跳转时,跳转 距离可以在 32KB 范围内,若用 SHORT 操作符修饰后,则只能在 127 字节范围内实现短距离跳转。,下一页,属 性 操 作 符,HIGH 和 LOW 操作符。HIGH 和 LOW 被称为字节分离运算符,它接受一个字的常数或 地址表达式,HIGH 取其高位字节,LOW 取其低位字节。例如:COUNT EQU 1234H MOV AH,HIGH COUNT MOV AL,LOW COUNT 汇编后,等价于:MOV AH,12H MOV AL,34H,返 回,5.1.3 伪指令,伪指令是提供给汇编程序和连接程序的汇编命令。,

25、源程序中的伪指令经过汇编后,不产生目标指令代码。伪指令根据其功能,大致可分为一下几类:,数据定义伪指令,符号定义伪指令,段定义伪指令,过程定义伪指令,模块定义,其它的伪指令,下一页,5.1.3 伪指令,一、数据定义伪指令 DB、DW、DD,格式:变量名_助记符_数据项,;注释 功能:将伪指令后的数据项依次存入指定的单元,或只分配存储 单元而不存入数据。也称为存储单元分配伪指令。变量名:表示数据项中第一个字节在存储器中的地址和数据类型 数据项:可以是常数、字符或字符串、保留符号“?”“?”保留符号用以保留空间不存入数据 例:DATA SEGMENT;定义数据段 L1 DB 24H,37H,0F3

26、H L2 DW 4567H,0A87FH L3 DD 23456789H,0B1234567H L4 DW 40H DUP(?);保留64个字单元 DATA ENDS;数据段定义结束,返 回,5.1.3 伪指令,二、符号定义伪指令,此类伪指令是给一个符号重新命名或定义新的类型属性 这些符号可以是变量名、标号名、过程名、寄存器名或 指令助记符等。常用的符号定义伪指令有:1EQU“赋值伪指令”2“等号伪指令”:3LABLE“伪指令”4PURGE“解除伪指令”,下一页,二、符号定义伪指令,1赋值伪指令:EQU,格式:符号名_EQU_表达式;注释功能:将右边表达式的值或功能赋予左边的符号名。,EQU

27、定义过的符号名未用解除伪指令解除之前,不能重新定义 例:ABC EQU 2000H;ABC 等于2000H 立即数 AM EQU BP+5;AM 等价于BP+5的地址表达式 AN EQU CX;AN 等价于CX 寄存器 MOV AN,AM;等价于 MOV CX,BP+5 MOV AX,ABC;等价于 MOV AX,2000H,EQU伪指令是给符号名定义一个值,或定义为其它符号名,或数值表达式,也可以是任何有效的助记符。,下一页,二、符号定义伪指令,2等号伪指令:,格式:符号名 表达式;注释功能:同EQU伪指令,但用“”伪指令定义的符号不经解除 即可重新定义。,等号伪指令的功能与EQU伪指令基本

28、相同,主要区别在于:在整个程序中它可以对同一个名字进行多次重复定义。,例:GOT=10;正确,GOT代替常数10 GOT=1020;正确,GOT可以重复定义 但:GOT EQU 10;正确,GOT代替常数10 GOT EQU 1020;错误,GOT不能再次定义,下一页,二、符号定义伪指令,3LABLE 伪指令,格式:变量/标号 LABLE 类型功能:使同一个变量或标号可以具有不同的类型属性,在程序中可以根据不同的需要使用这些变量和标号。,变量类型:BYTE/WORD/DWORD 标号类型:NEAR/FAR 例:VAL1 LABLE BYTE;VAL1是字节类型变量 VAL2 DW 20 DUP

29、(?);VAL2是字类型变量;VAL1和VAL2变量的存储地址相同,但类型不同 NEXT1 LABLE FAR;NEXT1为FAR类型标号 NEXT2:MOV AX,1200H;NEXT2为NEAR类型标号 JMP NEXT2;段内转移 JMP NEXT1;段间转移,下一页,二、符号定义伪指令,4解除伪指令:PURGE,格式:PURGE_符号名,功能:解除伪指令PURGE 用于解除指令后的符号名的定义。使这些符号名可以重新定义。,PURGE 伪指令前不能有名字。,返 回,三、段定义伪指令 SEGMENT/ENDS,SEGMENT/ENDS必须成对出现,在其之间的内容为一个段 段名表示该段在存储

30、器中的起始地址即段基址 同一段 SEGMENT/ENDS 伪指令前段名必须相同 不同类型的段段名应不同;同类型的段段名可以相同 常用的段定义伪指令有:SEGMENT/ENDS 和 ASSUME 等,格式:段名_SEGMENT_定位类型_组合方式_类别 功能:从SEGMENT 指令开始,以下出现的指令或伪指令都 是该段的内容,直至 ENDS 指令出现,表示该段结束。,段定义伪指令是在汇编语言程序中定义逻辑段,用它来指定 段的名称和范围,并指明段的定位类型、组合类型及类别。,下一页,三、段定义伪指令 SEGMENT/ENDS,定义的数据段、堆栈段、扩展段中只能包括伪指令语句,不能有 指令语句。代码

31、段中可以包括指令语句和伪指令语句。定义一个段,其长度应小于64KB;当段内源程序的结构形式确定后,其段内的标号、变量在段内的 偏移地址就已确定,它们都在同一个段的地址范围内。典型的源程序结构包括四种类型的段,每种类型的段可以有多个;但基本的源程序必须包括一个代码段,可以没有其它类型的段。定位类型、组合方式、类别 为参数部分;根据需要可有可无,有关参数部分的含义和用法可以参阅教材 112 113 页相关的部分,下一页,例:完整段定义的源程序结构,;L30H.ASM 源程序名 STACK SEGMEMT;定义堆栈段,段名 STACK DW 512 DPU(?);定义512字节,为堆栈段的大小 ST

32、ACK ENDS;定义堆栈段结束 DATA SEGMEMT;定义数据段,段名 DATA MU DB 10,20,33H;定义三个数据,变量名MU DATA ENDS;定义数据段结束 CODE SEGMEMT;定义代码段,段名CODE ASSUME CS:CODE DS:DATA SS:STACK;段寻址:给定义的段说明属性,告知汇编程序每个段属于什么性质的逻辑段,;以便将段的基址送入相应的段寄存器。START:MOV AX,DATA;数据段的段基址送AX MOV DS,AX;数据段的段基址送DS MOV AH,4CH;功能号 4CH 送AH INT 21H;系统 4CH 功能调用,返回DOS系

33、统 CODE ENDS;定义代码段结束 END START;程序结束,指明程序的起点从标号START起,下一页,四、段寻址伪指令 ASSUME,格式:ASSUME_段属性符:段名,段名符:段名,;功能:给定义的段确定段的类型,用来告诉汇编程序,说明定义的 每个段都是什么类型。,段属性符:“CS:”、“DS:”、“SS:”、“ES:”也称段名符 ASSUME 语句只能安排在代码段中,常在代码段的起始位置上 汇编语言的源程序只用一个段时,其堆栈段、扩展段、数据段 可安排在同一个代码段内,此时ASSUME语句的格式为:ASSUME CS:CODE,DS:CODE,SS:CODE,ES:CODE,下一

34、页,四、段寻址伪指令 ASSUME,返 回,ASSUME 语句只是说明段的类型;并不将段的基址装入相应的段基址寄存器中(除CS外);各个段基址寄存器中的实际值还要用MOV指令来赋值。例如:MOV AX,DATA;数据段基址送AX,DATA是数据段段名 MOV DS,AX;将数据段基址送DS寄存器。段名具有段地址的属性:可以将段名看成一个符号常数,代表了段的段基地址;各段的首地址是在汇编和连接过程中,由DOS系统所决定的。,五、过程定义的伪指令 PROC/ENDP,格式:过程名_PROC _类型;类型有 FAR/NEAR;子程序结构 RET;过程返回指令 过程名_ENDP;过程定义结束,此伪指令

35、必须成对使用;PROC 和 ENDP 之间的内容就是过程,过程也称为子程序,过程名是该过程(子程序)的名字 过程名作为 CALL指令 的操作数使用。它是子程序首条指令的 第一个字节在存储器中占用单元的符号地址。段内调用的过程,其类型为:NEAR 段间调用的过程,其类型应为:FAR,返 回,格式:ORG 偏移地址 功能:用来规定目标程序或数据项从指定的偏移地址开始。,七、定位伪指令 ORG,例如:ORG 2000H;ORG 以下出现的数据或程序代码将从 MOV AX,DATA;段内的 2000H 单元开始一次顺序排放。MOV DS,AX ORG伪指令语句一般放在源程序的开始,但也可以放在源程序

36、中的任何地方,下一页,八、程序计数器$字符,程序计数器$字符,用来保存当前正在汇编的指令地址。,汇编程序在对段定义的处理过程中,每遇到一个新的段名,就在段表中填入该段名,并为该段设一个初值为 0 计数器;在对该段进行汇编时,对存储器分配语句及目标代码语句,将其占用存储器的字节数经计数器进行计数;随着汇编的进行,计数器的值不断增加,“$”表示位置计数器 的当前值,它可以在数值表达式中使用。,具体使用见:教材114页下部例题,下一页,格式:END 标号功能:表示源程序到此结束,指示汇编程序停止汇编,对于END后面 的语句可以不予理会。,九、段结束伪指令 END,END伪指令后面的标号表示程序执行的

37、起始地址 方括号中的标号是任选项,如果有多个模块(代码段)连接在一 起时,只在主程序结束的程序模块中的 END 伪指令后加注标号 其余程序模块只用 END 指示结束,而不能在 END 后加注标号 连接程序 LINK 根据此标号设置 CS 和 IP 值,指定目标程序的 起始地址。,返 回,小 结,一、语句格式,1指令语句:执行性语句 标号:前缀指令_助记符_操作数,操作数;注释2汇编命令语句:指示性语句(伪指令语句)名字_助记符_操作数,操作数,;注释 标号、名字:标号后有冒号,用在指令性语句前;名字后不加冒号,用在指示性语句前。都是由英文字母、数字及专用字符组成,最大长度不能 超过 31个字符

38、,数字不能打头,不能使用保留字。,操作数的表达,操作码 指令助记符:使CPU按照要求完成操作的命令。汇编助记符:指示汇编程序要完成的操作,用来定义变量、分配存储单元、指示程序开始和结束等。,寄存器存储器单元常量变量、标号表达式,操作数,注释:用分号作为注释的开始 用于说明程序或语句的功能,以便于阅读和理解,二、常量和变量,常量:分为数字常量、字符串常量 字符串常量:用单引号引起的字符或字符串 例如:A,ABCD 汇编时被译成对应的ASCII码值 41H,42H,43H,44H 变量:代表内存中的数据区,程序中视为存储器操作数 段 值:变量所在段的段地址 变量的属性 偏移量:变量单元与段首之间的

39、位移量。类 型:字节型、字型和双字型,三、表达式,由 操作数 和 8086 汇编中的 运算符 和 操作符 构成 运算符、操作符有以下五种,1算术运算符:、/、MOD、SHL、SHR2逻辑运算符:AND、OR、XOR、NOT3关系运算符:EQ、LT、LE、NE、GT、GE4数值回送符:SEG、OFFSET、TYPE、LENGTH、SIZE5属性操作符:PTR、THIS、SHORT、等,四、伪指令,由汇编程序执行的“指令系统”。用于定义变量、分配存储区、定义逻辑段、指示程序开始 和结束等。,常用伪指令,数据定义伪指令符号定义伪指令段定义伪指令过程定义伪指令结束伪指令,请看下一节:程序设计,字符集,

40、8086/8088 宏汇编语言语句的单词是由下列字符构成的。1英文字母:a z,A Z;2数字:0 9;3算术运算符:,/;4分隔符:,:,;,(,),SP(空格),TAB(制表符);5控制符:CR(回车),LF(换行),FF(换页);6专用字符:$,&,(下划线),?,、,%;在汇编语言编写的源程序中,指令的助记符,各种操作符等 都是由上述字符组成。(返回),例:完整段定义的源程序结构(返回),;L30H.ASM 源程序名 STACK SEGMEMT;定义堆栈段,段名 STACK DW 512 DPU(?);定义512字节,为堆栈段的大小 STACK ENDS;定义堆栈段结束 DATA SE

41、GMEMT;定义数据段,段名 DATA MU DB 10,20,33H;定义三个数据,变量名MU DATA ENDS;定义数据段结束 CODE SEGMEMT;定义代码段,段名CODE ASSUME CS:CODE DS:DATA SS:STACK;段寻址:给定义的段说明属性,告知汇编程序每个段属于什么性质的逻辑段,以便将;段的基址送入相应的段寄存器。START:MOV AX,DATA;数据段的段基址送AX MOV DS,AX;数据段的段基址送DS MOV AH,4CH;功能号 4CH 送AH INT 21H;系统 4CH 功能调用,返回DOS系统 CODE ENDS;定义代码段结束 END START;程序结束,指明程序的起点从标号START起,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号