汇编语言程序设计-宏汇编重复汇编

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AX, P
AX, P Q, AX ??0003 AX, Q AX, P R, AX ??0004 AX, R Q, AX ??0005 AX, Q
第七章 高级汇编语言技术
第七章 高级汇编语言技术
第七章 高级汇编语言技术
第七章 高级汇编语言技术
处理Hale Waihona Puke Baidu机
在汇编时由汇编程序实现宏扩 展。CPU执行的是经过宏扩展的 程序
适用场合
程序运行速度是主要考虑因素
目标代码所占空间是主要 考虑因素
第七章 高级汇编语言技术
宏汇编操作符: &
符号1 & 符号2
宏展开时,合并前后两个符号形成一个符号。 ;; 注释 ;; %
宏展开时,;;后面的注释不予展开。
% 表达式 汇编程序将%后面的表达式转换为数字,并在 展开期间用这个数取代哑元。
第七章 高级汇编语言技术 7.2.3 使用IRPC伪指令的重复汇编结构
格式:IRPC 形参,字符串 重复体 ENDM 功能:使汇编程序对重复体作重复汇编,每作一次 汇编就依次用字符串中的一个字符取代重复体中的 形参。(重复次数就等于字符串中字符的个数)
第七章 高级汇编语言技术
设有重复汇编结构如下: IRPC X, 0123456789 DB X ENDM 汇编程序在汇编时将对重复体 “DB X”重复汇 编10次,且分别用0,1,2,…9取代形参X。 其结果等价于 DB 0, 1, 2, …9
高级汇编语言技术
宏展开:
1 1 1 1 …… cmp jge neg ??0000: …… …… cmp jge neg ??0001: …… var,0 ??0000 var
next:
宏调用:
…… absol …… absol ……
var bx
1 1 1 1
bx,0 ??0001 bx
主程序: … CALL ---… CALL ---… CALL ---…
宏调用:
msg
…… msg
ary,1,wang
ary,2,zhang
宏展开:
1 ary1 db ‘HELLO MR.wang’ ……
1
ary2 db ‘HELLO MR.zhang’
第七章 高级汇编语言技术
例:定义宏指令STRG,实现存储字符串的功能 宏定义: STRG MACRO DB STRING
MACRO push push push push push push ENDM
ax bx cx dx si di
宏展开: 1 1 1 1 1 1 push push push push push push ax bx cx dx si di
宏调用: savereg
第七章 高级汇编语言技术
宏指令中参数的使用 宏指令中可以不带参数,但是带参数的宏指令更 加灵活 1、指令的参数可以使常数、寄存器和存储单元,还 可以是表达式 2、宏指令的参数可以是操作码
ENDM 若某个源程序需要定义200个字节,初值为0的堆栈段,则可以使用宏 调用 STK <200 DUP (0)>
其宏扩展为:
1 SSEG SEGMENT STACK 1 DB 200 DUP(0)
1SSEG ENDS
第七章 高级汇编语言技术
当需要在实参中使用“&”、“<”、“>”、“%”等符号,但不作宏运算 符时,就必须在其前使用“!”。
……
第七章 高级汇编语言技术
IF 表达式
;表达式≠0,则汇编
IFE
IF1 IF2
表达式
;表达式=0,则汇编
;在第一遍扫视期间满足条件 ;在第二遍扫视期间满足条件
IFDEF
IFNDEF IFB IFNB IFIDN
符号
符号 <自变量> <自变量>
;符号已定义,则汇编
;符号未定义,则汇编 ;自变量为空,则汇编 ;自变量不为空,则汇编
第七章 高级汇编语言技术
方法三:用宏指令和重复汇编实现 (1)定义宏指令P_BUF,将BUF+K压入堆栈(K为形参)。 (2)使用重复汇编,重复宏调用5次。
宏定义:
P_BUF MACRO K PUSH BUF+K ENDN
宏扩展:
PUSH PUSH PUSH PUSH PUSH BUF+0 BUF+2 BUF+4 BUF+6 BUF+8
宏调用: MAX 宏展开:
MAX MAX
1, P 2, P, Q 3, P, Q, R
1 MOV 1 ??0001:
1 MOV 1 ??0002: CMP 1 JLE 1 MOV 1 ??0003: 1 MOV 1 CMP 1 JLE 1 MOV 1 ??0004: CMP 1 JLE 1 MOV 1 ??0005:
第七章 高级汇编语言技术
7.2.2 使用IRP伪指令的重复汇编结构
格式:IRP 形参,<实参表> 重复体 ENDM 功能:使汇编程序对重复体作重复汇编,每作一次 汇编就依次将实参表中的一个实参取代重复体中的 形参。(重复次数就等于实参表中实参的个数)
第七章 高级汇编语言技术 设有重复汇编结构如下: IRP REG, <AX,BX,CX,DX> 其结果等价于: PUSH REG PUSH AX PUSH BX ENDM PUSH CX 汇编程序在汇编时将对重复体 PUSH DX PUSH REG 重复汇编4次,且分别用实参AX,BX,CX及 DX取代形参REG。
第七章 高级汇编语言技术 将BUF字数据区中的5个数据压入堆栈。 方法一:用5条PUSH指令实现 PUSH BUF+0 PUSH BUF+2 PUSH BUF+4 PUSH BUF+6 PUSH BUF+8
第七章 高级汇编语言技术 方法二:用循环程序实现 XOR BX, BX MOV CX, 5 NEXT:PUSH BUF[BX] INC BX INC BX LOOP NEXT
第七章 高级汇编语言技术
设有重复汇编结构如下: CHAR=41H REPT 10 DB CHAR CHAR=CHAR+1 ENDM
汇编程序在汇编时将对重复体重 复汇编10次,即汇编为 CHAR=41H DB CHAR; CHAR为41H CHAR=CHAR+1 DB CHAR; DB为42H CHAR=CHAR+1 …… 其结果等价于: DB 41H, 42H, 43H, 44H, 45H, 46H, 47H, 48H, 49H, 4AH
<字符串1>,<字符串2> ;串1与串2相同
IFDIF
<字符串1>,<字符串2> ;串1与串2不同
第七章 高级汇编语言技术
例:求最大值放入AX
宏定义:
MAX MACRO LOCAL MOV IF IF CMP JLE MOV ENDIF NEXT: CMP JLE MOV ENDIF OUT: ENDM K,A,B,C NEXT,OUT AX, A K-1 K-2 C, AX NEXT AX, C B, AX OUT AX, B
宏展开:
1 1 1 1 1 1 1 push push mov imul mov pop pop dx ax ax,cx var xyz[bx],ax ax dx
宏调用:
multiply cx,var,xyz[bx]
例:求绝对值第七章
宏定义:
absol MACRO oper LOCAL next cmp oper,0 jge next neg oper ENDM
程舒慧
2011.9.19
汇编语言
程舒慧
2011.12.13
第七章 高级汇编语言技术 7.1 宏汇编
宏:源程序中一段有独立功能的程序代码。
宏指令:用户自定义的指令。在编程时,将多次 使用的功能用一条宏指令来代替。
指令 汇编语言程序 伪指令(伪操作) 宏指令
第七章 高级汇编语言技术
宏定义:
macro_name MACRO [哑元表] ; 形参/虚参
子程序: … … … RET
目标程序: …
优:模块化
省内存
缺:开销大
宏定义: Q macro x,y
… endm
主程序: … Q a, b … Q c, d … Q e, f …
优: 参数传送 简单,执 行效率高 缺:

