ImageVerifierCode 换一换
格式:DOCX , 页数:49 ,大小:65.86KB ,
资源ID:3874600      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3874600.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微型计算机汇编语言及汇编程序.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微型计算机汇编语言及汇编程序.docx

1、微型计算机汇编语言及汇编程序第五章 微型计算机汇编语言及汇编程序汇编语言和机器语言相比,突出优点就是可以使用符号,即使用助记符表示指令的操作码和操作数,用标号和符号来代替地址、常量和变量。汇编语言编写的程序不能由机器直接执行,而必须翻译成由机器代码组成的目标程序,这个过程叫做汇编。用来把汇编语言编写的程序自动翻译成目的程序的软件叫做汇编程序。用汇编语言编写的程序叫做源程序。汇编语言大量被用于编写计算机系统程序、实时通信程序、实时控制程序等。第一节 宏汇编程序语言的基本语法一、伪指令语句格式伪指令语句中的伪指令本身不产生对应的机器目标代码。它仅仅是告诉汇编程序,对后面的指令语句和伪指令语句的操作

2、数应该如何产生机器目标代码。伪指令格式如下示:1、标号名字段这是任选字段。标号名可以是常量名、变量名、过程名、结构名、记录名等。标号名就表示一个常量或存储器地址。2、伪指令字段这是伪指令语句不可省略的主要部分。它们是伪指令语句要求汇编程序完成的具体操作命令。3、操作数字段本字段是否需要,需要几个,需要什么样的操作数等都由伪指令字段中伪指令来确定。操作数可以是一个常数、字符串、常量名、变量名、标号、一些专用的符号。4、注释字段这是一个任选字段,它必须以分号为开始,它的作用与指令语句的注释字段相同。二、常数、变量和标号1、常数常数分为数值型常数和字符型常数,分别为:(1)二进制数 (2)八进制数

3、(3)十进制数 (4)十六进制数 (5)实数:它由整数、小数和指数3部分组成。这是计算机中的浮点数表示法。(6)字符串常数:用引号括起来的一个或多个字符。这些字符以ASCII码形式存储在内存中。如“AB”,在内存中就是41H、42H。在程序中,常数主要出现在:(1)指令语句中源操作数中作立即数,它应与目的操作数的位数相一致,可以是8位或16位。如:MOV AX,0A5F1H(2)在指令语句的基址加变址的寻址方式中作位移量,如:MOV BX,SI+32H(3)在数据定义的伪指令中,如:DB 12HDW 1234HDD 12345678HDB ABCD2、变量变量是代表存放在某些存储单元的数据,这

4、些数据在程序运行期间随时可以修改。为了便于对变量的访问,它常常以变量名的形式出现在程序中,它可以认为是存放数据存储单元的符号地址。(1)变量的定义与预置定义变量就是给变量分配存储单元,且对这个存储单元赋于一个符号名变量名,同时将这些存储单元预置初值。VAR-DATA SEGMENT ;定义一个数据段DATA1 DB 12H ;定义DATA1=12HDATA2 DB 34H ;定义DATA2=34HDATA3 DW 5678H ;定义DATA3=5678HVAR-DATA ENDS经过定义的变量,每个变量均有3个属性。1)段属性(SEG):表示变量存放在哪一个逻辑中,例如,上面所定义的变量,它就

5、是在数据段中。当在指令中要对这些变量进行存取操作时,事先要把它们所在段的段基值存放在某一个段寄存器(如DS)中。2)偏移量属性(OFFSET):表示变量在逻辑段中离段起始点的字节数。例如,变量DATA1的偏移量为0,而DATA2的偏移量为1,DATA3偏移量为2。上述段和偏移量两个属性就构成了变量的逻辑地址。3)类型属性(TYPE):表示变量占用存储单元的字节数。这一属性是由数据定义伪指令DB、DW、DD来规定的。变量DATA1、DATA2是用DB定义的,它的类型属性为字节;而DATA3是用DW定义的,类型属性为字;如果用DD定义,类型属性为双字。(2)数据定义伪指令这种伪指令主要为数据项分配

6、存储单元并预置初值。它的格式为:其中表达式1、表达式2、是给变量赋予的初值。表达式可以有以下几种情况:1)数值表达式。DAT-BYTE DB 50H,50变量DA-BYTE的内容为50H,它的下一个字节为32H。2)?表达式:不带引号的?表示可预置任何内容。例:DA-B DB ?,?DA-W DW ?,?第一条语句是要求汇编程序分配两个字节单位,第2条语句是要求分配两个字单元。这些单元里现在可以是任意值。3)字符串表达式:对于DB伪指令,为字符串中每一个字符分配一个字节单元。字符串必须是用引号括起来且不超过255个字符。字符串自左至右以字符的ASCII码按地址递增的排列顺序依次存放。如:STR

