版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 宏汇编 重复汇编 条件汇编第七章 高级汇编语言技术11. 宏汇编 宏:源程序中一段有独立功能的程序代码。宏指令:用户自定义的指令。在编程时,将多次 使用的功能用一条宏指令来代替。 汇编语言程序指令伪指令(伪操作)宏指令2优:模块化 省内存缺:开销大宏定义:Q macro x,y endm主程序:Q a, bQ c, dQ e, f目标程序:优:参数传送简单,执行效率高缺:占用内存空间大主程序:CALL CALL CALL 子程序: RET3宏展开:汇编程序把宏调用展开 宏定义体 复制到宏指令位置,实参代虚参 LOCAL中的标号 ?0000?ffff宏定义: macro_name MACRO
2、哑元表 ; 形参/虚参 LOCAL 标号表 ; 宏定义体 ENDM宏调用: (必须先定义后调用) macro_name 实元表 ; 实参4例:保存寄存器宏展开:1 push ax1 push bx1 push cx1 push dx1 push si1 push di宏定义:savereg MACRO push ax push bx push cx push dx push si push di ENDM宏调用:savereg5例:两个字相乘宏定义:multiply MACRO opr1,opr2,result push dx push ax mov ax,opr1 imul opr2 mov
3、 result,ax pop ax pop dx ENDM宏调用:multiply cx,var,xyzbx宏展开:1 push dx1 push ax1 mov ax,cx1 imul var1 mov xyzbx,ax1 pop ax1 pop dx6例:求绝对值宏定义:absol MACRO oper LOCAL next cmp oper,0 jge next neg opernext: ENDM宏调用:absol varabsol bx宏展开: 1 cmp var,01 jge ?00001 neg var1 ?0000: 1 cmp bx,01 jge ?00011 neg bx1
4、 ?0001: 7宏汇编操作符: & ; %符号1 & 符号2 宏展开时,合并前后两个符号形成一个符号。; 注释 宏展开时,;后面的注释不予展开。 % 表达式 汇编程序将%后面的表达式转换为数字,并在展开期间用这个数取代哑元。8leap macro cond,lab j&cond lab endm宏定义:宏调用:leap z, thereleap nz, here宏展开:1 jz there 1 jnz here9宏定义:msg macro lab,num,xyz lab&num db HELLO MR.&xyz endm宏调用:msg ary,1,wangmsg ary,2,zhang 宏展
5、开:1 ary1 db HELLO MR.wang 1 ary2 db HELLO MR.zhang 10例:定义宏指令STRG,实现存储字符串的功能宏定义: STRG MACRO STRING DB &STRING& ENDM宏调用: STRG 251 STRG % 25 1宏展开: 1 DB 251 1 DB 2411宏定义:msg macro count,string msg&count db string endmerrmsg macro text cntr = cntr+1 msg %cntr,text endm宏调用:cntr=0errmsg SYNTAX ERRORerrmsg
6、INVALID OPERAND 宏展开:1 cntr = cntr+11 msg %cntr,SYNTAX ERROR2 msg1 db SYNTAX ERROR 1 cntr = cntr+11 msg %cntr,INVALID OPERAND2 msg2 db INVALID OPERAND 12列表伪操作:.LALL :在LST清单中列出宏展开后的全部 语句(包括注释)。.SALL :在LST清单中不列出任何宏展开后的 语句。.XALL :缺省的列表方式,只列出宏体中产生 目标代码的语句。13starter macro csname, dsnameassume cs:csname, d
7、s:dsname, es:dsname push ds sub ax, ax push ax mov ax, dsname mov ds, ax mov es, ax endm宏调用:. xallstarter code, data1 push ds1 sub ax, ax1 push ax1 mov ax, data1 mov ds, ax1 mov es, ax14建立宏库:macro1 MACRO 哑元表 ENDM macro2 MACRO 哑元表 ENDM macroN MACRO 哑元表 ENDMEDIT EXP.ASMinclude MACRO.MACmacro1 实元表macro
8、2 实元表macroN 实元表purge macroNEDIT MACRO . MAC调用宏库:15重复伪操作 REPTREPT 表达式 ;重复块ENDM2. 重复汇编用于连续产生完全相同或基本相同的一组代码。不定重复伪操作 IRP/IRPCIRP 哑元, ;重复块ENDMIRPC 哑元,字符串 ;重复块ENDM16例:把字符A到Z的ASCII码填入数组TABLECHAR = ATABLE LABEL BYTE REPT 26 DB CHARCHAR = CHAR+1 ENDM1 DB 41H1 DB 42H1 DB 43H 1 DB 5AH汇编后:17例:产生一组指令,将字数组TAB的内容入
9、栈保存; 宏定义PUSH_TAB MACRO K PUSH TAB+k ENDM; 宏调用I=0 REPT 5 PUSH_TAB %II=I+2 ENDM; 宏展开2 PUSH TAB+02 PUSH TAB+22 PUSH TAB+42 PUSH TAB+62 PUSH TAB+818例:建立ARRAY数组.lallARRAY LABEL WORD REPT 7 DW $+2 ENDM DW ARRAYARRAY LABEL WORD1 DW $+21 DW $+21 DW $+21 DW $+21 DW $+21 DW $+21 DW $+2 DW ARRAY汇编后:19IRP REG,
10、PUSH REGENDM1 PUSH AX1 PUSH BX1 PUSH CX1 PUSH DX汇编后:例:生成一组入栈指令汇编后:array label byteIRPC K, 12345db NO.&KENDM1 db NO.11 db NO.21 db NO.31 db NO.41 db NO.5例:生成存储字符串的汇编语句203. 条件汇编 根据条件把一段源程序包括在汇编语言程序内或者排除在外。IF 自变量 ; 为条件 ; 自变量满足条件则汇编此块ELSE ; 自变量不满足条件则汇编此块ENDIF一般格式:21IF 表达式 ;表达式0,则汇编IFE 表达式 ;表达式0,则汇编IF1 ;
11、在第一遍扫视期间满足条件IF2 ;在第二遍扫视期间满足条件IFDEF 符号 ;符号已定义,则汇编IFNDEF 符号 ;符号未定义,则汇编IFB ;自变量为空,则汇编IFNB ;自变量不为空,则汇编IFIDN , ;串1与串2相同IFDIF , ;串1与串2不同22例:求最大值放入AX宏定义:MAX MACRO K,A,B,C LOCAL NEXT,OUT MOV AX, A IF K-1 IF K-2 CMP C, AX JLE NEXT MOV AX, C ENDIFNEXT: CMP B, AX JLE OUT MOV AX, B ENDIFOUT: ENDM1 MOV AX, P1 ?0
12、002: CMP Q, AX1 JLE ?00031 MOV AX, Q1 ?0003:宏展开:1 MOV AX, P1 ?0001: 1 MOV AX, P1 CMP R, AX1 JLE ?00041 MOV AX, R1 ?0004: CMP Q, AX1 JLE ?00051 MOV AX, Q1 ?0005:宏调用:MAX 1, PMAX 2, P, QMAX 3, P, Q, R23; 宏展开1 SAL AX, 12 SAL AX, 13 SAL AX, 1例:宏定义的递归调用: POWER实现 ( X * 2N ); 宏定义POWER MACRO X, N SAL X, 1CNT
13、=CNT+1 IF CNT-N POWER X, N ENDIF ENDM; 宏调用CNT=0 POWER AX, 324 mov ax, dividend mov bx, divisor sub cx, cxcomp: cmp ax, bx jb out sub ax, bx inc cx jmp compout: mov quotient, cx endmdivide macro dividend,divisor,quotient local comp, out cnt=0 ifndef dividend cnt=1 endif ifndef divisor cnt=1 endif ifndef quotient cnt=1 endif if cnt e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辽宁鞍山市海城市协作体2026-2027学年九年级上学期阶段学情自测英语试题(含答案)
- 安徽省六安市霍邱县正华外语学校2025-2026学年高一上学期第一次月考物理试卷(含答案)
- 山东济南市槐荫区2025-2026学年八年级下学期6月期末道德与法治试题(含答案)
- 2025-2026年人体生理功能测试题库
- 初中七年级道德与法治“科学认识甲流构筑校园健康防线”主题班会教学设计
- 初中九年级数学动点函数图像问题专题复习教学设计
- 小学五年级道德与法治教学设计:中华民族一家亲 同心共筑中国梦
- 初中九年级数学最值问题四大压轴题型专题复习教学设计
- 高中劳动技术《雪冬寻味·软糯粉蒸南瓜》教学设计
- 小学三年级美术《花边纹样》教学设计
- JTG F40-2004 公路沥青路面施工技术规范
- 整车试验策划方案
- 爱是地狱冥犬
- 预制箱梁施工方案(30m)
- 出院小结模板-2
- 运用PDCA循环提高下肢深静脉血栓护理预防措施落实率课件
- 糖化血红蛋白检查
- 2023年广东广州南沙区万顷沙镇招聘编外人员23人笔试模拟试题及答案解析
- 语音信号处理基础课件
- GB/T 9800-1988电镀锌和电镀镉层的铬酸盐转化膜
- GB/T 4604-2006滚动轴承径向游隙
评论
0/150
提交评论