第7章高级汇编语言技术

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

子程序: 子程序:
优点: 优点: 可以节省存储空间及程序设计时间; 可以节省存储空间及程序设计时间; 可以提供模块化程序设计条件, 可以提供模块化程序设计条件,便于调试及修改 程序. 程序. 缺点: 缺点: 为转子及返回, 为转子及返回,保存及恢复寄存器以及参量的传 递等要增加程序开销. 递等要增加程序开销.
变元可以是操作码: 变元可以是操作码:
宏调用 FOO MOV P2 ENDM 宏调用: 宏调用: FOO WORD_VAR,INC, WORD_VAR,INC,AX P1,P2, MACRO P1,P2,P3 AX, AX,P1 P3
两个字相乘,得到一个16 16位的第三个操作作为 例7.1 两个字相乘,得到一个16位的第三个操作作为 结果. 结果. 宏定义: 宏定义: OPR1,OPR2, MULTIPLY MACRO OPR1,OPR2,RESULT PUSH DX PUSH AX AX, MOV AX,OPR1 IMUL OPR2 RESULT, MOV RESULT,AX POP AX POP DX ENDM 宏调用: 宏调用: CX,VAR, MULTIPLY CX,VAR,XYZ[BX] …… MULTIPLY 240,BX,SAVE

;统一4条移位指令的宏指令 统一4
shift macro soprand,snum,sopcode push cx mov cl,snum s&sopcode soprand,cl pop cx endm
;宏指令 hl,ax,6 shift hl,ax,6 ;宏展开
1 1 1 1 push cx cl,06 mov cl,06 shl ax,cl pop cx