7、ING1 DB ABCDEF,它们在存储器中存放的情况见下图:对于DW的伪指令,可以给两个字符组成的字符串分配两个字节存储单元,而且这两个字符ASCII码的存储顺序是前一字符在高字节,后一个字符在低字节,每一个数据项不能多于两个字符。如STRING2 DW AB,CD,EF,具体在存储器中存放的情况见上图。对于DD伪指令,仅可给两个字符组成的字符串分配4个字节单元,且这两个字符ASCII码是存储在两个低字节中,两个高字节均存放00H。STRING3 DD AB,CD,具体在存储器中存放的情况见上图。4)带DUP表达式:DUP是定义重复数据操作符。在表达式中,使用DUP操作符格式是:其中表达式1

8、是重复的次数,表达式2是重复的内容。如D-B1 DB 20H DUP(?)D-B2 DB 10H DUP(ABCD)D-W1 DW 10H DUP(4)第1语句表示保留20H个字节,每个字节可预置任意内容。第2语句是重复10H个字符串“ABCD”,共占有40H个字节。第3语句是重复10H个字单元,每个单元预置为4,共占有20H个字节。3、标号标号是一条指令目标代码的符号地址,它常作为转移指令的操作数。例如START: AA: 与变量相似,每个标号亦具有3个属性:(1)段属性(SEG)表示这条指令目标代码在哪个逻辑段中。(2)偏移量属性(OFFSET)表示这条指令目标代码的首字节在段内离段起始点

9、的字节数。同样,上述两个属性构成了这条指令目标代码首字节的逻辑地址。(3)距离属性:表示本标号可作为段内或段间的转移特性。距离属性分为两种:NEAR,本标号只能被标号所在段的转移和调用指令所访问;FAR,本标号可被其他段的转移和调用指令访问。三、表达式和运算符表达式由操作数和运算符组成,在汇编时一个表达式得到一个值。用一个运算符可以对一个操作数或几个操作数进行运算,这就构成一个表达式,从而得到一个新的值。86系列CPU包括六类运算符:算术运算符、逻辑运算符、关系运算符、分析运算符、组合运算符和分离运算符。1、算术运算符、()是加减乘除运算符。MOD是除法取余运算符。例如:32 MOD 5=2S

10、HL是左移操作符。例如:21H SHL 2=84HSHR 是右移操作符2、逻辑运算符AND 是逻辑“与”操作符,例如:24H AND 0FH=04HOR 是逻辑“或”操作符,例如:24H OR 0FH=2FHXOR 是逻辑“异或”操作符,例如:24H XOR 0FH=2BHNOT 是逻辑“非”操作符,例如:24H NOR 0FH=0DBH3、关系运算符关系运算符是逻辑判定式,当为“真”时结果取0FFFFH,当为“假”时结果取为0。关系运算是数值型的。EQ 等于。例如,已赋给符号PP为25,则25 EQ PP=0FFFFHNE 不等于。例如,25 NE PP=0LT 小于。例如,25 LT 26

11、=0FFFFHLE 小于等于。例如,25 LE 26=0FFFFHGT 大于。例如,26 GT 25=0FFFFHGE 大于等于,例如,24 GE PP=04、分析运算符(1)SEG 求段基址格式:SEG (2)OFFSET 求偏移地址格式:OFFSET (3)TYPE 求符号名类型值格式:TYPE 符号名类型值见下表:类型1字节2字节4字节8字节10字节近程远程类型值124810-1-2(4)SIZE 求为符号名分配的字节数格式:SIZE 为符号名定义的数据项必须是用重复格式DUP( )定义的。(5)LENGTH 求为符号名分配的项数格式:LENGTH 为符号名定义的数据项必须是用重复格式D

12、UP()定义的。SIZE =(LENGTH)*(TYPE)5、组合运算符组合运算符是用来改变或建立符号名的新类型。(1)定义符号名为新类型格式: PTR 例如:设内存变量D1是字节属性,把它的两个字节内容送到AX中。属性符号见上表。MOV AX,WORD PTR D1这里的符号名可以是间址、变址寻址、基址加变址寻址表示的存储器操作数。(2)指定新类型与PTR类似,可为某个符号名建立新类型。格式:THIS 例如:LABC EQU THIS BYTE LABD DW 4321H,2255H MOV AL,LABC ;AL=21H MOV AX,LABD ;AX=4321H符号名LABC与LABD有