… … …
占用内存 空间大

第七章 高级汇编语言技术
宏 汇 编 子 程 序
有几次宏调用就有几次宏扩展, 子程序目标代码只出现一 目标代码所占 空间 故并不简化目标代码 次,故目标代码短 程序运行速度 无需转返,程序运行速度快 需要转返工作,程序运行 速度慢 在执行时,CPU通过转子 指令执行子程序中的指令
第七章 高级汇编语言技术
宏定义:
leap macro j&cond endm cond,lab lab
宏调用:
leap …… leap nz, here z, there
宏展开:
1 jz …… 1 jnz here there
第七章 高级汇编语言技术
宏定义: msg
macro lab,num,xyz lab&num db ‘HELLO MR.&xyz’ endm

宏调用 DISP !%(2*11-8) 产生的宏扩展为 +DB′ANSWER: ′, ′%(2*11-8)′, ′$′ 宏调用中的“%”前使用了宏运算符“!”,故 “%”被看作一个符号,而失去了宏运算符的功能。
第七章 高级汇编语言技术
宏嵌套
可以用已经定义的宏指令来定义另一个宏指令,也就是说,宏指 令可以嵌套定义。
宏体中的形参用宏调用提供的对应实参来取代。若 实参个数大于形参个数,则多余的实参被忽略;若 形参个数大于实参个数,则多余的形参作“空”处 理。
第七章 高级汇编语言技术
例:两个字相乘
宏定义:
multiply MACRO push push mov imul mov pop pop ENDM opr1,opr2,result dx ax ax,opr1 opr2 result,ax ax dx
[LOCAL 标号表] …… …… ; 宏定义体
ENDM
宏调用: (必须先定义后调用)
macro_name [实元表]
; 实参
宏展开:汇编程序把宏调用展开
宏定义体 复制到宏指令位置,实参代虚参 LOCAL中的标号 ??0000~??ffff
第七章 高级汇编语言技术
例:保存寄存器
宏定义: savereg
重复宏调用:
I=0 RPET 5 P_BUF %I I=I+2 ENDM
第七章 高级汇编语言技术
3. 条件汇编
根据条件把一段源程序包括在汇编语言程序内 或者排除在外。 一般格式: IF [ELSE] …… ENDIF
; 自变量不满足条件则汇编此块 自变量 ; 为条件 ; 自变量满足条件则汇编此块
SUM2 MACRO MOV ADD ENDM SUM3 MACRO SUM2 A, B ADD ENDM AX, C A, B, C AX, X AX, Y X, Y
第七章 高级汇编语言技术 7.2 重复汇编
对于指令或伪指令组的连续重复问题,使用重复汇编结构则 更为简便。 7.2.1 使用REPT伪指令的重复汇编结构 格式:REPT 整数表达式 重复体 ENDM 功能:使汇编程序对重复体作重复汇编,以整数表达式的值作 为重复次数。
‘&STRING&’
ENDM
宏调用: STRG 25-1
STRG
宏展开: 1
% 25 -1
DB ‘25-1’
1
DB
‘24’
第七章 高级汇编语言技术
当某一个实参中含有空格,逗号等分隔符时,必须用“<>”将其括起。
STK MACRO X SSEG SEGMENT STACK DB X
SSEG ENDS
相关文档
最新文档