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

汇编语⾔程序设计第4章汇编语⾔程序设计§4.1 汇编语⾔的模式⼀、汇编语⾔源程序的⼀般模式[Name 模块名][Title 标题][定义宏][定义数据段][定义附加段][定义堆栈段]定义代码段源程序结束中括号括起的部分可以省略,可见在⼀个汇编语⾔源程序中必须要定义代码段,并且必须有源程序结束指令。
⼆、8086汇编语⾔程序的⼀个例⼦Pg90。
§4.2 语句⾏的构成汇编语⾔中的语句⼀般分为两种类型:指令性语句和指⽰性语句。
指令性语句的格式为:[标号:] 助记符 [操作数1[,操作数2]] [;注释]指⽰性语句的格式为:[名称] 助记符 [参数1,参数2,……] [;注释]标号和名称都是编程⼈员根据需要和⼀定的规则任意取的。
也可以认为汇编语⾔的语句⾏是由标记和分隔符(空格)构成。
⼀、标记1.IBM宏汇编的字符集(1)字母(2)数字符(3)特殊字符2.界符⽤于定界⼀个标记的结束或⼀个标记的开始,本⾝具有⼀定的意义。
3.常量出现在汇编语⾔源程序中的固定值称为常量。
(1)数值常量①⼆进制:以字母B结束。
②⼗进制:以字母D或⽆字母结束。
③⼋进制:以字母Q(或O)结束。
④⼗六进制:以字母H结束。
(2)字符常量指⽤单引号或双引号引起的字符或字符串。
4.标识符由程序员⾃⼰建⽴的字符序列(标号或名称)。
⼀个标识符不能超过31个字符,不能以数字开头。
5.保留字汇编语⾔中具有特殊意义的字符序列。
6.注释⼀⾏中分号以后的部分。
⽤于对⼀段或⼀⾏程序进⾏说明,便于阅读和理解。
⼆、符号具有⼀定意义的字符序列。
1.寄存器名2.变量段属性、偏移属性、类型属性3.标号段属性、偏移属性、类型属性4.常数5.其它三、表达式由操作数和运算符组合⽽成的序列。
1.操作数(1)⽴即数(2)寄存器操作数(3)存储器操作数2.运算符(1)算术运算符+、-、*、/、MOD(求余)(2)逻辑运算符AND、OR、NOT、XOR(3)关系运算符EQ、NE、LT、LE、GT、GE结果为“假”时,返回0,结果为“真”时,返回⼆进制全1。
汇编语言程序设计

6)组合运算符(属性修改运算符) ① PTR运算符:运算符PTR可以指定或修改存储器操作数的 类型。注意,这种修改是临时性的,仅在该语句内有效。 下面是使用PTR运算符的例子: 例10 INC BYTE PTR[BX] 该语句的目的操作数是内存单元,用寄存器作为地址指 针。如果仅仅使用[BX]来表示该操作数,则汇编该语句时 ,不能确定该存储单元是字节单元还是字单元。因此,必 须使用BYTE PTR说明它为字节操作数(若为字操作数, 则使用WORD PTR说明)。
4)分析运算符:分析运算符有:SEG、OFFSET、TYPE、 LENGTH和SIZE。 ① SEG运算符:利用SEG运算符可以得到一个标号或变量的段 基值。下面的指令将ARRAY的段基值送给DS寄存器。 例4 MOV AX,SEG ARRAY MOV DS,AX ② OFFSET运算符:利用OFFSET运算符可以得到一个标号或 变量的偏移量。下面的指令将STRING的偏移地址送给DX。 例5 MOV DX,OFFSET STRING ③ TYPE运算符:运算符TYPE的运算结果是一个数值,这个数 值与操作数类型的对应关系见表4-1。
4.1.3
汇编语言的表达式
(3)表达式。表达式是操作数常见的形式,它由常数、变量 、标号通过操作运算符连接而成。 汇编语言中有:算术运算符、逻辑运算符和关系运算符等 。 1)算术运算符:常用的有:+(加)、–(减)、*(乘)、/ (除)和MOD(模运算)等,算术运算的结果是一个数值 。 例1 MOV AX,VARX+2 表示VARX的地址加2后对应的存储字单元内容送给AX。 2)逻辑运算符:AND(逻辑“与”)、OR(逻辑“或”) 、NOT(逻辑“非”)和XOR(逻辑“异或”)。逻辑运算 用于数值表达式中对数值进行按位逻辑运算,并得到一个数 值结果。 例2 MOV AL,0FH AND 35H 表示将0FH与35H按位相与后得到05H送给AL, 这条指令 与MOV AL, 05H 等效。
汇编语言程序设计方法