13、相同的段地址和偏移地址,但LABC是字节类型,而LABD是字类型。6、分离运算符(1)LOW 取低字节格式:LOW (2)HIGH 取高字节格式:LOW 例如:SSY=2050HMOV AL,LOW 3080H ;AL=80HMOV AH,HIGH SSY ;AH=20HMOV CL,LOW 3A4BH ;CL=4BH7、汇编运算符的优先级优先级序号运算符0括号中的表达式1LENGTH、SIZE、WIDTH、MASK2PTR、OFFSET、SEG、TYPE、THIS、段前缀(段寄存器名)3HIGH、LOW4*、/、MOD、SHL、SHR5+、6EQ、NE、LT、LE、GT、GE7NOT8AND

14、9OR、XOR10SHORT第二节 伪指令伪指令没有对应的机器指令,它不是由86系列CPU来执行,而是由MASM-86识别,并完成相应的功能。它在很大程序上规定了MASM-86的性能,因此也可称之为汇编命令。MASM-86中使用的伪指令可分成14类,下面逐一进行介绍。1、符号定义伪指令(赋值语句)(1)名字 EQU表达式(2)名字 =表达式该语句把表达式的值赋给符号名,在同一程序中,用EQU语句赋值的符号名不能被重新赋值,但用“=”号赋值的符号名可以被重新赋值。“”号表示此项不能默认,但符号不需要输入。2、内存数据定义伪指令(1)字节定义伪指令名字 DB表达式或数据项表表达式值或项表中的每一项

15、是一个字节数,它们从符号名地址开始按字节连续存放,直到表中数据项结束(地址递增方向)。方括号 表示该项可以默认。(2)字定义伪指令名字 DW表达式或数据项表除表达式值或项表中的每一项是两个字节数之外,其它与DB伪指令相同。(3)4字节定义伪指令名字 DD表达式或数据项表表达式值或项表的每一项是4个字节数,该语句可以定义有小数点的十进制数或用科学表示法表示的数据,此时在汇编时被译成4字节浮点数,尾数在低地址一端,阶码在高地址一端。浮点格式在第一章中介绍。例如N1 DD 25ABH,0A002677HN2 DD 2.5,3.2E+2(4)8字节定义伪指令名字 DQ表达式或数据项表表达式值或数据项表

16、的每一项是8字节数,各项从小地址一端连续存放,允许浮点数形式,与DD伪指令相同。高4个字节填0。(5)10字节定义伪指令名字 DT表达式或数据项表表达式值或数据项表的每一项是10字节数,允许浮点数形式,与DQ伪指令相同;若项表中的数据项是十进制数书写的,汇编程序按组合的BCD码格式存放,最低字节在高地址一端存放,数据的最高字节的最高位是符号位,“0”表示正,“1”表示负。表达式或数据表多于一项时,项与项之间用逗号或空格分隔,表达式或数据项重复书写时,可用重复格式简写。例如D1 DB 12H,13H,12HD1 DB 3 DUP(12H)在指令中引用上述定义的符号时,必须考虑符号名的类型,否则会

17、出现错误提示。例如MOV AX,D1 ;D1类型错误MOV AX,WORD PTR D1 ;正确3、段定义伪指令存储器在逻辑上是分段的,各段的定义由伪指令实现。格式:段名 SEGMENT 定位方式连接方式类别名 段名 ENDS段定义伪指令为程序的汇编和连接说明了段名、分段的各种属性以及分段的开始和结束。段名是自定义符,开始的段名与结束的段名必须相同。段的长度不超过64KB。SEGMENT后面的参数是可选项。(1)定位方式(定位类型):定位方式指定段的起始地址边界,方式有4种。PAGE指定起始地址的低8位是0,即其值能被256整除(称为页边界)。PARA指定起始地址的低4位是0,即其值能被16整

18、除(称为段边界)。这是系统隐含定位方式。WORD指定起始地址的低位是0,即其值能被2整除(称为字边界)。BYTE指定起始地址是任意值。以上4种边界如下所示: 0 0 0 0 0 0 0 0 PAGE 0 0 0 0 PARA 00 WORD BYTE(2)连接方式(组合类型):连接方式告诉连接程序本段与其他段可按某种方式连接,它有6种选择。PUBLIC告诉连接程序把本段与其他同名同类别的段连接起来,公用一个段的起点地址,形成一个物理段。STACK表示本段是堆栈段,连接方式同PUBLIC,连接后的段起始地址在SS寄存器中。连接程序要求源程序至少要有一个堆栈段,否则提示错误,此时,系统取约定堆栈段