;宏定义 shlext macro shloprand,shlnum push cx mov cl,shlnum shl shloprand,cl pop cx endm ;宏指令 ax,6 shlext ax,6 ;宏展开 1 push cx cl,06 1 mov cl,06 1 shl ax,cl 1 pop cx
宏的参数使用非常灵活
宏定义可以无变元 例7.2
宏定义: 宏定义: SAVEREG MACRO PUSH PUSH PUSH PUSH PUSH PUSH PUSH ENDM
AX BX CX DX DI SI DI
宏调用: 宏调用: SAVEREG
例:如果在程序中有多处需将AL内容左移四位 如果在程序中有多处需将AL内容左移四位 AL MOV SAL 宏定义: 宏定义: SHIFT MACRO MOV SAL ENDM 宏调用: 宏调用: SHIFT CL, CL,4 AL, AL,CL CL, CL,4 AL, AL,CL
7.1.3与宏有关的伪指令 7.1.3与宏有关的伪指令
局部标号伪指令 LOCAL 标号列表 宏定义体采用了标号, 宏定义体采用了标号,应使用局部标号伪指令 LOCAL加以说明 它必须是宏定义MACRO 加以说明. MACRO语句之后的第一 LOCAL加以说明.它必须是宏定义MACRO语句之后的第一 条语句. 条语句. 宏定义删除伪指令 PURGE 宏名表 不需要某个宏定义时,可以把它删除. 不需要某个宏定义时,可以把它删除. 宏定义退出伪指令 EXITM 伪指令EXITM表示结束当前宏调用的展开. EXITM表示结束当前宏调用的展开 伪指令EXITM表示结束当前宏调用的展开.
SHIFT
6,DH
形式参数不仅可以在操作数部分,也可在操作码部分. 形式参数不仅可以在操作数部分,也可在操作码部分. 例:若每次移位的寄存器不同,且可左移或右 若每次移位的寄存器不同, 可再引入一个参数Z 称,可再引入一个参数Z. 宏定时: 宏定时: SHIFT MACRO MOV S&Z ENDM 宏调用: 宏调用: SHIFT SHIFT 4, 4,AL,AL 6,BX,AR CL, 宏展开 +MOV CL,4 AL, +SAL AL,CL CL, +MOV CL,6 BX, +SAR BX,CL X ,Y,Z CL, CL,X Y,CL
源自文库
mainend
经宏定义后的宏指令, 经宏定义后的宏指令,就可以在源程序中用名字 来调用它. 来调用它.
宏调用: 宏调用:
宏名字 [实参表] 实参表]
注意:宏调用中的 实参表 与宏定义中的<形参 实参表>与宏定义中的 注意:宏调用中的<实参表 与宏定义中的 形参 要一一对应, 数>要一一对应,若实参个数少于形参个数时,则对应 要一一对应 若实参个数少于形参个数时, 的形参被替换成空白,反之,则多余的实参不计. 的形参被替换成空白,反之,则多余的实参不计.
SHIFT
6
例:若每次移位的寄存器不同,可再引入一个参数Y. 若每次移位的寄存器不同,可再引入一个参数Y 宏定时: 宏定时: SHIFT MACRO MOV SAL ENDM 宏调用: 宏调用: SHIFT 4, 4,AL CL, 宏展开 +MOV CL,4 AL, +SAL AL,CL CL, +MOV CL,6 DH, +SAL DH,CL X ,Y CL, CL,X Y,CL
子程序: 子程序:
程序执行期间调用,只占用自身大小空间. 程序执行期间调用,只占用自身大小空间.
宏:
在汇编期间展开, 在汇编期间展开,每调用一次宏定义就展开一 战胜空间与调用次数相关. 次,战胜空间与调用次数相关.
宏操作符
替换操作符, &——替换操作符,用于将参数与其他字符分开.如 替换操作符 用于将参数与其他字符分开. 果参数紧接在其他字符之前或之后, 果参数紧接在其他字符之前或之后, 或者参数出现在带 引号的字符串中,就必须使用该伪操作符. 引号的字符串中,就必须使用该伪操作符. 字符串传递操作符, < >——字符串传递操作符,用于括起字符串.在宏 字符串传递操作符 用于括起字符串. 调用中,如果传递的字符串实参数含有逗号, 调用中 , 如果传递的字符串实参数含有逗号, 空格等间 隔符号,则必须用这对操作符,以保证字符串的完整. 隔符号,则必须用这对操作符,以保证字符串的完整. 表达式操作符, %——表达式操作符,用在宏调用中,表示将后跟的 表达式操作符 用在宏调用中, 一个表达式的值作为实参, 一个表达式的值作为实参, 而不是将表达式本身作为参 数 ;;——宏注释符,用于表示在宏定义中的注释.采 宏注释符, ;; 宏注释符 用于表示在宏定义中的注释. 用这个符号的注释,在宏展开时不出现. 用这个符号的注释,在宏展开时不出现.
宏指令: 宏指令:
实质上是以符号名字代替一个汇编语言程序段, 实质上是以符号名字代替一个汇编语言程序段, 这段程序往往要多次使用, 这段程序往往要多次使用,为避免多次书写这个程序 可用一条宏指令的符号名字来代替. 段,可用一条宏指令的符号名字来代替.至于这个多 次抄写的工作则由计算机自动完成-----称宏展开 次抄写的工作则由计算机自动完成---称宏展开
宏定义与宏调用 宏---源程序中一段有独立功能的程序代码.它只 ---源程序中一段有独立功能的程序代码. 源程序中一段有独立功能的程序代码 需一次定义,即可多次调用. 需一次定义,即可多次调用. 多个形参, 多个形参,由,分隔,个数 分隔, 不限,每行<132 <132个字符 不限,每行<132个字符
宏展开: 宏展开: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 PUSH PUSH MOV IMUL MOV POP POP …… PUSH PUSH MOV IMUL MOV POP POP DX AX AX, AX,CX VAR XYZ[BX], XYZ[BX],AX AX DX DX AX AX, AX,CX VAR XYZ[BX], XYZ[BX],AX AX DX
start: start:
mainbegin dispmsg string mainend 0 end start
;宏调用,建立DS内容 宏调用,建立DS内容 DS 宏调用, ;宏调用,显示字符串 宏调用,返回DOS ;宏调用,返回DOS
宏调用的实质是在汇编过程中进行宏展开. 宏调用的实质是在汇编过程中进行宏展开. 宏展开的具体过程是: 宏展开的具体过程是:当汇编程序扫描源程序遇到已 有定义的宏调用时, 有定义的宏调用时,即用相应的宏定义体取代源程序的宏 指令,同时用位置匹配的实参对形参进行取代. 指令,同时用位置匹配的实参对形参进行取代.
+ + +
7.1.2 宏定义中的参数 宏的参数
宏定义时, 宏定义时, 可以无参数 可以无参数 可以带有一个参数 可以带有一个参数 也可以具有多个参数 也可以具有多个参数 参数可以是常数,变量,存储单元,指令( 参数可以是常数,变量,存储单元,指令(操作 常数 或它们的一部分,也可以是表达式 码)或它们的一部分,也可以是表达式 宏定义体可以是任何合法的汇编语句, 宏定义体可以是任何合法的汇编语句,既可以是 指令序列,又可以是伪指令序列 伪指令序列; 指令序列,又可以是伪指令序列;
第7章 高级汇编语言技术
7.1 7.2 7.3 宏汇编 重复汇编 条件汇编
7.1 宏汇编
宏定义, 7.1.1 宏定义,宏调用和宏展开 宏:具有宏名的一段汇编语句序列, 具有宏名的一段汇编语句序列, ---宏定义时书写 ---宏定义时书写 宏指令:这段汇编语句序列的缩写, 宏指令:这段汇编语句序列的缩写, ---宏调用时书写 ---宏调用时书写 宏展开:在宏指令处用这段宏代替的过程, 宏展开:在宏指令处用这段宏代替的过程, ---宏汇编时实现 ---宏汇编时实现 宏的参数功能强大,颇具特色.配合宏, 宏的参数功能强大,颇具特色.配合宏,还有宏操 作符和有关伪指令. 作符和有关伪指令. 宏与子程序具有本质的区别. 宏与子程序具有本质的区别.
例:若每次移位次数不同,可引入一个参数X. 若每次移位次数不同,可引入一个参数X 宏定时: 宏定时: SHIFT MACRO MOV SAL ENDM 宏调用: 宏调用: SHIFT 4 CL, 宏展开 +MOV CL,4 AL, +SAL AL,CL CL, +MOV CL,6 AL, +SAL AL,CL X CL, CL,X AL, AL,CL

;宏定义 dstring macro string '&string&',0dh,0ah,'$ db '&string&',0dh,0ah,'$' endm ;宏调用 dstring < This is a example. > example. ;宏展开 example. , dh,0ah,'$ + db 'This is a example.', 0dh,0ah, $' This
宏展开
宏展开——在汇编时,用宏定义 在汇编时, 宏展开 在汇编时 体的代码序列替代宏指令的过程. 体的代码序列替代宏指令的过程.
start: ;宏指令 start: mainbegin + mov ax,@data ;宏展开 + mov ds,ax mainend 0 al,0 mov al,0 ah,4 mov ah,4ch 21h int 21h ;宏指令 ;宏展开
宏定义: 宏定义:
宏名字
MACRO [形参表]
…… 宏定义体
ENDM
其中MACROT ENDM是一对伪操作数 是一对伪操作数, 其中 MACROT ENDM 是一对伪操作数 , 宏体是一组有 独立功能的程序代码. 独立功能的程序代码.
mainbegin
;;定义一个名为mainbegin的宏 定义一个名为mainbegin的宏, MACRO ;;定义一个名为mainbegin的宏,无参数 ;;宏定义体 mov ax,@data ;;宏定义体 mov ds,ax ;;宏定义结束 ENDM ;;宏定义结束 ;;带有形参 带有形参retnum MACRO retnum ;;带有形参retnum ;;宏定义中使用参数 mov al,retnum ;;宏定义中使用参数 ah,4 mov ah,4ch 21h int 21h ENDM
相关文档
最新文档