C 名字前加 下划线
从右到左 调用程序
是
SYSCALL
从右到左 被调用程序
是
STDCALL 名字前加
下划线 (注)
被调用程序
是
PASCAL 名字变大写
BASIC 名字大写
FORTRAN 名字大写
从左到右 被调用程序
是
从左到右 被调用程序
是
从左到右 被调用程序
是
12
PROTO是过程声明伪指令,用于事先声明过程的结构。它的格 式如下:
结束处理部分
AGAIN: ADD AX,CX
;从20,19,……2,1倒序累加到AX
LOOP AGAIN ;每循环一遍,CX自动减1
MOV SUM,AX ;将累加和送入SUM单元
.EXIT 0
END
初始化部分
循环结束? 是 否
工作部分 修改部分 结束处理部分
7
二、用MASM 6.x循环控制伪指令实现循环结构
.CODE
.STARTUP
MOV AL, B
IMUL AL
MOV BX,AX MOV AL,A
;BX中为B的平方
IMUL C
MOV CX,4
IMUL CX
;AX中为4AC
.IF SWORD PTR BX>=AX ;比较B的平方和4AC的大小
MOV SIGN,1
;条件成立,SIGN得到1
.ELSE
MOV SIGN,0
.IF 条件表达式 ;条件为真(非0),执行分支体
分支体
[.ELSEIF 条件表达式
分支体
;前面IF条件为假,并且当前ELSEIF条件为真执行分支体
[.ELSE
;前面IF条件为假执行分支体
《汇编语言程序设计》(第四版)教案及答案解析

《汇编语言程序设计》教案附:习题参考答案《汇编语言程序设计》(第4版)钱晓捷主编前言1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。
它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。
3.本教材共有十一章,其内容安排如下:(1).第一、二章为汇编语言所用的基础知识。
(2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。
(3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。
(4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。
(5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。
(6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。
(7).第九章说明BIOS和DOS系统功能调用的使用方法。
(8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。
附:教学参考书1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,2001年(教材)2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,19916.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,19957.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,19908.杨素行,微型计算机系统原理及应用,清华大学出版社,19959.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,199610.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,199111.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,199312.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社目录第 1 章基础知识 (1)1.1进位计数制与不同基数的数之间的转换 (1)1.2二进制数和十六进制数的运算 (2)1.3计算机中数和字符的表示 (3)1.4几种基本的逻辑运算 (3)第 2 章 80X86计算机组织 (4)2.180X86微处理器 (4)2.2基于微处理器的计算机系统构成 (4)2.3中央处理机 (5)2.4存储器 (6)2.5外部设备 (7)第 3 章 80X86的指令系统和寻址方式 (8)3.180X86的寻址方式 (8)3.2程序占有的空间和执行时间 (10)3.380X86的指令系统 (10)第 4 章汇编语言程序格式 (27)4.1汇编程序功能 (27)4.2伪操作 (27)4.3汇编语言程序格式 (31)4.4汇编语言程序的上机过程 (34)第 5 章循环与分支程序设计 (37)5.1循环程序设计 (37)5.2分支程序设计 (38)5.3如何在实模式下发挥80386及其后继机型的优势 (38)第 6 章子程序结构 (40)6.1子程序的设计方法 (40)6.2子程序的嵌套 (41)6.3子程序举例 (41)第 7 章高级汇编语言技术 (43)7.1宏汇编 (43)7.2重复汇编 (44)7.3条件汇编 (45)第 8 章输入/输出程序设计 (46)8.1I/O设备的数据传送方式 (46)8.2程序直接控制I/O方式 (47)8.3中断传送方式 (47)第 9 章 BIOS和DOS中断 (50)9.1键盘I/O (50)9.2显示器I/O (52)9.3打印机I/O (53)9.4串行通信口I/O (54)第 10 章图形与发声系统的程序设计 (55)10.1显示方式 (55)10.2视频显示存储器 (55)10.3EGA/VGA图形程序设计 (56)10.4通用发声程序 (57)10.5乐曲程序 (58)第 11 章磁盘文件存取技术 (59)11.1磁盘的记录方式 (59)11.2文件代号式磁盘存取 (60)11.3字符设备的文件代号式I/O (61)11.4BIOS磁盘存取功能 (62)附录:《IBM—PC汇编语言程序设计》习题参考答案 (63)第一章.习题 (63)第二章.习题 (64)第三章.习题 (65)第四章.习题 (79)第五章.习题 (84)第六章.习题 (104)第七章.习题 (118)第八章.习题 (125)第九章.习题 (130)第十章.习题 (134)第十一章.习题 (145)第 1 章 基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。
汇编语言程序设计

《汇编语言程序设计》课程教学大纲学时:32 学分:2理论学时:24 实验学时:8面向专业:电科、电信、通信课程代码:B2700009先开课程:C语言程序设计课程性质:必修执笔人:王艳春审定人:陈龙猛、张金政第一部分:理论教学部分一、说明1、课程的性质、地位和任务本课程属于专业基础课,是电科、电信和通信专业学生必修的核心课程之一,是进一步学习微机原理、操作系统等课程的基础。
掌握它有助于提高学生对计算机系统的设计、研究、开发和应用能力。
汇编语言是一种面向机器、实践性很强的程序设计语言,必须结合一种实际的计算机来组织教学。
因此,本课程选择最广泛使用的IBM PC作为具体的机型来介绍。
通过课堂教学和上机实践,培养学生用汇编语言进行编程的思路、方法,养成良好的程序设计习惯,并了解底层I/O 驱动软件的编程方法,熟悉源程序汇编、链接和调试运行的步骤和方法,掌握dos、BIOS功能的调用方法及使用debug工具的调试手段,为后续课的学习打下扎实的基础。
2、课程教学和教改基本要求课程的目的与教学基本要求:本课程主要介绍汇编语言和宏汇编的基本概念,80X86CPU的指令系统和寻址方式;介绍汇编语言程序格式、伪操作和上机全过程。
通过实际例子,详细叙述顺序、分支、循环、子程序等基本程序结构以及程序设计的基本方法和技巧。
学习这门课程,应达到以下几个要求:①掌握汇编语言的基本理论知识和有关概念;掌握用汇编语言编写源程序的基本原则、方法和技巧;②具有阅读,分析汇编语言程序的能力;③通过上机实践,能够熟练地掌握汇编语言程序的编辑、汇编、连接、运行过程及debug工具的调试手段。
课堂授课采用多媒体教学,采用由浅入深、循序渐进学习步骤,主要讲解设计思想、实现技巧,通过提问题引导学生思考,提高学生的学习兴趣,从而加深学生对理论课的理解,提高学生的动手能力。
二、教学内容与课时分配第一章基础知识(2学时)1.1 机器语言及汇编语言的产生1.2 汇编语言的组成1.3 存储器1.4 指令和数据1.5 存储单元及CPU对存储器的读写1.6 三大总线1.7 主板、接口卡及各类存储器芯片1.8 内存地址空间教学的重点与难点:指令和数据在内存或磁盘上没有区别;内存地址空间。
第3章 汇编语言程序设计

START PROC FAR MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX ;-----------------------------------------------------微机原理 汇编语言程序设计(8)
MOV AH,4CH INT 21H 指令构成的管理性语句,其对 START ENDP 应的伪操作是在汇编过程中完 CSEG ENDS 成的,汇编后不产生机器代码。 ;--------------------------------------------
MESG
43 45 4C 4C
H E L L O
DB ‘AB’ DW ‘AB’
41
A
42 42 41
B B A
微机原理 汇编语言程序设计(31)
• 操作数?可以保留存储空间但 不存入数据. ABC DB 0,?,?,?,0 DFF DW ?,52,? • 经汇编后存储情况如图所示.
ABC
00
微机原理 汇编语言程序设计(15)
• 段定义伪操作SEGMENT/ENDS 格式如下: segment-name SEGMENT … segment-name ENDS 其中删节号部分,对于DS、ES和SS来说,一般是存贮 单元的定义、分配等伪操作;对于代码段则是指令 及伪操作。
微机原理 汇编语言程序设计(16)
汇编语言的语句格式
• 汇编语言源程序中的每个语句可以由4项组成, 格式如下 [名字项] 操作项 操作数项 ;注释项 AGAIN: MOV AL, [SI] ;取加数 A DB ‗ABCDEFG‘
微机原理 汇编语言程序设计(9)
名字项
• 源程序中用下列字符表示名字: • 字母:A~Z或a~z; • 数字:0~9; • 专用字符号:?、• 、@、―、$; • 名字项可以是标号或变量。
汇编语言程序设计(5)

例:
第 4 章 汇编语言程序设计简介
ORG 1000H
BUF1: DB 38H, 7FH, 80H
BUF2: DB 45H, 66H
ORG伪指令指定了标号BUF1的地址为1000H, 而DB伪 指令是将其后的二进制数表38H, 7FH, 80H依次存放在1000H, 1001H, 1002H 3 个连续单元之中, BUF2也是一个标号, 其地 址与前一条伪指令连续, 即1003H, 1004H地址单元中依次存 放 45H, 66H。
如果在程序中要多次使用到某一地址,由EQU指令将其赋值 给一个字符名称,一旦需要对其进行变动,只要改变EQU命 令后面的数字即可,而不需要对程序中涉及到该地址的所有 指令逐句进行修改。
13
第 4 章 汇编语言程序设计简介
注意, 由EQU等值的字符名称必须先赋值后使用,且 在同一个源程序中,同一个标号只能赋值一次。 例:
H)=10H。
18
第 4 章 汇编语言程序设计简介
六、BIT——位地址符号指令
指令功能为:将位地址赋值给指定的符号名称,通常用于位符 号地址的定义。
指令如下:
字符名称 BIT 位地址
例如,X1 BIT P1.0
汇编结果为将位地址P1.0赋给变量X1,即在程序中便可 使用X1代替位地址P1.0。
19
(c)多分支
30
第 4 章 汇编语言程序设计简介
2. 一般分支程序结构实例
【例5】 x, y均为8位二进制数, 设 x存入R0, y存入R1, 求解:
1 y 1
0
x0 x0 x0
31
第 4 章 汇编语言程序设计简介
程序如下:
START:
CJNE R0,#00H,SUL1
汇编语言程序设计

标号有三种属性:
1. 段属性(SEGMENT): ●表示标号所在段的段基址。
2. 偏移属性(OFFSET): ●表示标号的偏移地址,即标号地址在逻辑段中距段的起始点的字节数。
3. 距离属性(或类型属性 TYPE): ●表示标号作为段内或段间的转移属性。
变量名、标号和一些专用符号等。
●注释字段 这是一个任选字段,它必须以分号开始,和指令语句的注释功能一样。
精选课件
5.2.2 常用伪指令
1. 符号定义伪指令(赋值语句)
(1)等值伪指令 格式:符号名 EQU 表达式 功能:将表达式的值赋给符号名。
[例5-11]
ALFA COUNT
EQU EQU
100 ALFA
精选课件
; CONT =60 ; CONT =7 ; CONT =1 ; AL = 84H
逻辑运算符
●包括按位操作的与(AND)、或(OR)、异或(XOR)、和 非(NOT)四种运算符。它们只适用于对常数进行逻辑运算。
注意: ● AND、OR、XOR和NOT也是指令助记符。
[例5-2] AND DX, PORT AND OFEH
精选课件
分析操作符(数值返回运算符)
(1)取地址的偏移量
(2)取段基址
格式: OFFSET 变量名或标号
功能:取变量名或标号所在段的 段内偏移量。
格式: SEG 变量名或标号
功能:取变量名或标号所在段 的段地址。
(3) 求变量名或标号的类型值
格式:TYPE 变量名或标号 功能: 返回一个数字值。若TYPE运算符加在变量名前,返回的数值是该变量 的类型属性;若TYPE运算符加在标号前,返回的数值则是该变量距离 属性;返回的数值与性的关系表4-1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2011.9.19
汇编语言
程舒慧
2011.12.13
第七章 高级汇编语言技术 7.1 宏汇编
宏:源程序中一段有独立功能的程序代码。
宏指令:用户自定义的指令。在编程时,将多次 使用的功能用一条宏指令来代替。
指令 汇编语言程序 伪指令(伪操作) 宏指令
第七章 高级汇编语言技术
宏定义:
macro_name MACRO [哑元表] ; 形参/虚参
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、宏指令的参数可以是操作码
第七章 高级汇编语言技术
设有重复汇编结构如下: 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
AX, P
AX, P Q, AX ??0003 AX, Q AX, P R, AX ??0004 AX, R Q, AX ??0005 AX, Q
第七章 高级汇编语言技术
第七章 高级汇编语言技术
第七章 高级汇编语言技术
第七章 高级汇编语言技术
ห้องสมุดไป่ตู้
宏展开:
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
第七章 高级汇编语言技术 将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
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 功能:使汇编程序对重复体作重复汇编,以整数表达式的值作 为重复次数。
第七章 高级汇编语言技术
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。
宏调用: 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.3 使用IRPC伪指令的重复汇编结构
格式:IRPC 形参,字符串 重复体 ENDM 功能:使汇编程序对重复体作重复汇编,每作一次 汇编就依次用字符串中的一个字符取代重复体中的 形参。(重复次数就等于字符串中字符的个数)
第七章 高级汇编语言技术
设有重复汇编结构如下: IRPC X, 0123456789 DB X ENDM 汇编程序在汇编时将对重复体 “DB X”重复汇 编10次,且分别用0,1,2,…9取代形参X。 其结果等价于 DB 0, 1, 2, …9
重复宏调用:
I=0 RPET 5 P_BUF %I I=I+2 ENDM
第七章 高级汇编语言技术
3. 条件汇编
根据条件把一段源程序包括在汇编语言程序内 或者排除在外。 一般格式: IF [ELSE] …… ENDIF
; 自变量不满足条件则汇编此块 自变量 ; 为条件 ; 自变量满足条件则汇编此块
宏调用 DISP !%(2*11-8) 产生的宏扩展为 +DB′ANSWER: ′, ′%(2*11-8)′, ′$′ 宏调用中的“%”前使用了宏运算符“!”,故 “%”被看作一个符号,而失去了宏运算符的功能。
第七章 高级汇编语言技术
宏嵌套
可以用已经定义的宏指令来定义另一个宏指令,也就是说,宏指 令可以嵌套定义。
子程序: … … … RET
目标程序: …
优:模块化
省内存
缺:开销大
宏定义: Q macro x,y
… endm
主程序: … Q a, b … Q c, d … Q e, f …
优: 参数传送 简单,执 行效率高 缺:
…
… … …
占用内存 空间大
…
第七章 高级汇编语言技术
宏 汇 编 子 程 序
有几次宏调用就有几次宏扩展, 子程序目标代码只出现一 目标代码所占 空间 故并不简化目标代码 次,故目标代码短 程序运行速度 无需转返,程序运行速度快 需要转返工作,程序运行 速度慢 在执行时,CPU通过转子 指令执行子程序中的指令
第七章 高级汇编语言技术
方法三:用宏指令和重复汇编实现 (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
宏体中的形参用宏调用提供的对应实参来取代。若 实参个数大于形参个数,则多余的实参被忽略;若 形参个数大于实参个数,则多余的形参作“空”处 理。
第七章 高级汇编语言技术
例:两个字相乘
宏定义:
multiply MACRO push push mov imul mov pop pop ENDM opr1,opr2,result dx ax ax,opr1 opr2 result,ax ax dx
宏调用:
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
[LOCAL 标号表] …… …… ; 宏定义体
ENDM
宏调用: (必须先定义后调用)
macro_name [实元表]
; 实参
宏展开:汇编程序把宏调用展开
宏定义体 复制到宏指令位置,实参代虚参 LOCAL中的标号 ??0000~??ffff
第七章 高级汇编语言技术
例:保存寄存器
宏定义: savereg
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
符号
符号 <自变量> <自变量>
;符号已定义,则汇编
;符号未定义,则汇编 ;自变量为空,则汇编 ;自变量不为空,则汇编
第七章 高级汇编语言技术
宏定义:
leap macro j&cond endm cond,lab lab
宏调用:
leap …… leap nz, here z, there
宏展开:
1 jz …… 1 jnz here there