19、值。NONE(空缺)表示本段不与任何段连接,这是系统隐含连接方式。COMMON表示本段与同名同类别的段共用同一段起始地址,即同名同类段相重叠,段的长度是最长段的长度。MEMORY表示本段在连接时定位在所有段之上,即高地地址。AT表达式表示本段定位在表达式值指定的段地址处。(3)类型名:类型名是合法的自定义符,它必须用单引号括起来。凡是类别名相同的段在连接时均按先后顺序连接起来。4、段寄存器说明伪指令格式:ASSUME 段寄存器:段定义名1,段寄存器:段定义名2,该伪指令告诉汇编程序在汇编时,段寄存器CS:,DS:,SS:和ES:应具有的符号段基址,以便汇编指令时确定段和建立错误信息。但是段寄存

20、器实际值(CS除外)还要由传送指令在执行程序时赋值。5、过程(子程序)定义伪指令格式:过程名 PROC NEAR(FAR) 过程名 ENDP过程名是自定义符。定义过程是为实现子程序调用而设的。调用格式为:CALL 过程名过程由RET指令返回,它可以不是最后一条指令,它在过程中可以设多点返回。过程起始名和终止名必须相同。类型NEAR和FAR默认时系统约定是近过程,当选NEAR时,过程是段内调用,过程中的RET是段内返回。当选FAR时,过程是段间调用,过程中的RET是段间返回。6、模块开始伪指令格式:NAME 模块名该伪指令指明程序模块的开始,并指出模块名。模块名是自定义符,它不能是系统保留字,每

21、次汇编只能出现一次。若该伪指令默认,则取TITLE语句中的页标题前6个字符;若没有TITLE语句,则取源程序文件名为模块名。7、模块结束伪指令格式:EDN 启动标号或过程名该伪指令告诉汇编程序源文件结束,并给执行程序的入口位置。启动地址只有在主模块才有意义。8、定位伪指令格式:ORG 表达式该指令把以下语句定义的内存数据或程序,从表达式指定的起点(偏移地址)开始连续存放,直到遇到新的ORG指令。表达式的值是一个无符号数。9、列表伪指令(1)建立标题格式:TITLE 标题为列表文件每页第一行定义大标题(2)建立小标题格式:SUBTTL 小标题为列表文件每页定义小标题,输出在大标题之后(3)自动排

22、版(行数、列数)格式:PAGE 行数、行字数为列表文件定义每页行数(10255)和每行字符数(60132),默认值是66行,80列10、系统隐含进位制伪指令格式:RADIX 表达式定义在源程序中书写数据时的隐含进位制方式。表达式的值是216之间的十进制数,要遇到新的RADIX语句后才改变隐含进位制。例如,表达式取值是8时,书写默认后缀的数据是八进制而不是十进制。11、连接伪指令连接伪指令主要解决多模块的连接问题,对一个大程序来说,往往要分模块编程,分模块调试,最后再系统连接与调试。连接伪指令为多模块连接进行说明。(1)公用符号伪指令格式:PUBLIC 符号名1,符号名2,本模块用PUBLIC伪

23、指令说明的自定义符号名可由其他程序模块引用,没有说明的符号名不能被其他模块引用。符号名可以是变量名、标号、过程名或符号常量等。(2)引用符号伪指令格式:EXTRN 符号名1:类型,符号名2,类型在本模块引用的在其他模块定义的符号名必须用EXTRN进行说明,否则不能引用。此外还应注意,所引用的外模块定义的符号名还应是用PUBLIC伪指令说明过的。类型是指符号名的类型,它们可以是:内存变量型:BYTE,WORD,DWORD过 程 型:NEAR,FAR数 值 型:ABS(3)插入伪指令(或称包含伪指令)格式:INCLUDE 模块名在本模块汇编时,把另一模块插入该伪指令处一起汇编,被插入的模块可以是不

24、完整的。(4)合段伪指令(或称组合伪指令)格式:组合 GROUP 段名1,段名2,把其后指定的段组合在一个64KB的物理段中,组名和段名都是自定义符,但不可重名。12、记录伪指令(1)记录定义伪指令格式:记录名 RECORD 段名1:字段宽,段名2:字段宽,记录定义伪指令完成对内存单元二进制位的定义,这在实际应用中可以实现按位开关量或按位组合信息的处理。记录名和字段名是自定义符,字段宽度是116常数。记录是把116个二进制位分为段并赋于一个字段名。记录定义伪指令不真正为记录分配内存单元,它只是在汇编时进行记录名、字段名以及记录长度的说明。(2)记录存储单元分配及赋值格式:变量名 记录名胜古迹字

