微机原理及接口技术第4章_第1页
微机原理及接口技术第4章_第2页
微机原理及接口技术第4章_第3页
微机原理及接口技术第4章_第4页
微机原理及接口技术第4章_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章教学重点第3章学习了8086硬指令,第4章介绍MASM基本的伪指令。第4章重点掌握:程序的格式、开发方法参数的表达、变量的定义变量和标号的属性硬指令和伪指令硬指令——使CPU产生动作、并在程序执行时才处理的语句,就是第3章学习的处理器指令伪指令(Directive)——不产生CPU动作、在程序执行前由汇编程序处理的说明性语句,例如,数据说明、变量定义等等伪指令与具体的处理器类型无关,但与汇编程序的版本有关4.1汇编语句格式本节从汇编语言程序的语句格式出发,给出第一个示范性的汇编语言源程序,并介绍汇编语言程序的过程:编辑汇编连接调试即汇编语言程序的开发方法语句格式⑴执行性语句——由硬指令构成的语句,它通常对应一条机器指令,出现在程序的代码段中:标号:硬指令助记符操作数,操作数 ;注释⑵说明性语句——由伪指令构成的语句,它通常指示汇编程序如何汇编源程序:名字伪指令助记符参数,参数,… ;注释第4章

汇编语言大小写不敏感

MOVCX,0 ;传送指令,具有2个操作数DELAY: NOP ;空操作指令,没有操作数,带有标号

LOOPDELAY ;循环指令,标号DELAY说明转移位置BUFFER DB1,2,3,4,5,6,7

;数据定义伪指令,在主存中开辟7个连续的字节单元,初值依次为1~7,BUFFER表示首地址汇编语言语句实例标号、名字与标识符标号是反映硬指令位置(逻辑地址)的标识符,后跟一个冒号分隔名字是反映伪指令位置(逻辑地址)和属性的标识符,后跟空格或制表符分隔,没有一个冒号标识符(Identifier)一般最多由31个字母、数字及规定的特殊符号(如_、$、?、@)组成,不能以数字开头。默认情况下,汇编程序不区别标识符中的字母大小写一个程序中,每个标识符的定义是唯一的,还不能是汇编语言采用的保留字第4章保留字保留字(ReservedWord)是汇编程序已经利用的标识符,主要有:硬指令助记符——例如:MOV、ADD伪指令助记符——例如:DB、EQU操作符——例如:OFFSET、PTR寄存器名——例如:AX、CS预定义符号——例如:@data第4章助记符硬指令助记符可以是任何一条处理器指令,也可以是一条宏指令伪指令助记符将在本章和下章学习前一章引入的定义字节数据和字符串的DB就是伪指令操作数与参数处理器指令的操作数可以是立即数、寄存器和存储单元伪指令的参数可以是常数、变量名、表达式等,可以有多个,参数之间用逗号分隔注释语句中由分号“;”开始的部分为注释内容,用以增加源程序的可读性必要时,一个语句行也可以由分号开始作为阶段性注释汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理分隔符语句的4个组成部分要用分隔符分开标号后用冒号,注释前用分号操作数之间和参数之间使用逗号分隔其他部分通常采用空格或制表符多个空格和制表符的作用与一个相同MASM支持续行符“\”汇编语言源程序的组成原则完整的汇编语言源程序由段组成一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内通常,程序还需要一个堆栈段汇编语言程序的开发过程编辑文本编辑器,如EDIT.COM源程序:文件名.asm汇编汇编程序,如MASM.EXE目标模块:文件名.obj连接连接程序,如LINK.EXE可执行文件:文件名.exe调试调试程序,如DEBUG.EXE应用程序错误错误错误错误4.2表达式

表达式由操作数和运算符组成,如3+2、77AND55、NOT5AH等。1.操作数操作数用于代表一个数据或一个地址,可以是常量和变量。2.运算符运算符包括算术、逻辑运算、关系、分析、综合五类运算符。①算术运算符

包括+、-、*、/、MOD

参加运算的内容可以是数据,也可以是地址,但必须有具体的物理含义。

②逻辑运算符

包括AND、OR、NOT、XOR

③关系运算符

包括相等:EQ

大于:GT

不等:NE

小于或等于:LE

小于:LT

大于或等于:GE关系运算结果只有两个——真、假。如果关系是真,则结果为0FFH(0FFFFH);如果关系是假,则结果为0。例如

