汇编与宏指令_第1页
汇编与宏指令_第2页
汇编与宏指令_第3页
汇编与宏指令_第4页
汇编与宏指令_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

建设优良学风——

从我做起知识回顾:

子程序的引出过程定义伪指令过程(子程序)调用、返回指令保护现场、恢复现场子程序说明文件参数传送方法约定寄存器法约定存储单元法堆栈法传送参数指针

子程序设计第九章条件汇编与宏指令理论:1学时实验:1学时第九章条件汇编与宏指令9.1条件汇编伪操作9.2宏伪操作第九章条件汇编与宏指令条件汇编伪操作和宏伪操作也是为指令操作的一部分,具有条件宏伪操作功能的汇编程序成为宏伪汇编程序。条件汇编伪操作允许用户在编写的汇编语言程序中规定某种条件,汇编程序在汇编的过程中,对条件进行测试,如果测试条件成立,则将对应的条件块汇编为目标程序,否则,不进行汇编。条件汇编伪操作格式:

IFx[condition] : : [ELSE](可选)

: : ENDIF说明:IFx是条件汇编伪操作。其中x可以是1,2,E,DEF,B,NB,IDN和DIF。

condition是条件表达式。

ELSE是选择项。

ENDIF是条件汇编结束命令。9.1条件汇编伪操作9.1条件汇编伪操作若干语句(称为条件块)若干语句(称为条件块)第九章条件汇编与宏指令9.1条件汇编伪操作条件汇编举例:ARG1 EQU 35HARG2 = NOTARG1 IF(ARG1ORARG2)EQU0FFFFH MOV AX,ARG1 MOV BX,ARG2 ADD AX,BX IF(ARG1ANDARG2)EQU0FFFFH SUB AX,CX IFE ARG1 ADD AX,DX ENDIF MOV [SI],AX ENDIF MOV [DI],AX ENDIF第九章条件汇编与宏指令9.1条件汇编伪操作上述程序有3个条件汇编块,即设置了3个条件伪操作,只有第一个条件为真,所以只将它所包含的条件块汇编为目标代码。汇编结果:=0035 ARG1 EQU 35H=FFCA ARG2 = NOTARG1 IF(ARG1ORARG2)EQU0FFFFH002DB80035

MOV AX,ARG100308BFFCA

MOV BX,ARG2003303C3

ADD AX,BX ENDIF00358905 MOV [DI],AX ENDIF条件成立第九章条件汇编与宏指令9.1条件汇编伪操作9.2宏伪操作9.2宏伪操作在程序设计中,对于多次重复使用的程序段,我们可以采用子程序的办法。今天我们再介绍一种办法,即采用宏指令的办法。这种方法是:用宏伪操作将多次重复使用的程序段定义为一个独立的程序段,并赋一个名字,称为宏名字,每当使用这种功能时,就在该处写上这个宏名字,称为宏调用。宏汇编程序对程序汇编时,遇到宏名字就用其所代表的程序段复制到该处,称为宏扩展。使用宏名字就如同使用指令一样,所以也称宏名字为宏指令。第九章条件汇编与宏指令9.2宏伪操作宏定义的一般格式如下:MNAME

MACRO

[形参1][,形参2]...... : :宏体 :

ENDM其中,MNAME是宏指令(宏名字),MACRO是宏定义伪操作命令,ENDM是宏结束伪操作命令。MARCO和ENDM之间使用一组汇编语言语句,称为宏体。方括号中的是形参,可选项,不需要时可以省略,多个形参之间用逗号隔开,在宏展开时形参会被实参代替。宏定义:

MOVBL MACRO SRC,DEST,LEN MOV SI,OFFSETSRC MOV DI,OFFSETDEST MOV CX,LEN CLD REP MOVSBENDM宏调用

MAIN1: :

BLMOVADR1,ADR2,CNT1

BLMOVADR3,ADR4,20

:宏扩展

MAIN1:…… BLMOV ADR1,ADR2,CNT1 1 LEA SI,ADR1 1 LEA DI,ADR2 1 MOV CX,CNT1 1 CLD 1 REP MOVSB …… BLMOV ADR3,ADR4,20 1 LEA SI,ADR3 1 LEA DI,ADR4 1 MOV CX,20 1 CLD 1 REP MOVSB ……

第九章条件汇编与宏指令9.2宏伪操作宏扩展标记BLMOV宏体BLMOV宏体BLMOV宏的调用参数类型自定义符号或者数值(如上例)寄存器指令寄存器例如,将一个寄存器逻辑左移n位。宏的定义:SHLR MACRO REG,n MOV CL,n SHL REG,CL ENDM宏的调用语句是:

SHLR AX,5 ;用实参AX替代形参REG宏展开后的语句是:

SHLR AX,5 0008B105 1 MOV CL,5

000AD3E0 1 SHL AX,CL

指令参数可以是某条指令。如定义一个宏,将一个数据移动n位。宏的定义如下:SHIFT MACRODEST,n,CMD MOV CL,n CMD DEST,N ENDM宏调用如下:

SHIFTAX,4,ROL;用ROL指令替代形参CMD

宏展开之后:

SHIFT AX,4,ROL 0005B104 1 MOV CL,4 0007C0 1 ROL AX,4

宏中的标号处理将标号定义为形参在宏定义中声明标号为局部标号将标号定义为形参

例:定义一个宏,求一个数的绝对值宏的定义ABSB MACRO LABEL,DEST CMP DEST,0 JGE LABEL NEG DEST;DEST<--0-DESTLABEL: NOP ENDM宏的调用 ABSB OK1,DATA1 ABSB OK2,DATA2宏的展开

ABSBOK1,DATA10005803E0000R001 CMPDATA1,0000A7D04 1 JGEOK1000CF61E0000R1 NEGDATA1001090 1 OK1:NOP

ABSBOK2,DATA20011803E0001R001 CMPDATA2,000167D041 JGEOK20018F61E0001R1 NEGDATA2001C901 OK2:NOP在宏定义中,使用局部标号伪指令LOCAL定义局部标号,格式为:

LOCAL 标号1[,标号2]……LOCAL只允许在宏定义中出现,而且是MACRO伪指令后的第一条语句。如果要声明多个标号,标号之间用逗号隔开。当宏展开时,汇编程序将为每一个局部标号顺序产生一个唯一的标号(从“??0000”~“??FFFF”)。要求使用定义局部标号的方法重新实现上例的操作。宏定义如下:ABSB MACRODEST LOCAL LABEL ;定义局部标号

CMP DEST,0 JGE LABEL NEG DESTLABEL: NOP ENDM宏调用语句如下:

ABSB DATA1 ABSB DATA2

宏展开之后:

ABSBDATA10005803E0000R00 1 CMP DATA1,0

000A7D04 1 JGE??0000

000CF61E0000R 1 NEG DATA1001090 1 ??0000:NOP

ABSBDATA20011803E0001R00 1 CMP DATA2,000167D04 1 JGE ??0001

0018F61E0001R 1 NEG DATA2

001C90 1 ??0001:NOP

观察运行结果,第一次宏展开时使用??0000代替了LABEL,第二次宏展开时使用??0001代替了LABEL。宏汇编操作符

&合并操作符%表达式操作符

&合并操作符在宏展开时,汇编程序将“&”左边的或者右边的形参用实参代替,然后将位于它两边的字符合并成一个符号。合并后的符号应该是一个合法的指令操作符、操作数或者字符串等。例如,将位于存储单元某处的一块数据移动到另一块空间中,而且数据既可以是字节数据,也可以是字数据。宏定义如下:MOVBL MACRODEST,SRC,LEN,TYPE MOV SI,OFFSETSRC;SRC是目的源起始地址

MOV DI,OFFSETDEST;DEST是目的起始地址

CLD MOV CX,LEN ;LEN是移动的长度

REP MOVS&TYP;TYPE是数据的类型(字或字节) ENDM宏调用如下:

MOVBLSRC1,DEST1,100,B;字节数据移动

MOVBLSRC2,DEST2,100,W;字数据移动

宏展开之后:

MOVBL SRC1,DEST1,100,B0005BE0001R 1 MOV SI,OFFSETDEST10008BF0000R 1 MOV DI,OFFSETSRC1000BFC 1 CLD000CB90064 1 MOV CX,100000FF3/A4 1 REP MOVSB

MOVBL SRC2,DEST2,100,W0011BE0003R 1 MOV SI,OFFSETDEST20014BF0002R 1 MOV DI,OFFSETSRC20017FC 1 CLD0018B90064 1 MOV CX,100001BF3/A5 1 REP MOVSW%表达式操作符“%”的作用是告诉汇编程序将“%”后面的表达式的值作为实参,而不是将表达式本身作为实参。例如,定义一个宏,实现字符串的定义宏定义如下:DEFSTR MACRO STRING DB '&STRING&' ENDM%表达式操作符宏调用如下:DEFSTR 34+2DEFSTR %34+2宏展开之后:

DEFSTR 34+2 000533342B321 DB '34+2' DE

温馨提示

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

评论

0/150

提交评论