25、段值表变量名是自定义符,字段值表中的各字段值赋给记录的各字段中,其顺序与记录定义的顺序相同,若字段值表中的某些项默认,则默认值为0。应用时尖括号“ ”不能默认。例如TAN RECORD X:6,Y:4,Z:6AP TAN 5,10,BP TAN 12,20此例在存储器中分配两个记录,每个记录长是两个字节(16位)。(3)记录操作符1)WIDTH格式:WIDTH 记录名(或字段名)用该操作符可求出记录或字段所占的位数。例如MOV AX,WIDTH TAN ;16送AXMOV BH,WIDTH Y ;4送BH2)MASK格式:MASK 记录字段名用该操作符可返回记录字段位或使用情况,它是8位或16

26、位二进制数,1表示是该字段位,0表示不是该字段位。例如MOV AL,MASK Z ;00111111B送ALMOV BL,MASK Z ;11111100B送BL13、结构伪指令结构伪指令是把多个数据定义语句组织成一个结构,而把每一个数据定义语句称为一个结构字段,内存变量名称为字段名。(1)结构定义格式:结构名 STRUC 数据定义语句 结构名 ENDS结构定义不真正为结构分配存储空间,它是在汇编时进行结构说明的。(2)结构存储单元分配及赋值格式:变量名 结构名胜古迹字段值表变量名是自定义符,字段值表的各字段值赋给结构的各字段中,其顺序与结构定义的顺序相同,若字段值表中某些项默认,则保留初始值

27、。应用时尖括号“ ”不能默认。例如TAN1 STRUC D1 DB 2,25,10H D2 DB WTAN SYY DB ?TAN1 ENDSSUN TAN1 ,DOG1,2CAT TAN1 ,beg,在存储器中分配了两个结构单元。(3)结构引用格式:结构变量名.结构字段名例如MOV DH,SUN.SYY ;2送DHMOV AL,CAT.SYY ;0送AL14、块注释伪指令格式:COMMENT 定界符 注释 定界符定界符是自定义任何非空字符。例如,COMMENT /注释文/第三节 宏指令为了简化汇编程序的书写,把一些频繁出现的程序段定义为“宏指令”,当程序中遇到这个程序段时,只需用一条宏调用语

28、句,这样有效地缩短了源程序的长度,使源程序易读,也减少了由于重复书写而此起的错误。宏调用与过程调用的区别如下:(1)宏调用语句由宏汇编程序MASM-86中的宏处理程序来识别,并完成相应的处理;而调用过程的CALL语句由CPU来执行。(2)汇编语言源程序在汇编过程中要将宏指令所代替的程序段汇编成相应的机器代码,并插入到源程序的目标代码中,每次调用均要插入。而“过程”经汇编后的机器代码是与主程序分开而独立存在的,其目标代码在存储器中只需保留一份。(3)过程调用需要保留程序的断点和现场,待过程执行完毕还要恢复现场和断点,这些操作需要耗费CPU的时间,而宏调用则不需进行这些操作。(4)在每次宏调用时允

29、许修改有关参数,使得同一条宏指令在各次调用过程中可完成不同的操作;而“过程”一旦被定义,一般不允许修改。在使用高级语言时,各语句的定义是由相应的编译程序去处理的,但宏指令却不一样,它需要定义。宏指令的使用要经过如下3个步骤:(1)宏定义:对各个宏指令进行定义,并分别起一个名字。(2)宏调用:在需要使用的地方,通过宏指令名来调用它。(3)宏扩展:由宏汇编程序用宏定义中的指令来代替宏调用中的宏指令名。1、宏代换语句格式:宏名 MACRO形式参数1,形式参数2,。 宏体(指令序列) ENDM功能:宏代换语句为指令序列定义一个宏名,称为宏指令,宏名可以像指令一样在程序中引用。形式参数是任选项,可用来代换宏体中某些参数或符号。当代换指令中的称号时,在其前面需加一个宏代换符&。例如:AH MARCO Y,X MOV CL,X RO&Y CL ENDM经宏代换语句定义的宏名,在应用时可直接引用,称为宏调用。宏调用时,形式参数要用实在参数取代,顺序也应与形式参数顺序相同。例如AH R,5源程序在汇编后,在引用宏名的地方,插入了宏体,它在。LST文件列表时可以看到,其中有+号的指令便称为宏扩展。宏指令可以嵌套,并可与子程序联合嵌套

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1