条件汇编与宏指令.ppt

上传人:牧羊曲112 文档编号:6301154 上传时间:2023-10-15 格式:PPT 页数:30 大小:516.50KB
返回 下载 相关 举报
条件汇编与宏指令.ppt_第1页
第1页 / 共30页
条件汇编与宏指令.ppt_第2页
第2页 / 共30页
条件汇编与宏指令.ppt_第3页
第3页 / 共30页
条件汇编与宏指令.ppt_第4页
第4页 / 共30页
条件汇编与宏指令.ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《条件汇编与宏指令.ppt》由会员分享,可在线阅读,更多相关《条件汇编与宏指令.ppt(30页珍藏版)》请在三一办公上搜索。

1、建设优良学风 从我做起,知识回顾:,子程序的引出 过程定义伪指令 过程(子程序)调用、返回指令 保护现场、恢复现场 子程序说明文件 参数传送方法约定寄存器法约定存储单元法堆栈法传送参数指针 子程序设计,第九章 条件汇编与宏指令,理论:1学时实验:1学时,第九章 条件汇编与宏指令,9.1 条件汇编伪操作,9.2 宏伪操作,第九章 条件汇编与宏指令,条件汇编伪操作和宏伪操作也是为指令操作的一部分,具有条件宏伪操作功能的汇编程序成为宏伪汇编程序。条件汇编伪操作允许用户在编写的汇编语言程序中规定某种条件,汇编程序在汇编的过程中,对条件进行测试,如果测试条件成立,则将对应的条件块汇编为目标程序,否则,不

2、进行汇编。条件汇编伪操作格式:IFx condition:ELSE(可选):ENDIF说明:IFx是条件汇编伪操作。其中x可以是1,2,E,DEF,B,NB,IDN和DIF。condition是条件表达式。ELSE是选择项。ENDIF是条件汇编结束命令。,9.1 条件汇编伪操作,9.1 条件汇编伪操作,若干语句(称为条件块),若干语句(称为条件块),第九章 条件汇编与宏指令,9.1 条件汇编伪操作,条件汇编举例:ARG1EQU35HARG2=NOT ARG1IF(ARG1 OR ARG2)EQU 0FFFFHMOVAX,ARG1MOVBX,ARG2ADDAX,BXIF(ARG1 AND ARG

3、2)EQU 0FFFFHSUBAX,CXIFEARG1ADDAX,DXENDIFMOVSI,AXENDIFMOVDI,AXENDIF,第九章 条件汇编与宏指令,9.1 条件汇编伪操作,上述程序有3个条件汇编块,即设置了3个条件伪操作,只有第一个条件为真,所以只将它所包含的条件块汇编为目标代码。汇编结果:=0035ARG1EQU35H=FFCAARG2=NOT ARG1 IF(ARG1 OR ARG2)EQU 0FFFFH002D B8 0035 MOVAX,ARG10030 8B FFCA MOVBX,ARG20033 03 C3 ADDAX,BXENDIF0035 89 05MOVDI,AX

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

5、:宏体:ENDM其中,MNAME是宏指令(宏名字),MACRO是宏定义伪操作命令,ENDM是宏结束伪操作命令。MARCO和ENDM之间使用一组汇编语言语句,称为宏体。方括号中的是形参,可选项,不需要时可以省略,多个形参之间用逗号隔开,在宏展开时形参会被实参代替。,宏定义:MOVBLMACROSRC,DEST,LENMOVSI,OFFSET SRCMOVDI,OFFSET DESTMOVCX,LENCLDREPMOVSB ENDM,宏调用 MAIN1:BLMOV ADR1,ADR2,CNT1:BLMOV ADR3,ADR4,20:宏扩展MAIN1:BLMOVADR1,ADR2,CNT11 LEA

6、 SI,ADR11LEA DI,ADR21MOV CX,CNT11CLD1REPMOVSB BLMOVADR3,ADR4,201 LEA SI,ADR31LEA DI,ADR41MOV CX,201CLD1REPMOVSB,第九章 条件汇编与宏指令,9.2 宏伪操作,宏扩展标记,BLMOV宏体,BLMOV宏体,BLMOV宏的调用,参数类型自定义符号或者数值(如上例)寄存器 指令,寄存器例如,将一个寄存器逻辑左移n位。宏的定义:SHLRMACROREG,nMOVCL,nSHLREG,CLENDM宏的调用语句是:SHLRAX,5;用实参AX替代形参REG宏展开后的语句是:SHLRAX,5 0008

