1、汇编语言语法data SEGMENT ;数据段数据段var DB?data ENDScode SEGMENT ;代码段代码段 ASSUME CS:code,DS:datastart:MOV AX,data MOV DS,AX MOV var,CL MOV AH,4CH INT 21H ;返回返回DOScode ENDS END start例:例:一、汇编语言程序格式一、汇编语言程序格式段结构段结构整个源程序由段组成,段名通过伪指令进行定义整个源程序由段组成,段名通过伪指令进行定义每个段由若干语句组成每个段由若干语句组成整个源程序以整个源程序以END结束结束 名名字字:助助记记符符 操操作作数数
2、,;注注释释 名名字字项项 助助记记符符项项 操操作作数数项项 注注释释项项 data SEGMENT ;数据段数据段var DB?data ENDScode SEGMENT ;代码段代码段 ASSUME CS:code,DS:datastart:MOV AX,data MOV DS,AX MOV var,CL MOV AH,4CH INT 21H ;返回返回DOScode ENDS END start例:例:一、汇编语言程序格式一、汇编语言程序格式语句结构语句结构名名字字:助助记记符符 操操作作数数,;注注释释名名字字项项 助助记记符符项项 操操作作数数项项 注注释释项项1.名字项名字项 l
3、 据语句功能的不同,据语句功能的不同,名字项可用来表示名字项可用来表示:段名、变量名、标号、过程名以段名、变量名、标号、过程名以及常量名及常量名等。等。当为指令性语句,该项为标号,必当为指令性语句,该项为标号,必须加须加“:”当为伪指令语句时,该项为名字,当为伪指令语句时,该项为名字,没有没有“:”data SEGMENT ;数据段数据段var DB?data ENDScode SEGMENT ;代码段代码段 ASSUME CS:code,DS:datastart:MOV AX,data MOV DS,AX MOV var,CL MOV AH,4CH INT 21H ;返回返回DOScode
4、ENDS END startl 名字项用一个符号表示。名字项用一个符号表示。对符号的规定对符号的规定:由字符由字符AZ,az,09及特殊符号(及特殊符号(,$,_,.,?),?)等组成,最长等组成,最长31个字符,超出部分忽略。个字符,超出部分忽略。不能用数字打头,以免与十六进制数相混。不能用数字打头,以免与十六进制数相混。不使用汇编程序中的保留字。不使用汇编程序中的保留字。(如指令的助记符等如指令的助记符等)对定义的符号不区分大小写。对定义的符号不区分大小写。名名字字:助助记记符符 操操作作数数,;注注释释名名字字项项 助助记记符符项项 操操作作数数项项 注注释释项项名名字字:助助记记符符
5、操操作作数数,;注注释释名名字字项项 助助记记符符项项 操操作作数数项项 注注释释项项2.助记符项助记符项 助记符可以是指令、伪操作中的助记符。助记符可以是指令、伪操作中的助记符。对于指令对于指令,汇编程序将其翻译成机器语言指令。,汇编程序将其翻译成机器语言指令。MOV AX,100 B8 00 01对于伪操作对于伪操作,汇编程序据其要求的功能进行处理。,汇编程序据其要求的功能进行处理。data SEGMENT data与一段值对应与一段值对应 string DB Tsinghua string与一内存地址对应与一内存地址对应3操作数项操作数项l 操作数给出参与操作的数或数所在的地方。操作数给
6、出参与操作的数或数所在的地方。l 操作数多于一个时,用逗号分开。操作数多于一个时,用逗号分开。l 操作数可以是操作数可以是常数常数、寄存器、存储器操作数、寄存器、存储器操作数、标号名、过程名或标号名、过程名或表达式表达式等。等。名名字字:助助记记符符 操操作作数数,;注注释释名名字字项项 助助记记符符项项 操操作作数数项项 注注释释项项4注释项注释项l 由分号引出,用来说明语句或程序的功能。由分号引出,用来说明语句或程序的功能。汇编程序对分号后的内容不做处理。汇编程序对分号后的内容不做处理。l 作用:作用:注释程序,增强程序可读性。注释程序,增强程序可读性。可放在语句最前,暂时注释某语句,调试
7、程序用。可放在语句最前,暂时注释某语句,调试程序用。例例 、;MOV AH,2 ;显示提示信息显示提示信息 ;MOV DL,A ;INT 21H 、名名字字:助助记记符符 操操作作数数,;注注释释名名字字项项 助助记记符符项项 操操作作数数项项 注注释释项项常量常量二进制二进制xxxxxxxxBxxxxxxxxB01000101B01000101B八进制八进制xxxOxxxO 或或xxxQxxxQ721O721O或或721721Q Q十进制十进制xxxxxxxx或或xxxxDxxxxD19911991或或19911991D D十六进制十六进制xxxxHxxxxH0F1D4H0F1D4H字符串字
8、符串xxxxxx或或“xxx”xxx”ABAB数值常量数值常量符号常量(用符号常量(用EQUEQU或或=定义)定义)二、基本数据常量、变量、标号二、基本数据常量、变量、标号l字符常量,用单引号表示。字符常量,用单引号表示。如如 1234 l A、B、C、D、E、F开头的十六进制数前面加开头的十六进制数前面加0,与与H结尾的标识符区别。结尾的标识符区别。如如 寄存器名寄存器名AH、BH、CH、DH 变量名变量名 abcdH 等等例例 mov AL,0AH mov AL,AH mov BX,0abcdH注意注意:3个及其以上的字符,个及其以上的字符,只能用只能用DB定义定义str1 DW abcd
9、str2 DD abcd内存单元的名字内存单元的名字,由由DB/DW/DD/DQ/DTDB/DW/DD/DQ/DT定义定义BUF DB?BUF DB?MOV BUF,ALMOV BUF,AL变量的三种属性:变量的三种属性:段值段值 SEGSEG偏移量偏移量 OFFSETOFFSET类型类型 BYTE/WORD/.BYTE/WORD/.变量变量指令存放单元的符号地址指令存放单元的符号地址,是转移是转移/调用调用/循环指循环指令的操作数令的操作数标号的三种属性:标号的三种属性:段值段值 SEGSEG偏移量偏移量 OFFSETOFFSET类型类型 NEAR/FARNEAR/FAR标号标号伪指令语句没
10、有对应的机器代码,经汇编后不伪指令语句没有对应的机器代码,经汇编后不产生目标代码产生目标代码主要完成变量的定义、存储器的分配、段的定主要完成变量的定义、存储器的分配、段的定义和分配、过程的定义、程序开始和结束指示等义和分配、过程的定义、程序开始和结束指示等三、伪指令语句三、伪指令语句定义变量、分配存储单元等定义变量、分配存储单元等变量名变量名 DB/DW/DD/DQ/DT DB/DW/DD/DQ/DT 操作数,操作数,操作,操作数数功能:把操作数存入以变量名所指示的存储单功能:把操作数存入以变量名所指示的存储单元为首地址的存储区中元为首地址的存储区中操作数可以是:常数、字符串、变量、数值表操作
11、数可以是:常数、字符串、变量、数值表达式、?、达式、?、N DUPN DUP表达式等表达式等VAR1 DW 1234HVAR2 DB 12H,23H,34HVAR3 DB This is a stringVAR4 DW?表示未初始化的数表示未初始化的数1、数据定义伪指令、数据定义伪指令1、数据定义伪指令、数据定义伪指令注意注意:3个及其以上的字符,个及其以上的字符,只能用只能用DB定义定义str1 DW abcdstr2 DD abcdDBDB定义字节,表示每个操作数占用一个字节定义字节,表示每个操作数占用一个字节DWDW定义字,表示每个操作数占用定义字,表示每个操作数占用2 2个字节个字节D
12、DDD定义双字,表示每个操作数占用定义双字,表示每个操作数占用4 4个字节个字节DQDQ定义四个字,表示每个操作数占用定义四个字,表示每个操作数占用8 8个字节个字节DTDT定义定义1010个字节,表示每个操作数占用个字节,表示每个操作数占用1010个字节个字节(1)赋值伪指令)赋值伪指令EQU 标识符标识符 EQU 操作数操作数ABC EQU 2000HXYZ EQU BP+5 新标号新标号 EQU 老标号老标号AAD EQU PAR_3COUNT EQU CX 赋值伪指令赋值伪指令EQU定义后的标识符不能重复定义定义后的标识符不能重复定义(2)等号伪指令)等号伪指令“=”标识符标识符 =操
13、作数操作数 与与EQU执行过程类似执行过程类似 允许标识符重复定义允许标识符重复定义2 2、标识符赋值与解除伪指令、标识符赋值与解除伪指令(3)解除伪指令)解除伪指令PURGE PURGE 标识符标识符1,标识符,标识符2,标识符,标识符3,对对EQU定义过的标识符进行解除,可重新定义定义过的标识符进行解除,可重新定义(4)别名定义伪指令)别名定义伪指令LABEL格式格式:别名别名 LABEL 类型属性类型属性例如例如 BYTE-ARRAY LABEL BYTEWORD-ARRAY DW 100 DUP(?)MOV WORD-ARRAY,0把第一个字置把第一个字置0MOV BYTE-ARRAY
14、,0把第一个字节置把第一个字节置02 2、标识符赋值与解除伪指令、标识符赋值与解除伪指令段名段名SEGMENT 定位类型定位类型 组合类型组合类型 分类名分类名段体段体段名段名ENDSSEGMENT/ENDS总是成对使用总是成对使用,以指定段的名以指定段的名称和范围称和范围通常用通常用DATA作为数据段的段名,作为数据段的段名,CODE作为代作为代码段的段名,码段的段名,STACK作为堆栈段的段名作为堆栈段的段名.3、段定义伪指令、段定义伪指令(1)SEGMENT/ENDS伪指令伪指令定位类型(定位方式):给出了实际段起点的类型。缺定位类型(定位方式):给出了实际段起点的类型。缺省为省为PAR
15、APAGE指定起始地址低指定起始地址低8位是位是0,即值可以被,即值可以被256整除(页边界)整除(页边界)PARA指定起始地址低指定起始地址低4位是位是0,即值可以被,即值可以被16整除(段边界)整除(段边界)WORD指定起始地址最低位是指定起始地址最低位是0,即值可以被,即值可以被2整除(字边界)整除(字边界)BYTE指定起始地址是任意值指定起始地址是任意值 0 0 0 0 0 0 0 0 PAGE 0 0 0 0 PARA 0 WORD BYTE定位类型定位类型确定各个逻辑段的组合方式。缺省时为确定各个逻辑段的组合方式。缺省时为NONE,认为该段不准备认为该段不准备与其他同名段相连接的与
16、其他同名段相连接的PUBLIC:告诉连接程序将本段与其他同名段连接起来,公用告诉连接程序将本段与其他同名段连接起来,公用 一个起点地址,形成一个物理段一个起点地址,形成一个物理段COMMON:本段与同名同类别的段公用同一段起始地址,即同本段与同名同类别的段公用同一段起始地址,即同名同类段相重叠,段长度即为最长段的长度名同类段相重叠,段长度即为最长段的长度AT表达式:表达式:本段定位在表达式指定的段地址处本段定位在表达式指定的段地址处STACK:表明本段是堆栈段,连接方式同表明本段是堆栈段,连接方式同PUBLIC,连接后连接后段起始地址在段起始地址在SS寄存器中寄存器中MEMORY:本段在连接时
17、定位在所有段之上,即最高地址处本段在连接时定位在所有段之上,即最高地址处分类名分类名:使用时须用单引号括起来使用时须用单引号括起来凡分类名相同的段在连接时均按照先后顺序连接起来凡分类名相同的段在连接时均按照先后顺序连接起来组合类型组合类型ASSUME 段寄存器:段名,段寄存器:段名,段寄存器:段名段寄存器:段名 功能:定义当前有效的四个逻辑段,指明段与段寄功能:定义当前有效的四个逻辑段,指明段与段寄存器的关系;存器的关系;ASSUME语句通常作为代码段的第一条语句,一般语句通常作为代码段的第一条语句,一般数据段和代码段是必须的数据段和代码段是必须的(2)段分配伪指令段分配伪指令ASSUMEq代
18、码段寄存器代码段寄存器CS的值由系统在初始化时自动设置的值由系统在初始化时自动设置q其他段寄存器的初始化一般在程序开始,将段基址装入其他段寄存器的初始化一般在程序开始,将段基址装入例例:ASSUME CS:CSEG,DS:DSEG ASSUME是伪指令,段寄存器实际地址值的装入必是伪指令,段寄存器实际地址值的装入必须通过指令语句须通过指令语句CSEG SEGMENTASSUME CS:CSEG,DS:DSEGMOV AX,DSEGMOV DS,AXCSEG ENDS4、过程定义伪指令、过程定义伪指令格式:过程名格式:过程名 PROC PROC 属性属性(NEAR NEAR 或或FAR)FAR)
19、RET RET 过程名过程名 ENDPENDP调用格式为:调用格式为:CALL CALL 过程名过程名PROC,ENDP,NEAR,FAR功能:定义一个主程序可以用功能:定义一个主程序可以用CALL调用的过程调用的过程5、程序开始与结束伪指令、程序开始与结束伪指令格式:格式:NAME NAME 程序名程序名 TITLE TITLE 文本名文本名(1)目标模块命名)目标模块命名NAME、TITLE功能:为源程序目标模块赋一个功能:为源程序目标模块赋一个 程序名程序名格式:格式:ORG 表达式表达式作用:给出该定位指令下一条指令的起始偏移地址。即把下作用:给出该定位指令下一条指令的起始偏移地址。即
20、把下一条语句定义的内存数据或是程序从表达式的起点(偏移地一条语句定义的内存数据或是程序从表达式的起点(偏移地址)开始连续存放,直至遇到新的址)开始连续存放,直至遇到新的ORG指令。表达式的值为指令。表达式的值为无符号数无符号数ORG 2000H(IP=2400H)ORG 2464H在在2400H和和2464H间空出间空出100个字节的存储空间个字节的存储空间(2)定位伪指令)定位伪指令ORG(3)程序结束指令)程序结束指令END格式格式:END 标号标号说明源文件结束说明源文件结束,并给出执行程序的入口地址(标号)并给出执行程序的入口地址(标号)6、方式定义伪指令、方式定义伪指令功能:确定汇编
21、程序的操作方式功能:确定汇编程序的操作方式 .8086默认操作方式默认操作方式 .386运行于运行于386方式下方式下,可使用可使用32位寄存器位寄存器7、结构定义伪指令、结构定义伪指令(1)(1)结构定义结构定义格式格式:结构名结构名 STRUC STRUC 数据定义语句数据定义语句结构名结构名 ENDSENDS 结构定义不真正为结构分配存储空间结构定义不真正为结构分配存储空间,他是在汇编时进行他是在汇编时进行结构说明的结构说明的(2)(2)结构存储单元分配及赋值结构存储单元分配及赋值格式格式:结构变量名结构变量名 结构名结构名 (3)(3)结构引用结构引用格式格式:结构变量名结构变量名.字
22、段名字段名8、分组伪指令、分组伪指令GROUP格式:格式:组名组名 GROUP 段段1,段,段2,功能:将各个逻辑段放在同一个功能:将各个逻辑段放在同一个64K的物理段内,的物理段内,并给它取个新的名字,即组名并给它取个新的名字,即组名9、其他伪指令、其他伪指令公用符号伪指令公用符号伪指令格式格式:PUBLIC 标识符标识符指出可被其他模块引用的符号名指出可被其他模块引用的符号名,可以是变量名、标可以是变量名、标号、过程名或符号常量号、过程名或符号常量引用符号伪指令引用符号伪指令格式:格式:EXTRN 标识符标识符:类型类型 指出所要访问的其他模块定义的标识符。若标识符为指出所要访问的其他模块
23、定义的标识符。若标识符为标号,类型为标号,类型为NEAR/FAR;若标识符为变量,则类若标识符为变量,则类型为型为BYTE/WORD/DWORD(1)访问外部标识符的伪指令)访问外部标识符的伪指令EXTRN,PUBLIC(2)对准伪指令)对准伪指令EVEN格式:格式:EVEN功能:使下一条语句的地址调整为偶地址功能:使下一条语句的地址调整为偶地址(3)条件编译伪指令()条件编译伪指令(MASM提供)提供)格式格式:IF;如果条件成立如果条件成立ELSE;否则否则ENDIF;结束条件汇编语句结束条件汇编语句data1 SEGMENT ;数据段数据段1,(可据需要设定可据需要设定,也可无也可无);
24、变量定义变量定义data1 ENDSdata2 SEGMENT ;数据段数据段2 (可据需要设定可据需要设定,也可无也可无)data2 ENDScode SEGMENT ;程序段程序段 ASSUME CS:code,DS:data1,ES:data2start:MOV AX,data1;程序主体部分程序主体部分 MOV DS,AX 、MOV AH,4CH ;返回返回DOS INT 21Hcode ENDS END start完整汇编语言程序框架:完整汇编语言程序框架:DATA SEGMENT MESSAGE DB Hello world!“,0DH,0AH DB This is my firs
25、t asm program.$DATA ENDSSSEG SEGMENT STACK DB 100 DUP(?)SSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DATA,SS:SSEG START:MOV AX,DATA MOV DS,AX MOV DX,OFFSET MESSAGE MOV AH,9 INT 21H MOV AH,4CH INT 21HCSEG ENDS END START完整的段定义完整的段定义由操作数和运算符组成的序列由操作数和运算符组成的序列操作数可以是寄存器、常量(数值常量、符操作数可以是寄存器、常量(数值常量、符号常量)、存储器操作数
26、(标号、变量)号常量)、存储器操作数(标号、变量)运算符包括:算术运算符、逻辑运算符、关运算符包括:算术运算符、逻辑运算符、关系运算符、数值返回运算符和属性运算符系运算符、数值返回运算符和属性运算符四、表达式四、表达式 l 由常量、标号、变量和一些操作符构成。由常量、标号、变量和一些操作符构成。l 汇编程序对表达式进行运算后,得到一个确定的数值,汇编程序对表达式进行运算后,得到一个确定的数值,再把这个数值汇编到指令中。再把这个数值汇编到指令中。l 据表达式所表示的内容分:据表达式所表示的内容分:数字表达式、地址表达式数字表达式、地址表达式。l 表达式是指令或伪操作的操作数表达式是指令或伪操作的
27、操作数;表达式中的操作符由汇编程序完成。表达式中的操作符由汇编程序完成。例例 MOV AX,12-4 ;MOV AX,8 ;数字表达式数字表达式 LEA BX,SI+4 ;地址表达式地址表达式 表达式表达式(1 1)算术运算符)算术运算符+、-、*、/、MODMOD、SHLSHL、SHRSHR(2 2)逻辑运算符逻辑运算符ANDAND、OROR、NOTNOT、XORXOR(3 3)关系运算符关系运算符EQEQ、NENE、LTLT、GTGT、LELE、GEGEAND AX,(N LT 5)AND 30)OR(N GE 5)AND 20)当当N=5时,指令为时,指令为AND AX,20运算符运算符
28、SEGSEG 变量变量/标号标号返回段基址返回段基址OFFSETOFFSET 变量变量/标号标号返回偏移量返回偏移量TYPETYPE 变量变量/标号标号返回类型返回类型变量返回类型:变量返回类型:1 1 字节、字节、2 2 字、字、4 4双字双字标号返回类型:标号返回类型:-1 -1 NEARNEAR、-2 FAR-2 FARLENGTHLENGTH 变量变量返回数据项总数(针对返回数据项总数(针对DUPDUP表达式)表达式)SIZESIZE 变量变量返回字节总数返回字节总数(4)分析运算符(数值返回运算符)分析运算符(数值返回运算符)YY YY DW 6 DUP(?)DW 6 DUP(?)则
29、:则:LENGTH YY=6LENGTH YY=6SIZE YY=12SIZE YY=12TYPE YY=2TYPE YY=2 SEGSEG 取符号地址的段地址取符号地址的段地址OFFSETOFFSET 取符号地址的偏移地取符号地址的偏移地址址例例 MOV AX,SEGMOV AX,SEG YYYY MOV BX,OFFSET MOV BX,OFFSET YYYYDATA SEGMENTXX DB Hello!DATA ENDSEXTRA SEGMENT YY DW 6 dup(?)EXTRA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:EXTRAST
30、ART:CLD MOV AX,SEG YY MOV ES,AX MOV DI,OFFSET YY MOV CX,6 .CODE ENDS END START注意注意:SEGSEG、OFFSETOFFSET只能对变量或标号(符号地址)操作只能对变量或标号(符号地址)操作MOV AX,MOV AX,SEG SEG BX BXMOV BX,MOV BX,OFFSET OFFSET SI SI(5 5)合成运算符(属性运算符)合成运算符(属性运算符)(1 1)段操作符)段操作符 格式:格式:段前缀:变量或地址表达式段前缀:变量或地址表达式用来表示某个变量或地址被修改到哪个段寄用来表示某个变量或地址被修
31、改到哪个段寄存器提供的段基址中存器提供的段基址中MOV AXMOV AX,ESES:SISI(2 2)PTRPTR定义符号名为新类型定义符号名为新类型格式:类型格式:类型 PTRPTR 表达式表达式MOV WORD PTR 1000,0MOV WORD PTR 1000,0MOV WORD PTR 1000,0MOV WORD PTR 1000,0可以重新定义已定义过的变量或是标号可以重新定义已定义过的变量或是标号若已若已 定义定义DATA3DATA3为字变量,可以有为字变量,可以有MOV BYTE PTR DATA3,ALMOV BYTE PTR DATA3,AL(3 3)THISTHIS
32、与与PTRPTR类似,为某个符号名建立新类型,常与类似,为某个符号名建立新类型,常与EQUEQU联用联用格式:格式:THISTHIS 类型类型XYZ EQU THIS BYTEXYZ EQU THIS BYTE相当于相当于BYTE PTR XYZBYTE PTR XYZLABC EQU THIS BYTE LABC EQU THIS BYTE LABD DW 4321H,2255HLABD DW 4321H,2255HMOV AL,LABCMOV AL,LABC;AL=21H;AL=21HMOV AX,LABDMOV AX,LABD;AX=4321H;AX=4321H(4 4)SHORTSHO
33、RT 格式:格式:SHORTSHORT 标号标号功能:用来指出转移类指令中目的地址的属性功能:用来指出转移类指令中目的地址的属性(5 5)HIGHHIGH、LOWLOW格式:格式:HIGHHIGH 标号或变量标号或变量 LOWLOW 标号或变量标号或变量功能:对一个数或地址,功能:对一个数或地址,HIGHHIGH从中分离出高位字从中分离出高位字节,节,LOWLOW从中分离出低位字节从中分离出低位字节指令语句又叫可执行语句,每一条指令语句对指令语句又叫可执行语句,每一条指令语句对应应CPU的一种特定操作,在汇编时将产生一个的一种特定操作,在汇编时将产生一个可供机器执行的机器目标代码可供机器执行的
34、机器目标代码指令语句中必须包含一个指令助记符和充分的指令语句中必须包含一个指令助记符和充分的寻址信息寻址信息五、指令语句五、指令语句 名名字字:助助记记符符 操操作作数数,;注注释释 名名字字项项 助助记记符符项项 操操作作数数项项 注注释释项项 data SEGMENT ;数据段数据段var DB?data ENDScode SEGMENT ;代码段代码段 ASSUME CS:code,DS:datastart:MOV AX,data MOV DS,AX MOV var,CL MOV AH,4CH INT 21H ;返回返回DOScode ENDS END start例:例:指令语句结构指令
35、语句结构宏指令是源程序中具有独立功能的一段程宏指令是源程序中具有独立功能的一段程序代码序代码只需定义一次,可重复调用只需定义一次,可重复调用六、宏指令语句六、宏指令语句宏指令定义语句宏指令定义语句宏指令名宏指令名 MACRO 宏体宏体 ENDM PUSHREGMACROPUSH AXPUSH BXPUSH CXPUSH DXENDM(1)宏定义)宏定义宏指令名宏指令名 MACRO 参数参数1,参数参数2,参数参数n 宏体宏体 ENDMLOADW MACRO PR,VAR MOV PR,VAR MOV AX,PR ENDMLOADW SI,WVAR*MOVSI,WVARMOV AX,SI带参数的
36、宏指令带参数的宏指令宏指令名宏指令名 参数列表参数列表(2)宏调用)宏调用LOADW MACRO PR,VAR MOV PR,VAR MOV AX,PR ENDMLOADW SI,WVAR*MOVSI,WVARMOV AX,SI(3)宏展开)宏展开宏展开是用宏定义时设计的宏体去代替相应的宏展开是用宏定义时设计的宏体去代替相应的宏指令名,并且用实际参数一一取代形式参数宏指令名,并且用实际参数一一取代形式参数宏展开由汇编软件宏展开由汇编软件MASM进行进行(4)宏嵌套)宏嵌套宏嵌套是指宏定义中使用宏调用或宏定义中包宏嵌套是指宏定义中使用宏调用或宏定义中包括宏定义括宏定义使用宏时,可能会导致变量、标
37、号重定义的问题,使用宏时,可能会导致变量、标号重定义的问题,使用使用LOCALLOCAL伪指令可以解决这一问题。在宏展开时伪指令可以解决这一问题。在宏展开时将用将用?0000?0000,?0001?0001,来依次代替各标号,来依次代替各标号格式:格式:LOCAL LOCAL 变量变量/标号列表标号列表SOMEMACRO SOMEMACRO MACROMACROLOCAL L1,L2LOCAL L1,L2L1:L1:.L2:L2:.ENDMENDM(5)宏定义中的标号)宏定义中的标号宏指令调用比子程序调用快宏指令调用比子程序调用快子程序调用由微处理器完成,用子程序调用由微处理器完成,用CALLCALL实现实现宏指令调用在汇编过程中由汇编程序完成宏指令调用在汇编过程中由汇编程序完成子程序调用可以减小目标程序的大小,节子程序调用可以减小目标程序的大小,节约内存空间;宏指令调用不能约内存空间;宏指令调用不能宏指令比子程序灵活宏指令比子程序灵活宏指令与子程序的区别宏指令与子程序的区别