版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
名周
朱世
K
摩A
钻舟a
加a案
明塔亟掩
掩需博
富M
埔低招
M
S
X,嚣
X
国嫣M欧
X双世
板假假世脩
黑莱卓粱
热陋竹
高级汇编语言技术
A宏指令
A宏指令的使用过程
A宏操作符
A局部符号伪指令LOCAL
A宏库的使用
A重复汇编
>条件汇编
由宏指令
为了减少编程的工作量,通游采用两种方法:
①将程序段编写为独立的子程序
②将程序段定义成宏
将具有一定功能,需多次重复使用,且比较短
的程序段定义成一条宏指令。
使用宏指令语句可以减少程序书写错误,缩短
源程序长度,使源程序编写像高级语言一样清
晰、简洁。使用宏库后,可以提高编程效率。
宏指令的使用过程
A宏定义
A宏调用
A宏扩展
宏定义
>带参宏定义
宏指令名MACRO形参1,形参2,...
宏体
ENDM
>无参宏定义
宏指令MACRO
宏体
ENDM
宏定义
SUMMACRONUM],NUM2,RESULT
PUSHAX
MOVAX,NUM1
ADDAX,NUM2
MOVRESULT,AX
POPAX
ENDM
说明
M宏指令名是该宏定义的名称。调用时使用宏
指令名对该宏定义进行调用。
宏指令符合标识符规定。宏指令名不能重复,
但可以和源程序中的其他变量、标号、指令、
伪指令名相同,在这种情况下宏指令的优先级
最高。
MACRO必须与ENDM成对出现。MACRO标识宏
定义的开始。
形参是可选项,宏可以不带参数;带参数时,
多个形参间用逗号分隔。形参的规定与对标识
符的规定是一致的。
宏调用
宏指令名[实参1,实参2,.......]
华宏指令与子程序的区别
子程序调用由微处理器完成
宏指令调用在汇编过程中由汇编程序完成
子程序调用可以减小目标程序的大小
A宏指令调用不能
宏扩展
DisplaymacroBUF
LEADX,BUF
+LEADX,BUF1
MOVAH,9
+MOVAH,9
INT21H
+INT21H
Displayendm
I
I
I
+LEADX,BUF2
DisplayBUF1
I+MOVAH,9
I
I
+INT21H
DisplayBUF2
将两个用压缩的BCD码表示的4位十进制数
相加,结果存入RESULT单元中。
;对两数相加功能进行宏定义Macro,asm
BCDADDMACROVARX,VARY,RESULT
MOVAL,VARX
ADDAL,VARY
DAA;俅位相加、调整
MOVRESULT,AL
MOVAL,VARX+1
ADCAL,VARY+1
DAA;高位相加、调整
MOVRESULT+1,AL
ENDM
DATASEGMENT
AlDB30H,11H
A2DB79H,47H
A3DB2DUP(?)
BlDB32H,23H
B2DB71H,62H
B3DB2DUP(?)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:
MOVAX,
MOVDS,
BCDADDA1,A2,A3
BCDADDB1,B2,B3
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
+MOVAL,Al
+ADDAL,A2
+DAA;低位本目力口、调整
+MOVA3,AL
+MOVAL,Al+1
+ADCAL,A2+1
+DAA;高位相力口、调整
+MOVA3+1,AL
+;对两数相加功能进行宏定义
+MOVAL,Bl
+ADDAL,B2
+DAA;低位相加、调整
+MOVB3,AL
+MOVAL,Bl+1
+ADCAL,B2+1
+DAA;高位相加、调整
+MOVB3+1,AL
形参和实参
■F定义中可以不带任何形参,宏调用时不需提
供实参,宏展开后宏体中的所有指令不作修改
原样插入到宏调用的宏指令处。
■形参可以是操作码或操作数的一部分,但在宏
定义体中必须使用分隔符&,&在宏定义中可作
为形参的前缀,展开时把&前后的两个符号连
接起来,形成操作码、操作数或字符串。
将寄存器内容移位的操作定义为宏指令,并
宏调用。设一个参数时,移位次数为参数CN:
SHIFTMACROCN
MOVCL,CN
SHLAX,CL
ENDM
宏调用时提供相应的实参数值:
SHIFT4
设两个参数时,参数为寄存器和移位次数:
SHIFTMACROCN,R
MOVCL,CN
SHLR,CL
ENDM
宏调用提供移位次数和寄存器:
SHIFT4,al
宏定义:
SHIFTMARCOX,Y,Z
MOVCL,X
S&ZY,CL
ENDM
上例被调用时:SHIFT4,AL,CL
SHIFT6,BX,AR
则宏展开时的目标代码:+MOVCL,4
+SALAL,CL
+MOVCL,6
+SARBX,CL
在程序设计中,对堆栈段的定义语句基本相同,只是
堆栈段的长度和初值不同。所以可以先定义一个宏
(放在宏库中),供随时不用,为编程带来很大方
便。宏定义如下:
MSTACKMACROXYZ
STACKSEGMENTSTACK
DBXYZ
STACKENDS
ENDM
宏调用时:MSTACK<100DUP(?)>
宏展开为:+STACKSEGMENTSTACK
+DB100DUP(?)
+STACKENDS
伪指令PURGE
■宏指令名可以和源程序中的其他变量名、
标号、指令助记符、伪操作名相同,此时宏指
令的优先级别最高,使其他同名的指令或伪操
作无效。
PURGE,用来在适当的时候取消宏定义。
PURGE伪指令的一般格式是:
PURGE宏定义名[,…]
方括号表示PURGE可以取消多个宏定义,宏名之
间用逗号隔开。
伪指令PURGE
SUBMACROVARX,VARY,RESULT
I
I
I
ENDM
宏调用:SUBX,Y,Z
PURGESUB
“PURGESUB”语句后的SUB恢复减法功能。
伪指令LOCAL
使用了标号的宏定义,若多次调用,势必产生标号
的多重定义。解决这一问题可使用伪指令LOCAL,
其一般格式为:
LOCAL局部标号1,局部标号2,...
宏汇编程序将为标号分别生成格式为“??
XXXX”的唯一的符号以代替各局部标号。XXXX代表
四位十六进制数0000~FFFF。这样,在汇编源程序
中,避免了多次宏调用时生成的标号重复。
・注意:LOCAL伪操作只能用在宏定义体内,而且必
须是MACRO伪操作后的第一个语句,在MACRO与
LOCAL不能出现注释和分号标志。
知吝取绝对值的宏指令如下
(macro2.asm):
宏展开后的指令为:
ABSMACROOPS+CMPCX,0
LOCALPLUS+JGE??0000
CMPOPS,0+NEGCX
JGEPLUS+??0000:MOVAX,CX
NEGOPS
PLUS:MOVAX,OPS
ENDMMOVBX,AX
宏调用:+CMPDX,0
ABSCX+JGE??0001
MOVBX,AX+NEGDX
ABSDX+??0001:MOVAX,DX
重复汇编
数值重复语句格式REPT
参数值重复语句格式IRP
字符重复语句格式IRPC
"数值重复语句格式REPT
ill______________________
矍一般格式为:
REPT表达式
;(重复块)
ENDM
其中,REPT和ENDM必须成对出现,两者间的重
复块是要重复汇编的部分。表达式的值用来表
示重复块的重复汇编次数。这种伪操作不一定
要用在宏定义体内。
有下列语句:macrol.asm
NUM=0
REPT10
NUM=NUM+1
DBNUM
ENDM
汇编后,将数据1,2,3,…,10分配给
十个连续的字节单元:
+DB1
+DB2
+DB3
I
I
I
+DB10
、:参数值重复语句格式IRP
其一般格式为:
IRP形参,〈参数1,参数2,...>
:(重复块)
ENDM
此伪指令重复执行重复块中所包含的语句,
重复的次数由参数表中的参数个数决定。重复
汇编时,依次用参数表中的参数取代形参,直
到表中的参数用完为止。参数表中的参数必须
用两个三角号括起来,参数可以是常数、符号、
字符串等,各参数间用逗号隔开。
多次将AX、BX、CX、DX寄存器内容压栈,宏
定义如下:macrol2.asm
PUSHRMACRO
IRPREG,<AX,BX,CX,DX>
PUSHREG
ENDM
ENDM
汇编后:
+PUSHAX
+PUSHBX
+PUSHCX
+PUSHDX
字符重复语句格式IRPC
TKPC形参,字符串(或〈字符串〉)
;(重复块)
ENDM
此伪指令重复执行重复块中的语句,重
复汇编的次数等于字符串中字符的个数。每
次重复执行时,依次用字符串中的一个字符
取代形参,直到字符串结束。可见IRPC伪指
令与IRP伪指令类似,只是IRPC用字符串(其
三角括号可以有也可以无)代替了IRP伪指令
中的参数表。
PUSHRMACRO
IRPCREG,ABCD
PUSHREG&X
ENDM
ENDM
同样,汇编后也可得到:
+PUSHAX
+PUSHBX
+PUSHCX
+PUSHDX
宏库的使用
语句格式:INCLUDE库文件名
假设已建立一名为MACRO.LIB的宏库,其内容如下
INPUTMACROA
LEADX,A
MOVAH,10;10号系统功能调用
INT21H
ENDM
PRINTMACROA
LEADX,A
MOVAH,9;9号系统功能调用
INT21H
ENDM
RETURNMACRO
MOVAH,2
MOVDL,OAH
INT21H
MOVDL,ODH;回车换行
INT21H
ENDM
0UT2MACROA
MOVDL,A
MOVAH,2;2号系统功能调用
INT21H
ENDM
STACKOMACROA
STACKSEGMENTSTACK
DBA
STACKENDS
ENDM
现要从键盘输入一串字符到系统
缓冲区,然后将字符按相反顺序
打印,采用调用宏库的办法,其
程序如下:macro21
INCLUDEMACRO.LIB
STACKO<200DUP(0)〉;定义堆栈段
DATASEGMENT
INF01DB6INPUTSTRING:$'
INF02DB6OUTPUTSTRING:$'
BUFADB81
DB9•
DB80DUP(0)
BUFBDB81DUP(0)
DATAENDS
CODESEGMENT
ASSUMEDS:DATA,SS:STACK,CS:
CODE
START:MOVAX,DATA
MOVDS,AX
RETURN;输出回车换行
PRINTINFO1;输出INFO1代表的字符串
INPUTBUFA;键盘输入字符中到缓冲区;
LEASI,BUFA+1
MOVCH,0
MOVCL,[SI]
ADDSI,CX
LEADI,BUFB
NEXT:MOVAL,[SI]
MOV[DI],AL
DECSI
INCDI
LOOPNEXT
MOVBYTEPTR[DI],
RETURN;输出回车换行
PRINTINF02;输出的字符串变量INF02代表
PRINTBUFB;反向输出输入字符串
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
条件汇编
条件汇编指在汇编期间,宏汇编程序根据条
件是否成立决定具体汇编哪一程序段。条件
汇编用条件汇编伪指令来定义。
语句格式:
IFxx表达式
条件块]
[ELSE
条件块2]
ENDIF
伪指令"汇编条件,
IF表达式。表达拼0,则条件为其a
IFE表达却表达式4则条件为露
是第一次扫翻臭
联二次扫描为比
IFDE.F符号*符号已定义或被说明为外部符号,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中学生化学室工作制度
- 高标准农田项目工作制度
- 东北财经大学·2022教学设计-2025-2026学年中职中职专业课财政税务类73 财经商贸大类
- 文化交流项目筹备进展汇报5篇
- 商业智能系统开发与应用指南
- 智能制造设备调试与维护手册
- 服务优化质量承诺书(9篇)
- 公布意外事情紧急处置承诺书6篇
- 项目运营保障责任承诺书范文3篇
- 企业标准化采购流程与操作指南
- 探究风的成因实验改进策略 论文
- 小记者基础知识培训课件
- 现场施工图纸确认单
- 第9课 共同弘扬中华传统美德 《中华民族大团结》(初中 精讲课件)
- 人文地理学-米文宝-第二章文化与人文地理学
- 工业分析试卷及答案共10套
- 贝叶斯公式课件
- 污水处理设备点检表
- 【110kV地区变电所母线保护设计8000字(论文)】
- 刑法案例分析课件
- 城市景观设计
评论
0/150
提交评论