MOVAX,5GT3;等价于MOVAX,FFFFH;

MOVBL,8+2*3LE5+29/6等价于MOVBL,00H④分析运算符分析运算在汇编语言程序设计中很重要。它包括取存储单元偏移地址:OFFSET

取存储单元段地址:

SEG

取类型:TYPE

取字节数:

SIZE

按类型取长度:LENGTH例1:设有数据段中使用

DATA1DB05,A2,00,10H,85H定义了一个单元,则

05A2001085DSCSDATA12000:1500

MOVAL,DATA1

可将DATA1中的数传送到AL中,

AL=05②

MOVAX,SEGDATA1可将DATA1的所在段地址传到AX中,

AX=2000

MOVAX,OFFSETDATA1可将DATA1的偏移地址传入AX中,

AX=1500例2:设有数据段中使用DATA1DW100DUP(?)

定义了100个字单元,则

MOVAX,TYPEDATA1AX=2

MOVAX,LENGTHDATA1AX=100MOVAX,SIZEDATA1AX=20005A2001085DSDATA1⑤综合运算符

综合运算符包括:SHORT(短),PTR(属性),段超越,THIS(当前位置),HIGH和LOW(字节分离)

PRT——改变存储器地址操作数的操作类型,但其段地址和偏移地址不变。如:

DATA1DW100DUP(?)MOVAL,DATA1MOVAL,BYTEPTRDATA1

√×DATA1SEGMENTWBUFFEREQUTHISWORDBUFFERDB12H,34H,00H,91HDATA1ENDSCODE1SEGMENTASSUMECS:CODE1,DS:DATA1START:MOVAX,DATA1MOVDS,AX

MOVAL,BUFFERMOVBX,WBUFFER……CODE1ENDSENDSTARTTHIS——用来建立新的存储器地址操作数,但不分配存储单元。新的操作数类型在THIS中指定,而其段地址和偏移量就是汇编时的当前值。1234009185DSBUFFERWBUFFERAL=12HBX=3412H4.3伪指令在8086/8088汇编语言中伪指令是用于诸如数据定义、存储区分配、编程框架等功能。所谓伪指令是非机器指令,它是在汇编期间进行操作的。(1)符号常量定义语句EQU

为了使程序便于阅读和修改,我们有时使用一个符号来代表一个值,而符号代表了一定的意义,在程序中使用一个符号代表一个值进行操作,其格式为:

符号EQU表达式例如:

PORTEQU3F8H在程序中可使用

MOVDX,PORT

对DX进行赋值,实际上PORT就是一个常量。还可在语句中进行运算,如:

DATA_PORTEQU3F8HSTAT_PORTEQU3F8H+2

SEEDEQU10FUNCEQUSEED*SEED+2*SEED+1

‘=’号操作

对符号的赋值还可使用“=”操作,它与EQU的区别是“=”操作可以重复定义,而EQU则不能重复定义。如:

X=3Y=6Y=Y*Y-X……MOVAX,Y

4.3.2变量定义(数据定义)变量名为用户自定义标识符,表示初值表首元素的逻辑地址;用这个符号表示地址,常称为符号地址变量名可以没有。这种情况,汇编程序将直接为初值表分配空间,无符号地址设置变量名是为了方便存取它指示的存储单元数据定义语句的格式为:

变量名操作符初值表变量定义伪指令助记符变量定义伪指令根据申请的主存空间单位分类DB——定义字节伪指令DW——定义字伪指令DD——定义双字伪指令DF——定义3字伪指令DQ——定义4字伪指令DT——定义10字节伪指令还有定位伪指令初值表初值表是用逗号分隔的参数主要由数值常数、表达式或?、DUP组成?——表示初值不确定,即未赋初值;DUP——表示重复初值DUP的格式为:重复次数DUP(重复参数)定义字节单元伪指令DBDB伪指令用于分配一个或多个字节单元,并可以将它们初始化为指定值初值表中每个数据一定是字节量(Byte),存放一个8位数据:可以是0~255的无符号数或是-128~+127带符号数也可以是字符串常数实例字节单元定义实例data segment ;数据段X db'a',-5 db2dup(100),?Y db'ABC'data ends应用moval,X;此处X表示它的第1个数据,故AL←'a'decX+1;对X为始的第2个数据减1,故成为-6movY,al;现在Y这个字符串成为'aBC'字节变量的应用定义字单元伪指令DWDW伪指令用于分配一个或多个字单元,并可以将它们初始化为指定值初值表中每个数据一定是字量(Word),一个字单元可用于存放任何16位数据:一个段地址一个偏移地址两个字符