7、 B1 05 1MOVCL,5 000A D3 E0 1SHLAX,CL,指令参数可以是某条指令。如定义一个宏,将一个数据移动n位。宏的定义如下:SHIFT MACRO DEST,n,CMDMOV CL,nCMD DEST,NENDM宏调用如下:SHIFT AX,4,ROL;用ROL指令替代形参CMD宏展开之后:SHIFTAX,4,ROL 0005 B1 04 1 MOVCL,4 0007 C0 1ROLAX,4,宏中的标号处理 将标号定义为形参 在宏定义中声明标号为局部标号,将标号定义为形参 例:定义一个宏,求一个数的绝对值宏的定义ABSB MACRO LABEL,DEST CMP DEST

8、,0 JGE LABEL NEG DEST;DEST-0-DESTLABEL:NOP ENDM宏的调用ABSB OK1,DATA1 ABSB OK2,DATA2,宏的展开 ABSB OK1,DATA10005 80 3E 0000 R 00 1 CMP DATA1,0 000A 7D 04 1 JGE OK1 000C F6 1E 0000 R 1 NEG DATA1 0010 90 1OK1:NOPABSB OK2,DATA20011 80 3E 0001 R 00 1 CMP DATA2,0 0016 7D 04 1 JGE OK2 0018 F6 1E 0001 R 1 NEG DATA

9、2001C 90 1OK2:NOP,在宏定义中,使用局部标号伪指令LOCAL定义局部标号,格式为:LOCAL标号1,标号2 LOCAL只允许在宏定义中出现,而且是MACRO伪指令后的第一条语句。如果要声明多个标号,标号之间用逗号隔开。当宏展开时,汇编程序将为每一个局部标号顺序产生一个唯一的标号(从“?0000”“?FFFF”)。,要求使用定义局部标号的方法重新实现上例的操作。宏定义如下:ABSB MACRO DESTLOCALLABEL;定义局部标号CMPDEST,0 JGE LABELNEGDESTLABEL:NOP ENDM宏调用语句如下:ABSBDATA1ABSBDATA2,宏展开之后:

10、ABSB DATA1 0005 80 3E 0000 R 00 1CMPDATA1,0 000A 7D 04 1 JGE?0000 000C F6 1E 0000 R 1NEGDATA1 0010 90 1?0000:NOP ABSB DATA2 0011 80 3E 0001 R 00 1CMPDATA2,0 0016 7D 04 1 JGE?0001 0018 F6 1E 0001 R 1NEGDATA2 001C 90 1?0001:NOP观察运行结果,第一次宏展开时使用?0000代替了LABEL,第二次宏展开时使用?0001代替了LABEL。,宏汇编操作符&合并操作符%表达式操作符,&

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

12、1,100,B;字节数据移动MOVBL SRC2,DEST2,100,W;字数据移动,宏展开之后:MOVBLSRC1,DEST1,100,B 0005 BE 0001 R 1MOVSI,OFFSET DEST1 0008 BF 0000 R 1MOVDI,OFFSET SRC1 000B FC 1CLD 000C B9 0064 1MOVCX,100 000F F3/A4 1REPMOVSB MOVBLSRC2,DEST2,100,W 0011 BE 0003 R 1MOVSI,OFFSET DEST2 0014 BF 0002 R 1MOVDI,OFFSET SRC2 0017 FC 1CL

13、D 0018 B9 0064 1MOVCX,100 001B F3/A5 1REPMOVSW,%表达式操作符“%”的作用是告诉汇编程序将“%”后面的表达式的值作为实参,而不是将表达式本身作为实参。例如,定义一个宏,实现字符串的定义宏定义如下:DEFSTR MACRO STRINGDB&STRING&ENDM,%表达式操作符宏调用如下:DEFSTR34+2DEFSTR%34+2宏展开之后:DEFSTR34+2 0005 33 34 2B 32 1DB34+2 DEFSTR%34+2 0009 33 36 1DB36,宏与子程序的区别,实验15,编制程序在屏幕上显示字符串。已知字符串存放在数据段STR开始的单元,以回车符结束。要求:显示字符串用宏实现 程序结束返回系统用宏实现,本章教学要求,了解条件汇编的作用和用法;了解宏定义、宏调用和宏展开;了解宏参数的初步用法。,讨论、交流是弄清问题、深入学习的好方法。,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号