第7章 高级汇编语言技术

更新时间:2023-05-13 23:48:02 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

汇编教案ppt,武汉理工大学

第七章

高级汇编语言技术

宏汇编

重复汇编 条件汇编

汇编教案ppt,武汉理工大学

1. 宏汇编宏:源程序中一段有独立功能的程序代码。宏指令:用户自定义的指令。在编程时,将多次 使用的功能用一条宏指令来代替。

指令汇编语言程序 伪指令(伪操作) 宏指令2

汇编教案ppt,武汉理工大学

主程序: … CALL ---… CALL ---… CALL ---…

子程序: … … … RET 目标程序: …

优:模块化 省内存 缺:开销大

宏定义: Q macro x,y

… endm

主程序: … Q a, b … Q c, d … Q e, f …

优: 参数传送 简单,执 行效率高 缺:

……… …

占用内存 空间大3

汇编教案ppt,武汉理工大学

宏定义:macro_name MACRO [哑元表] ; 形参/虚参[LOCAL 标号表] …… …… ; 宏定义体

ENDM

宏调用: (必须先定义后调用)macro_name [实元表]; 实参

宏展开:汇编程序把宏调用展开宏定义体 复制到宏指令位置,实参代虚参 LOCAL中的标号 ??0000~??ffff4

汇编教案ppt,武汉理工大学

例:保存寄存器宏定义: savereg

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

汇编教案ppt,武汉理工大学

例:两个字相乘宏定义:multiply MACRO push push mov imul mov pop pop ENDM opr1,opr2,result dx ax ax,opr1 opr2 result,ax ax 宏展开: dx 1 1 1 1 1 1 1 push push mov imul mov pop pop dx ax ax,cx var xyz[bx],ax ax dx6

宏调用:multiply cx,var,xyz[bx]

汇编教案ppt,武汉理工大学

例:求绝对值宏定义:absol MACRO oper LOCAL next cmp oper,0 jge next neg oper ENDM

宏展开:1 1 1 1 …… cmp jge neg ??0000: …… …… cmp jge neg ??0001: …… var,0 ??0000 var

next: 1 1 1 1 bx,0 ??0001 bx

宏调用:…… absol …… absol …… var

bx7

汇编教案ppt,武汉理工大学

宏汇编操作符: &符号1 & 符号2

;;

%

宏展开时,合并前后两个符号形成一个符号。

;; 注释宏展开时,;;后面的注释不予展开。

% 表达式 汇编程序将%后面的表达式转换为数字,并在 展开期间用这个数取代哑元。8

汇编教案ppt,武汉理工大学

宏定义:leap macro cond,lab

j&condendm

lab

宏调用:leap z, there

宏展开:1 jz there

……leap nz, here 1

……jnz here

汇编教案ppt,武汉理工大学

宏定义: msg

macro

lab,num,xyz

lab&num db ‘HELLO MR.&xyz’ endm

宏调用:

msg …… msg

ary,1,wang

ary,2,zhang

宏展开:1 ary1 db ‘HELLO MR.wang’ …… 1 ary2 db ‘HELLO MR.zhang’10

汇编教案ppt,武汉理工大学

例:定义宏指令STRG,实现存储字符串的功能 宏定义: STRG MACRO DB STRING

‘&STRING&’

ENDM宏调用: STRG 25-1

STRG宏展开: 1

% 25 -1DB ‘25-1’

1

DB

‘24’11

汇编教案ppt,武汉理工大学

宏定义: msgerrmsg

macro count,string msg&count db string endm macro text cntr = cntr+1 msg %cntr,text endm

cntr=0 宏调用: …… errmsg …… errmsg

‘SYNTAX ERROR’ ‘INVALID OPERAND’

1 1 宏展开: 21 1 2

cntr msg msg1 …… cntr msg msg2

= cntr+1 %cntr,‘SYNTAX ERROR’ db ‘SYNTAX ERROR’= cntr+1 %cntr,‘INVALID OPERAND’ db ‘INVALID

OPERAND’

汇编教案ppt,武汉理工大学

列表伪操作:.LALL :在LST清单中列出宏展开后的全部 语句(包括注释)。

.SALL :在LST清单中不列出任何宏展开后的 语句。 .XALL :缺省的列表方式,只列出宏体中产生 目标代码的语句。

汇编教案ppt,武汉理工大学

starter macro csname, dsname assume cs:csname, ds:dsname, es:dsname push ds sub ax, ax push ax mov ax, dsname mov ds, ax mov es, ax endm1 1 1 1 1 1 push ds sub ax, ax push ax mov ax, data mov ds, ax mov es, ax14

宏调用: . xall starter code, data

汇编教案ppt,武汉理工大学

建立宏库:>EDIT MACRO . MAC macro1 MACRO [哑元表] ……ENDMmacro2 MACRO [哑元表] …… ENDM …… MACRO [哑元表] …… ENDM

macroN

调用宏库:>EDIT EXP.ASM

include MACRO.MAC …… macro1 [实元表] …… macro2 [实元表] …… macroN [实元表] ……

purge macroN15

汇编教案ppt,武汉理工大学

2. 重复汇编用于连续产生完全相同或基本相同的一组代码。 重复伪操作 REPTREPT……

表达式;重复块

不定重复伪操作 IRP/IRPCIRP……

ENDM

哑元,<自变量表>;重复块

ENDM IRPC……

哑元,字符串;重复块16

ENDM

汇编教案ppt,武汉理工大学

例 : 把 字 符 ‘ A’ 到 ‘ Z’ 的 ASCII 码 填 入 数 组 TABLE 汇编后:CHAR = ‘A’ TABLE LABEL BYTE 1 1 1 DB DB DB …… 1 DB 5AH 41H 42H 43H

REPTDB CHAR = CHAR+1

26CHAR

ENDM

汇编教案ppt,武汉理工大学

例:产生一组指令,将字数组TAB的内容入栈保存; 宏定义 PUSH_TAB MACRO PUSH ENDM K TAB+k ; 宏展开 2 2 2 REPT 5 2 2 PUSH PUSH PUSH PUSH PUSH TAB+0 TAB+2 TAB+4 TAB+6 TAB+8

; 宏调用I=0

PUSH_TAB %II=I+2 ENDM

汇编教案ppt,武汉理工大学

例:建立ARRAY数组 汇编后:.lall ARRAY LABEL REPT DW ENDM DW ARRAY WORD 7 $+2

ARRAY LABEL1 1 DW DW $+2 $+2

WORD

11 1

DWDW DW

$+2$+2 $+2

11

DWDW DW

$+2$+2 ARRAY19

汇编教案ppt,武汉理工大学

例:生成一组入栈指令

汇编后:1 PUSH PUSH PUSH PUSH AX BX CX DX

IRP

REG, <AX,BX,CX,DX> PUSH REG

1 1 1

ENDM

例:生成存储字符串的汇编语句 汇编后:array label byte 1 1 1 1 1 db db db db db ‘NO.1’ ‘NO.2’ ‘NO.3’ ‘NO.4’ ‘NO.5’20

IRPCdb ENDM

K, 12345‘NO.&K’

汇编教案ppt,武汉理工大学

3. 条件汇编根据条件把一段源程序包括在汇编语言程序内 或者排除在外。

一般格式: IF 自变量 ; 为条件 ; 自变量满足条件则汇编此块

……

[ELSE]…… ENDIF21

; 自变量不满足条件则汇编此块

本文来源:https://www.bwwdw.com/article/wl7e.html

Top