0~65535之间的无符号数-32768~+32767之间的带符号数实例字单元定义实例data segment ;数据段count dw8000h,?,'AB'maxint equ64hnumber dwmaxintarray dwmaxintdup(0)data ends字变量和字常量的定义:WNUM EQU5678H ;定义WNUM为常量COUNT DW20H;定义COUNT变量,假设在数据段的偏移地址为10H字变量和字常量的应用:MOVAX,[BX+SI+WNUM] ;MOVAX,[BX+SI+5678H]MOVAX,COUNT ;MOVAX,[0010H]MOVAX,[SI+COUNT] ;MOVAX,COUNT[SI] ;MOVAX,[SI+10H]LEABX,COUNT ;LEABX,[0010H]MOVBX,OFFSETCOUNT ;MOVBX,0010H字变量和字常量定义双字单元伪指令DDDD伪指令用于分配一个或多个双字单元,并可以将它们初始化为指定值初值表中每个数据是一个32位的双字量(DoubleWord):可以是有符号或无符号的32位整数也可以用来表达16位段地址(高位字)和16位的偏移地址(低位字)的远指针vardd DD0,?,12345678hfarpoint DD00400078h

例:

DATA1DB?DATA2DW1000HDATA3DD3000A455HDATA4DW2DUP(0)DATA5DW0120H,0240H,0360H

DS随机001055A4003000000000200140026003DATA1DATA2DATA3DATA4DATA5DS544849532049532041204558414D504C45例:DATA6DB‘THISISAEXAMPLE’DATA6THIS

ISAEXAMPLE

注意:

数据定义语句定义的数据在存储器中占有相应的单元而EQU只是定义了一个数据,在汇编后以实际数据的形式体现在程序中。也就是说,EQU语句不会占有存储单元。单个字符可以用DB,DW,DD,DQ,DT定义,两个字符DB,DW,多个字符只能用DB定义4.3.3段定义和段对应在段定义中,SEGMENT和ENDS总是成对使用的,它们将数据和程序分为多个段,如数据段、栈段和代码段。

ASSUME是汇编时进行操作的,它用于在汇编时告诉汇编器,哪个是数据段,哪个是代码段,哪个是栈段。ASSUMEDS:DATA,CS:CODE,

SS:STACK,ES:EXTRA4.3.4定位伪指令定位伪指令控制数据的偏移地址ORG

参数ORG伪指令是将当前偏移地址指针指向参数表达的偏移地址:ORG100h ;从100h处安排数据或程序ORG$+10;使偏移地址加10,即跳过10个字节空间MASM中,符号“$”表示当前偏移地址值EVEN ;从偶地址开始ALIGNn ;从n的整数倍地址开始4.3.5过程定义和调用和其它程序设计一样,8086/8088汇编程序设计有过程或子程序的设计方法。8086/8066汇编程序的过程从运行位置上分为近过程(NEAR)和远过程(FAR),其定义如下:

PROC_NAME1PROCNEAR……RETPROC_NAME1ENDP

PROC_NAME2PROCFAR……RETPROC_NAME2ENDP过程的调用用call指令4.3.6程序开始和结束在程序的开始可以用NAME

或TITLE为程序取名字。格式为:NAME程序名

TITLE程序名

整个程序的结束使用END

标出,当汇编器读到END

时,它认为程序到此就结束了。在程序中,首条被执行的语句有一个标号,在程序的结尾使用END

后跟上这个标号,用以标出这个程序的开始执行处。

注:NAME、TITLE操作不是必须的。

END

则必不可少。4.3.7宏定义、宏调用、宏展开宏定义的格式:宏名MACRO[形参表]...ENDM宏调用格式:宏名[实参表](宏体)举例宏定义:宏调用

ABCMACROA,B,CABCAL,BL,CLMOVAL,A宏展开:ADDAL,BMOVAL,ALMOVC,ALADDAL,BLENDMMOVCL,AL

宏与子程序的比较相同点:均可一次定义,多

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论