《计算机原理与汇编汇编语言基础.ppt》由会员分享,可在线阅读,更多相关《计算机原理与汇编汇编语言基础.ppt(76页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第四章 汇编语言汇编语言概述一、概述1.高级语言与汇编语言比较高级语言:语句变量说明/定义int y,a=25,b=3,c=76;给变量赋值y=2(a+b)-c汇编语言:指令分配寄存器分配存储单元数据传递2.汇编程序结构数据段堆栈段代码段第四章 汇编语言;设置数据段DATA SEGMENTADB25;数据ABDB3;数据BCDB76;数据CYDB?;存放结果DATA ENDS;设置堆栈段STACK1 SEGMENTPARA STACKDW 20HDUP(0)STACK1ENDS示例:y=2(a+b)-c第四章 汇编语言;设置代码段COSEGSEGMENTASSUME CS:COSEG,DS:D
2、ATA,SS:STACK1START:MOV AX,DATA;装填段寄存器DSMOV DS,AXMOV AL,A;取数据AADD AL,B;计算(A+B)SALAL,1;计算 2(A+B)SUBAL,C;计算 2(A+B)-CMOV Y,AL;存结果MOV AH,4CH;结束用户程序,返回操作系统INT21HCOSEGENDSENDSTART示例:第四章 汇编语言汇编语言:是汇编格式指令,伪指令的集合及其表示,使用这些指令的一组规则。机器语言:用二进制编码的机器指令的集合及一组使用规则,它是CPU能直接识别的唯一语言。MOV DS,AX 汇编语言 8E D8 机器语言(目标代码)汇编语言与机器
3、语言第四章 汇编语言汇编语言与目标代码的对应00192B4CB8XXXX8ED8A0000002060100D0E024060200A20300B44CCDMOV AX,DATAMOV DS,DXMOV AL,AADD AL,B21数据A数据B数据C数据D地址增大方向SAL AL,1SUB AL,CMOV Y,ALINT 21HMOVAH,4CH第四章 汇编语言p与机器语言相关p效率高p编写源程序繁琐p调试困难汇编语言特点特点(1)程序执行占用较短的时间,或者占用较小存储容量的场合。(2)程序与计算机硬件密切相关,程序直接控制硬件的场合。(3)需提高大型软件性能的场合。(4)没有合适的高级语言
4、的场合。汇编语言的主要应用场合:汇编语言的主要应用场合:汇编语言的主要应用场合:汇编语言的主要应用场合:第四章 汇编语言二、汇编语言语句种类语句种类 指令语句:又叫可执行语句,在汇编时产生一个目标代码,对应机器的一种操作。伪指令语句:又叫命令语句。用于指示汇编程序如何汇编源程序,没有目标代码与之对应。宏指令语句:由用户自定义的指令。(指令的扩展)第四章 汇编语言格式:名字 操作符 操作数 ;注释指令语句:标号:助记符 操作数,操作数;注释伪指令语句:名字 定义符 参数,.,参数 ;注释命名规则:可以用?,_,数字和英文字符。名字的第一个字符不能是数字。名字的长度不受限制,但只有前31个字符有效
5、。不允许用保留字作名字(指令,伪指令,寄存器名等)。二、汇编语言语句格式第四章 汇编语言指令语句:指令语句:指令语句:指令语句:标号:标号:标号:标号:助记符助记符助记符助记符 操作数操作数操作数操作数,操作数,操作数,操作数,操作数;注释;注释;注释;注释 1标号:标号是机器指令语句存放地址的符号表示,代表该指令目标代码的第一个字节地址,后面必须紧跟冒号“:”。2指令助记符:指令助记符为语句的核心成分,表示了该语句的操作类型。“MOV”3操作数:操作数表示指令助记符的操作对象。4注释:注释均以分号开始,它可占一行或多行,一般放在一条语句的后面。第四章 汇编语言伪指令语句:伪指令语句:伪指令语
6、句:伪指令语句:名字名字名字名字 定义符定义符定义符定义符 参数,参数,参数,参数,.,参数,参数,参数,参数;注释;注释;注释;注释 1名字(符号名):伪指令语句的一个可选项,空格表示结束,不得使用冒号。2定义符(伪指令符):指定汇编程序要完成的具体操作,如数据定义伪指令DB、DW、DD,段定义伪指令SEGMENT,假定伪指令ASSUME等。3参数(操作数):伪指令后面的操作数可以是常数、字符串、变量、表达式等,其个数由具体的伪指令决定,各个操作数之间必须以“逗号”分隔。4注释:伪指令的注释必须以“;”开始,其作用同指令语句中的注释部分。第四章 汇编语言三、符号定义语句三、符号定义语句1.等
7、值语句格式:符号 EQU 表达式 表达式:常数或数值表达式 地址表达式 变量或标号CONST EQU 10ADR1 EQU DS:BP+14HADR2 EQU CONST+10COUN EQU VAR 同一符号不能用EQU重新定义。汇编时,作为替代符号用,不产生目标代码,不占用存储单元。第四章 汇编语言2.等号语句格式:符号=表达式 CONT=5 NUM=10H NUM=NUM+20H表达式形式同上,但可多次重新定义同一符号。三、符号定义语句三、符号定义语句第四章 汇编语言例:DATASEGMENTDA1DB9AHDA2DW5678HDA3DD12345678HDATAENDS变量的属性:段属
8、性SEG偏移属性OFFSET类型属性TYPE四、数据定义语句格式:变量名 DB/DW/DD 表达式1,表达式2,.保留存储空间,并可以完成数据的初始化。第四章 汇编语言格式:变量名 DB/DW/DD 表达式1,表达式2,.表达式:(1)数值(2)字符/字符串(3)?表达式:分配相应数量的存储单元,但不初始化。(4)带DUP的表达式:使用重复数据操作符DUP,能方便地定义连续的存储单元。格式:变量名 DB/DW/DD 表达式1,DUP(表达式2)次数 内容操作符DUP可以嵌套使用:DA_B3 DB 10H DUP(4 DUP(3),8)四、数据定义语句第四章 汇编语言DA_BYTE1DB50HD
9、A_BYTE2DB10H,20H,30H,40HDA_WORD1 DW0A34HDA_WORD2 DW1234H,5678H,9ABCHDA_DWORDDD12345678H,9ABCDEFH数值表达式数值表达式STRING1DBSTRINGSTRING2DWST,RI,NGSTRING3DDST,RI,NG字符串表达式字符串表达式DA_BYTE3 DB?,?DA_WORD3 DW?,?表达式表达式第四章 汇编语言STRING1535452494E47545352494E47STRING2545352494E47STRING3000000000000第四章 汇编语言DA_B1DB10HDUP(
10、?)DA_B2DB20HDUP(ABCD)DA_W1DW10DUP(4)DA_W2DW10DUP(-1,1)带带DUP表达式表达式格式格式:变量名变量名 DB/DW/DD 表达式表达式1,DUP(表达式表达式2)操作符操作符DUP可以嵌套使用可以嵌套使用DB 10H DUP(4 DUP(3),8);3,3,3,3,8重复重复10H次次次数次数内容内容第四章 汇编语言数据类型字节BYTE1字WORD2双字DWORD4四字QWORD8十字节TBYTE10DBDWDDDQDT第四章 汇编语言1.常数数值常数:二、八、十、十六进制 B,O,D,H字符串常数2.变量 用数据定义语句定义并预置初值后,变量
11、代表存储单元的数据,并作为该单元的符号地址。变量引用:(1)在指令语句的操作数字段中,引用的变量名作为地址表达式的组成部分之一。地址表达式的值:存放操作数的存储单元偏移量。地址表达式的类型:同变量名的类型。(2)在用DW或DD的数据定义语句中,若操作数字段引用了变量名,则在分配的存储单元中,预置被引用的变量名的地址部分 偏移量(DW;DD,前两个字节)段基值(DD,后两个字节)五、汇编语言数据与运算符第四章 汇编语言3.标号:一条指令的符号地址。段属性 偏移属性 类型属性 NEAR/FAR 类型属性设置:(1)隐含方式:NEXT:MOV AX,3000(2)用LABEL伪指令设置类型属性:标号
12、伪指令LABEL格式:名字 LABEL 类型 与指令语句配合使用:名字(新标号)LABEL 类型(NEAR/FAR)SUB1_FAR LABEL FAR SUB1:MOV AX,1234H 与数据定义语句配合使用:名字(新变量名)LABEL 类型(BYTE/WORD/DWORD)DATA _BYTE LABEL BYTE DATA _WORD DW 20H DUP(563H)第四章 汇编语言运算符+*/MODSHRSHL运算格式运算功能+表达式表达式表达式1+表达式2表达式1 表达式2表达式1*表达式2表达式1/表达式2表达式1 MOD 表达式2表达式1 SHR 次数表达式1 SHL 次数正数
13、(单项运算符)负数(单项运算符)加法减法乘法除法(取商)模除(取余数)右移左移(1)算术运算符4.运算符只有减法运算可以用同一段内的两个变量相减SHRSHR、SHLSHL不能对某寄存器或存储单元内容进行移位运算。不能对某寄存器或存储单元内容进行移位运算。第四章 汇编语言示例NUM=11011011BDATA1DWNUM SHL 3,NUM SHR 2.MOV AX,NUM SHL 3MOV BX,NUM SHR 2MOV CX,NUM SHL 8MOV CX,NUM SHL 16MOV DX,NUM SHR 8MOV DX,NUM SHR 16DATA1DW6D8H,36H.MOV BX,00
14、110110BMOV CX,0MOV DX,0MOV DX,0第四章 汇编语言算术运算符移位运算符不能对寄存器或存储单元进行移位运算MOV AX,CX SHL 5MOV DX,DATA1 SHR 3第四章 汇编语言运算符NOTANDORXOR运算格式运算功能NOT表达式表达式1 AND 表达式2表达式1 OR 表达式2表达式1 XOR 表达式2逻辑非逻辑与逻辑或逻辑异或(2)逻辑运算符逻辑运算符只能对一个具体数据进行逻辑运算,不能对一个寄存器操作数或存储器操作数进行逻辑运算。第四章 汇编语言示例MOV AL,NOT0F0HMOV DX,NOT0F0HMOV BL,55H OR 0F0HANDB
15、H,55H AND 0F0HXORCX,55H XOR 50HMOV AL,0FHMOV DX,0FF0FHMOV BL,0F5HANDBH,50HXORCX,5第四章 汇编语言运算符EQNELTLEGTGE运算格式运算功能表达式1 EQ 表达式2表达式1 NE 表达式2表达式1 LT 表达式2表达式1 LE 表达式2表达式1 GT 表达式2表达式1 GE 表达式2两个表达式相等为真两个表达式不相等为真表达式1 表达式2为真表达式1 表达式2为真表达式1=表达式2为真(3)关系运算符全1为真,全0为假比较时,若为常数按无符号数比较;如果是变量,按偏移量比较第四章 汇编语言示例DATASEGME
16、NTORG 10HNUM1=1234NUM2=1234HDA_BYTEDB10HDUP(0)DA_WORDDW10HDUP(0)DA_VAR1DWNUM2+DA_BYTEGTNUM1+DA_WORDDA_VAR2DBNUM1 LE NUM2DATAENDS.MOV AX,NUM1 LT NUM2MOV BL,NUM1 GE NUM2MOV CX,DA_WORD GT DA_BYTE.第四章 汇编语言.DA_VAR1DW0FFFFHDA_VAR2DB0FFH.MOV AX,0FFFFHMOV BL,0MOV CX,0FFFFH.可以对两个常数进行比较,不能用常数与偏移量进行比较第四章 汇编语言格
17、式:运算对象是存储器操作数,由变量名或标号组成地址表达式SEG:返回变量所在的段值OFFSET:返回变量所在偏移TYPE:返回变量的类型LENGTH:返回数组变量的元素个数SIZE:返回数组变量所占的总字节数 SIZE=TYPE*LENGTH(4 4)数值返回运算符)数值返回运算符第四章 汇编语言示例示例 假设假设DATA的段基址是的段基址是7A4EHDATASEGMENTORG 30HDA1DB20HDUP(12H)DA2DWDA1.DATAENDS.MOV AX,SEGDA1MOV BX,SEGDA2MOV SI,OFFSET DA1MOV CX,DA2MOV DI,OFFSET DA2M
18、OV DX,OFFSET DA1+4MOV AX,7A4EHMOV BX,7A4EHMOV SI,30HMOV CX,DA2MOV DI,50HMOV DX,34H第四章 汇编语言变量标号类型属性运算结果BYTEWORDDWORD124 TYPE 运算符运算符NEARFAR-1-2用数字形式表示变量和标号的类型属性第四章 汇编语言示例DA_BYTE DB 12HDA_WORD DW 3456HDA_DWORDDD789AH.MOV AL,TYPE DA_BYTEMOV BL,TYPE DA_WORDMOV CL,TYPE DA_DWORD.MOV AL,1MOV BL,2MOV CL,4第四章
19、 汇编语言LENGTH与SIZE运算符LENGTH运算符返回数组变量的元素个数如果变量用DUP定义,Length为外层DUP的值如果没有DUP定义,结果为1SIZE运算符数组变量所占的总字节数SIZE是LENGTH和TYPE的乘积第四章 汇编语言示例DATASEGMENTVAR1DB10HDUP(0)VAR2DB10H,20H,30H,40HVAR3DW10HDUP(A,4 DUP(3)VAR4DBCOMPUTER.DATAENDS.MOV AL,LENGTHVAR1;MOV AH,SIZEVAR1;MOV BL,LENGTHVAR2;MOV BH,SIZEVAR2;MOV CL,LENGTH
20、VAR3;MOV CH,SIZEVAR3;MOV DL,LENGTHVAR4;MOV DH,SIZEVAR4;(AL)=10H(AH)=10H(BL)=1(BH)=1(CL)=10H(CH)=20H(DL)=1(DH)=1第四章 汇编语言例:求数组例:求数组ARRAY的各数据项的累加和,从数组最后的各数据项的累加和,从数组最后一个数据项开始进行累加。一个数据项开始进行累加。ARRAYDW20H DUP(4).XOR AX,AXMOVSI,OFFSET ARRAYADD SI,SIZE ARRAY-TYPE ARRAYMOVCX,LENGTH ARRAYLOP:ADD AX,SISUB SI,T
21、YPE ARRAYLOOP LOP第四章 汇编语言(5)属性运算符PTR:类型 PTR 地址表达式类型可以是:BYTE,WORD,DWORD 或NEAR FAR仅在当前语句中有效,是一种临时设置。DA_BYTE DB 20H DUP(0)DA_WORD DW 10H DUP(0)MOV WORD PTR DA_BYTE 10,AXADD BYTE PTR DA_WORD DI,BLINC BYTE PTR SISUB WORD PTRBX,30HJMP FAR PTR SUB1第四章 汇编语言THIS:THIS 类型THIS常与等值语句EQU一起用,形成新变量名或标号,使它们具有THIS后所指
22、的类型,而段基值和偏移量与紧接的变量名或标号相同。例:DATA _BYTE EQU THIS BYTE DATA _WORD DW 20H DUP(0)JUMP_FAR EQU THIS FAR JUMP_NEAR:XOR AX,AX第四章 汇编语言(6)分离字节运算符HIGH表达式 LOW 表达式分离运算对象的高字节和低字节部分表达式必须具有常量值,如常数、地址表达式的偏移量,不能是存储器操作数或寄存器内容.第四章 汇编语言示例DATASEGMENTORG20HCONSTEQU0ABCDHDATA1DB10HDUP(?)DATA2DW20HDUP(?).DATAENDS.MOV AH,HIG
23、HCONSTMOV AL,LOWCONSTMOV BH,HIGH(OFFSETDATA1)MOV BL,LOW(OFFSETDATA2)MOV CL,LOW(CONSTSHL3)MOVAH,0ABHMOVAL,0CDHMOVBH,0MOVBL,30HMOVCL,68H第四章 汇编语言错误:错误:MOV CH,HIGH DATA1MOV CL,LOW DATA1MOV DH,HIGH BPMOV DL,LOW AX存储器寄存器第四章 汇编语言优先级别优先级别(最高)123456789(最低)10运算符运算符LENGTH,SIZEPTR,OFFSET,SEG,TYPE,THISHIGH,LOW+,
24、(单项运算符)*,/,MOD,SHR,SHL+,EQ,NE,LT,LE,GT,GENOTANDOR,XOR(7 7)运算符的优先级)运算符的优先级第四章 汇编语言六、段结构伪指令1.段定义伪指令段名 SEGMENT 定位类型 组合类型 类别名.段名 ENDS定位类型(Align Type):PAGE(页):本段从一个页的边界开始,起始地址能被256整除。PARA(节):本段从一个节的边界开始,起始地址能被16整除。WORD(字):本段从偶字节地址开始。BYTE(字节):本段从任意地址开始。第四章 汇编语言组合类型(Combine Type):表示段与段之间的连接:None:本段与其它段无连接关
25、系,是独立的。PUBLIC:本段与其它同段名同类型的段相连接在一起,然后为所有这些段指定一个共同的段基地址,形成一个新的逻辑段。COMMON:本段与其它同段名同类型的段设置相同的段基址,共享相同的存储区,段长度由同名段中最大的段确定。(覆盖段)第四章 汇编语言组合类型(Combine Type):STACK:与PUBLIC段相似,但此段为堆栈段,系统自动对SS寄存器和SP指针初始化。AT表达式:本段的起始单元可以定位在表达式所示的节边界上。MEMORY:本段定位在所有其它段的最高地址,有多个段,只把第一个遇到的当作此段。类别名(Class):用户给定,在链接时把相同的用户给定,在链接时把相同的
26、段存储在连续的存储区段存储在连续的存储区。第四章 汇编语言2.段寻址伪指令ASSUME 段寄存器名:段名,段寄存器名:段名,.DS_DATA SEGMENTVAR1 DB 12HDS_DATA ENDSES_DATASEGMENTVAR2 DB 34HES_DATAENDSCODESEGMENTVAR3DB56H第四章 汇编语言 ASSUME CS:CODE,DS:DS_DATASTART:.INC VAR1 INC VAR2 INC VAR3 .CODE ENDS ENDSTART可用关键字NOTHING取消前面的某些设置。例:ASSUME DS:NOTHING;取消对DS的设置 ASSUM
27、E NOTHING;取消全部4个段R的设置,ES:ES_DATA第四章 汇编语言3 3.段寄存器的装入段寄存器的装入 DS,ESDS,ES的装入的装入DATA_DSSEGMENTDB1DB10HDUP(?)DATA_DSENDSDATA_ESSEGMENTDB2DB20HDUP(?)DATA_ESENDSCODESEGMENTASSUME CS:CODE,DS:DATA_DS,ES:DATA_ESSTART:MOVAX,DATA_DS;设置DSMOVDS,AXMOVAX,DATA_ES;设置ESMOVES,AX.CODEENDS第四章 汇编语言 SSSS的装入的装入(1)STACK1SEGME
28、NTPARA STACKDW20HDUP(?)STACK1ENDS(2)STACK2SEGMENTDW 30H DUP(?)TOPLABELWORD STACK2ENDS.CODESEGMENT.MOV AX,STACK2;设置SSMOV SS,AXMOV SP,OFFSET TOP;修改SP自动自动装入装入执行程序执行程序装入装入第四章 汇编语言 CSCS的装入的装入(1)结束伪指令结束伪指令.CODESEGMENTASSUMECS:CODE,.START:.CODEENDSEND START(2)CALL,RET;JMP;IRET第四章 汇编语言七、过程定义伪指令过程名 PROC NEAR
29、/FAR .RET过程名 ENDP有三个属性一个过程内,至少有一条返回指令RET调用过程使用CALL 过程名段内返回与段间返回第四章 汇编语言八、其它伪指令八、其它伪指令1.ORG,$ORG 表达式 将表达式的值赋给位置计数器$存放位置计数器的当前值第四章 汇编语言DATASEGMENTORG 30H ;$=30HDB1DB12H,34H ;$=32H ORG$+20H ;$=52HSTRINGDBSTRING.DATAENDS-ORG,$举例第四章 汇编语言CODESEGMENT.ORG50HMOV AX,OFFSET$MOV BX,OFFSET$.CODEENDSMOV AX,0050HM
30、OV BX,0053HDATASEGMENTDA1DB10HDUP(?)DA2DB12H,34HDA3DW56H,$+10H,78H,$+20H.DATAENDS;$=10H;$=12H;$=1AH第四章 汇编语言八、其它伪指令八、其它伪指令2.EVEN 伪指令定位偶地址3.INCLUDE伪指令 INCLUDE 文件名 INCLUDE 文件名例:INCLUDEFILE.MACINCLUDEB:MASMABC.ASM第四章 汇编语言4.4.PUBLIC PUBLIC PUBLIC PUBLIC 符号符号1 1,符号,符号2 2,.PUBLIC NUM1,STRING,SUB1,LOOP1DATA
31、1 SEGMENTNUM1EQU1234H.STRINGDBCHARACTER STRING.DATA1 ENDS.CODE1 SEGMENT.SUB1PROC FAR.SUB1ENDPLOOP1:.CODE1 ENDSEND第四章 汇编语言5.EXTRN 5.EXTRN 伪指令伪指令EXTRNEXTRN符号符号 1 1:类型:类型 ,符号,符号 2 2:类型,类型,.例:例:EXTRNNUM1:ABS,STRING:BYTEEXTRNSUB1:FAR,LOOP1:NEAR:CODE2SEGMENT:MOV AX,NUM1LEABX,STRING:CALL SUB1:JMPFAR PTR LO
32、OP1:CODE2ENDSEND第四章 汇编语言八、其它伪指令八、其它伪指令5.TITLE(标题)伪指令,指定一个标题 格式:TITLE 文本字符不超过80个例:TITLE EXAMPLEPROGRAM第四章 汇编语言九、宏指令九、宏指令例:MULTAX10MACROPUSHBXSAL AX,1MOVBX,AXSAL AX,1SAL AX,1ADDAX,BXPOP BXENDM第四章 汇编语言九、宏指令1.宏定义宏名 MACRO 形参1,形参2,.ENDMEXCHANG EMACRO MEM1,MEM2,REG MOVREG,MEM1 XCHGREG,MEM2 MOV MEM1,REG END
33、M第四章 汇编语言2.宏调用 宏名 实参1,实参2,.EXCHANGEEXCHANGEDA_BY1,DA_BY2,ALDA_BY1,DA_BY2,AL3.宏展开 第四章 汇编语言;宏定义MULTAX10MACROPUSH BXSALAX,1MOV BX,AXSALAX,1SALAX,1ADDAX,BXPOPBXENDM;-EXCHANGE MACRO MEM1,MEM2,REGMOVREG,MEM1XCHGREG,MEM2MOV MEM1,REGENDM第四章 汇编语言;设置数据段DATASEGMENTDA_W01DW1234HDA_W02DW5678HDATAENDS;设置堆栈段STACK1
34、SEGMENTPARA STACKDW20HDUP(?)STACK1ENDS;设置代码段COSEGSEGMENTASSUMECS:COSEG,DS:DATA,SS:STACK1START:MOV AX,DATAMOV DS,AX.MULTAX10;宏指令语句+PUSH BX+SALAX,1第四章 汇编语言+MOV BX,AX+SAL AX,1+SAL AX,1+ADDAX,BX+POPBX.EXCHANGE DA_W01,DA_W02,CX:宏指令语句+MOV CX,DA_W01+XCHGCX,DA_W02+MOV DA_W01,CX.COSEGENDSENDSTART第四章 汇编语言4.宏操
35、作符连接操作符&定义:定义:SHIFT_VAR MACRO R_M,DIRECT,COUNT MOV CL,COUNT S&DIRECT R_M,CL ENDM调用:调用:SHIFT_VAR AX,HL,2 SHL AX,CL SHIFT_VAR AX,HR,2 SHR AX,CL 第四章 汇编语言SHIF0 MACROCNTMOVCL,CNTENDMSHIF1 MACRO REG,DIRECT,NUMCOUNT=NUMSHIF0%COUNTS&DIRECT REG,CL ENDM;宏调用SHIF1 AX,HL,2SHIF1 BL,AR,3表达式操作符表达式操作符%格式:格式:%表达式;获取表
36、达式的值(出现在宏调用中)表达式;获取表达式的值(出现在宏调用中);宏展开SHIF1AX,HL,2+MOV CL,2+SHLAX,CLSHIF1 BL,AR,3+MOV CL,3+SARBL,CL第四章 汇编语言文本操作符 EXCHANGE ,AL宏展开MOV AL,BYTE PTR DA_WORD1XCHGAL,BYTE PTR DA_WORD2MOV BYTE PTR WORD1,AL字符操作符!格式:!字符宏定义:PROMPT MACRO NUM,TEXT PROMP&NUM DB&TEXT&ENDM宏调用:PROMPT 23,255 宏展开:PROMPT23 DB Expression
37、 255 宏注解符;第四章 汇编语言5.LOCAL伪指令LOCAL 在汇编过程中,宏定义中的内容会在每一次宏调用处展开。因此当多次调用一个宏时,宏定义中的标号会造成标号重复定义。在宏定义中使用LOCAL伪指令可以使标号被局部化,从而避免重复定义。LOCAL伪指令只能用在宏定义中,并且它必须是宏定义中紧跟在MACRO伪指令之后的第一个语句。第四章 汇编语言用连续相加的办法实现无符号数乘法运算MULTIPMACRO MULT1,MULT2,MULT3LOCAL LOP,EXIT0MOV DX,MULT1MOV CX,MULT2XORBX,BXXORAX,AXJCXZ EXIT0LOP:ADDBX,
38、DXADCAX,0LOOP LOPEXIT0:MOV MULT3,BXMOV MULT3+2,AXENDM第四章 汇编语言设数据段有如下定义的变量:DA1DW1234H,5678HDA2DW120H,210HDA3DW4 DUP(?)宏展开:.MULTIPDA1,DA2,DA3+MOVDX,DA1+MOVCX,DA2+XORBX,BX+XORAX,AX+JCXZ?0001+?0000:ADDBX,DX+ADCAX,0+LOOP?0000+?0001:MOVDA3,BX第四章 汇编语言+MOV DA3+2,AX.MULTIPDA1+2,DA2+2,DA3+4+MOVDX,DA1+2+MOVCX,
39、DA2+2+XORBX,BX+XORAX,AX+JCXZ?0003+?0002:ADD BX,DX+ADCAX,0+LOOP?0002+?0003:MOV DA3+4,BX+MOV DA3+6,AX.第四章 汇编语言6.宏嵌套宏定义嵌套嵌套的宏定义:JUMPMACROCONDJ&COND&SMACRODEST LOCALNEXT,EXIT J&CONDNEXT JMPEXITNEXT:JMPDESTEXIT:ENDM ENDM第四章 汇编语言外层宏调用为:JUMP EJUMP NEJUMP GJUMP GE内层宏调用为::JESSUB1;等于0转移 :JGES SUB2;大于或等于转移:第四章
40、 汇编语言当宏汇编程序对内层宏展开后,可得到如下结果:JE?0000JMP?0001?0000:JMPSUB1?0001:JGE?0002JMP?0003?0002:JMPSUB2?0003:第四章 汇编语言两个宏定义:对32位数左移一位SHIFTMACRONUM1,NUM2SALNUM2,1RCLNUM1,1ENDM对32位数乘以12MULT12MACROM_R1,M_R2,REG1,REG2PUSHFPUSHREG1PUSHREG2SHIFTM_R1,M_R2 SHIFTM_R1,M_R2 MOVREG1,M_R1MOVREG2,M_R2宏定义内嵌套宏调用第四章 汇编语言SHIFTM_R1,M_R2ADDM_R2,REG2ADCM_R1,REG1POPREG2POPREG1POPFENDM某数据段已定义变量:在程序中可以编写宏指令语句::MULT12DA_WORD+2,DA_WORD,AX,BX:MULT12AX,BX,CX,DX:7.宏库第四章 汇编语言P205 1,3P206 5,7,9P208 14作作 业业