高级汇编语言技术教学课件.ppt

上传人:文库蛋蛋多 文档编号:2410369 上传时间:2023-02-18 格式:PPT 页数:48 大小:667.52KB
返回 下载 相关 举报
高级汇编语言技术教学课件.ppt_第1页
第1页 / 共48页
高级汇编语言技术教学课件.ppt_第2页
第2页 / 共48页
高级汇编语言技术教学课件.ppt_第3页
第3页 / 共48页
高级汇编语言技术教学课件.ppt_第4页
第4页 / 共48页
高级汇编语言技术教学课件.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《高级汇编语言技术教学课件.ppt》由会员分享,可在线阅读,更多相关《高级汇编语言技术教学课件.ppt(48页珍藏版)》请在三一办公上搜索。

1、汇编语言程序设计,Assembly Language Programming,第七章 高级汇编语言技术,2,教学重点:在掌握基本的汇编语言程序设计方法之后进一步学习如何提高编程效率的各种实用方法:宏汇编 重复汇编 条件汇编 统称宏结构,宏(Macro)是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法。,3,宏具有宏名的一段汇编语句序列宏定义时书写宏指令这段汇编语句序列的缩写宏调用时书写宏展开宏指令处用宏体代替的过程宏汇编时实现,7.1 宏汇编,宏的使用有三个步骤:宏定义、宏调用、宏展开。,4,macro_name MACRO 哑元表(宏定义体)ENDM,宏定义,哑元 相

2、当于C语言函数定义中形参,宏的参数 功能强大,颇具特色;宏定义体 可以是任何合法的汇编语句,既可以是硬指令序列,又可以是伪指令序列,也可以使用已经定义过的宏指令或者嵌套进行宏定义;配合宏,还有宏操作符和与宏有关的伪指令。,7.1.1 宏的使用过程,5,宏定义,mainbegin MACRO;定义名为mainbegin的宏,无参数 mov ax,data;宏定义体 mov ds,ax ENDM;宏定义结束mainend MACRO retnum;带有哑元retnum mov al,retnum;宏定义中使用参数 mov ah,4ch int 21h ENDM,宏注释符,7.1.1 宏的使用过程,

3、6,macro_name 实元表,宏调用,start:mainbegin;宏调用,建立DS内容dispmsg string;宏调用,显示字符串mainend 0;宏调用,返回DOSend start 宏调用的实质在汇编过程中进行宏展开;实元 相当于C语言函数调用中的实参;对宏指令的调用必须先定义后调用。,7.1.1 宏的使用过程,7,在汇编时,用宏定义体的代码序列替代宏指令的过程,宏展开,宏展开的具体过程当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体取代源程序的宏指令,同时用位置匹配的实参对形参进行取代;若实元数哑元数,则多余的实元无效;若实元数哑元数,则多余的哑元作“空NUL

4、L”处理。,7.1.1 宏的使用过程,8,宏展开 举例,start:mainbegin;宏指令 1 mov ax,data;宏展开 1mov ds,axmainend 0;宏指令 1 mov al,0;宏展开 1 mov ah,4ch 1 int 21,7.1.1 宏的使用过程,9,宏的参数使用非常灵活,宏的参数,宏定义时,可以无参数,例如:mainbegin 可以带有一个参数,例如:mainend 也可以具有多个参数,例如:例7.1 实际参数可以是常数、变量、存储单元、指令(操作码)或它们的一部分,也可以是表达式。,7.1.2 宏的参数,10,multiply MACRO opr1,opr2

5、,result push dx push ax mov ax,opr1 imul opr2 mov result,ax pop ax pop dx ENDM,宏展开:1 push dx 1 push ax 1 mov ax,cx 1 imul var 1 mov xyzbx,ax 1 pop ax 1 pop dx,例7.1 两个字相乘(多个变元),multiply cx,var,xyzbx,7.1.2 宏的参数,宏定义:,宏调用:,11,savereg MACRO push ax push bx push cx push dx push si push di ENDM,宏调用:savereg

6、宏展开:1 push ax 1 push bx 1 push cx 1 push dx 1 push si 1 push di,例7.2保存寄存器(无参数),7.1.2 宏的参数,宏定义:,12,宏定义:shrot MACRO op,od,num push cx mov cl,num op od,cl pop cx ENDM,宏展开:1 push cx 1 mov cl,7 1 shl ax,cl 1 pop cx 1 push cx 1 mov cl,6 1 ror ax,cl 1 pop cx,例7.3统一循环移位和移位指令(变元是操作码),宏调用:shrot shl,ax,7 shrot

7、 ror,x,6,7.1.2 宏的参数,13,宏定义:shift MACRO op,od,num push cx mov cl,num s&op od,cl pop cx ENDM,例7.4 统一移位指令(变元是操作码的一部分),宏调用:shift al,ax,4 shift hr ax,4,宏展开:1 push cx 1 mov cl,4 1 sal ax,cl 1 pop cx 1 push cx 1 mov cl,4 1 shr ax,cl 1 pop cx,7.1.2 宏的参数,14,与宏有关的伪操作,局部标号伪操作LOCAL 标号列表宏定义体采用了标号,应使用LOCAL加以说明,它必

8、须是宏定义MACRO语句之后的第一条语句,宏展开时,LOCAL定义的标号也由?0000?FFFF替代宏定义删除伪操作PURGE 宏名表不需要某个宏定义时,可以把它删除宏定义退出伪操作EXITM伪指令EXITM表示结束当前宏调用的展开,7.1.3与宏有关的伪操作,15,宏定义:absol MACRO oper LOCAL next cmp oper,0 jge next neg opernext:ENDM宏调用:absol varabsol bx,宏展开:1 cmp var,01 jge?00001 neg var?0000:1 cmp bx,01 jge?00011 neg bx1?0001:

9、,例7.5 求绝对值(使用LOCAL伪操作),7.1.3与宏有关的伪操作,16,宏定义:add MACRO opr1,opr2,result ENDM宏调用:add xx,yy,zzpurge add;取消宏定义,宏指令名与指令助记符或伪操作名相同,宏指令的优先级最高。,7.1.3与宏有关的伪操作,17,;宏注释符,用于表示在宏定义中的注释。采用这个符号的注释,在宏展开时不出现。&替换操作符,用于将参数与其他字符分开。如果参数紧接在其他字符之前或之后,或者参数出现在带引号的字符串中,就必须使用该伪操作符。%表达式操作符,用在宏调用中,表示将后跟的一个表达式的值作为实参,而不是将表达式本身作为参

10、数。,宏操作符,7.1.4 宏操作符,18,字符串传递操作符,用于括起字符串。在宏调用中,如果传递的字符串实参数含有逗号、空格等间隔符号,则必须用这对操作符,以保证字符串的完整。!转义操作符,用于指示其后的一个字符作为一般字符,不含特殊意义。,宏操作符,7.1.4 宏操作符,19,例7.6(使用;注释),Q MACRO m;display a message 每次展开保留此注释;m is a string 每次展开不保留此注释 ENDM,7.1.4 宏操作符,20,leap macro cond,lab j&cond lab endm,宏定义:,宏调用:,leap z,thereleap nz

11、,here,宏展开:,1 jz there 1 jnz here,例7.7(变元是操作码的一部分),7.1.4 宏操作符,21,msggen macro lab,num,xyz lab&num db Hello MR.&XYZ endm,宏定义:,宏调用:,Msggen msg,1,Wang,宏展开:,例7.8(变元是ASCII串),msg1 db Hello MR.Wang,7.1.4 宏操作符,22,宏定义DATA1 MACRO A,B DW A,B ENDM宏调用X=10Y=20 DATA1%X,%Y DATA2 X,Y,例7.9(使用%),宏展开 1 DW 10,20 1 DW X,Y

12、,7.1.4 宏操作符,23,dstringmacro stringdb&string&,0dh,0ah,$endm,宏定义:,宏调用:,dstringdstring,宏展开:,1 db This is a example.,0dh,0ah,$1 db 0 Number 10,0dh,0ah,$,例7.10(使用和!),传递操作符,!转义操作符,7.1.4 宏操作符,24,7.1.5 在宏定义内使用宏,宏定义体中可以使用宏,有两种情形:宏定义中可以使用宏调用,前提是必须先定义后调用宏体中包含宏定义,25,例7.11 在宏定义内使用宏调用,宏定义:dif MACRO x,y mov ax,x s

13、ub ax,y ENDMdifsqr MACRO x,y,z push dx push ax dif x,y imul ax mov z,ax pop ax pop dx ENDM,宏调用:difsqr v1,v2,v3宏展开:1 push dx 1 push ax 2 mov ax,v1 2 sub ax,v2 1 imul ax 1 mov z,ax 1 pop ax 1 pop dx,26,例7.12 在宏定义内使用宏调用,宏定义:dfmac MACRO mnam,op mnam MACRO x,y,z push ax mov ax,x op ax,y mov z,ax pop ax E

14、NDM ENDM,宏调用:dfmac addition,add dfmac logor,or,则形成两条宏指令:addition,logor,宏调用宏展开:addtion x,y,z1 pushax1 movax,x1 addax,y1 movz,ax1 popax logorx,y,z1 pushax1 movax,x1 orax,y1 movz,ax1 popax,27,源程序(ASM文件)经汇编程序汇编,主要输出是OBJ文件和LST文件(列表文件)。LST文件同时列出源程序和机器语言程序清单,并给出符号表。.LALL在LST清单中列出宏展开后的全部语句.SALL在LST清单中不列出任何宏

15、展开后的语句.XALL只列出产生目标代码的语句Page256257 例7.12,列表伪操作,7.1.6 列表伪操作,28,1.缩短源代码2.扩充指令集3.改变某些助记符的意义,汇编语言程序指令,指令伪指令(伪操作)宏指令,宏指令的用途,7.1 宏汇编,29,子程序:在程序执行期间被调用,只占用自身大小的一段空间,主程序,call sub1call sub1call sub1,子程序 sub1,ret,宏调用与子程序调用的区别,7.1 宏汇编,30,宏定义,宏调用,宏展开,Q macro x,y endm,Q a,b Q c,d Q e,f,宏调用:在汇编期间被展开,每调用一次就把宏定义体展开一

16、次。,7.1 宏汇编,31,比较,仅是源程序级的简化:宏调用在汇编时进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变通过形参、实参结合实现参数传递,简捷直观、灵活多变,还是目标程序级的简化:子程序调用在执行时由CALL指令转向、RET指令返回;形成的目标代码较短,执行速度减慢需要利用寄存器、存储单元或堆栈等传递参数,宏,子程序,7.1 宏汇编,32,7.2 重复汇编,重复汇编指在汇编过程中,重复展开一段(基本)相同的语句重复汇编没有名字,不能被调用重复汇编常用在宏定义体中,也可以在一般汇编语句中使用,重复汇编伪指令有三个:REPT按参数值重复 IRP按参数个数重复 IRPC按参

17、数的字符个数重复最后,用ENDM结束,7.2 重复汇编,33,REPT格式:REPT 表达式;重复块 ENDM,例7.13X=0 REPT 10X=X+1 DB X ENDM,1 DB 11 DB 21 DB 3 1 DB 10,汇编后:,7.2.1 重复伪操作REPT,7.2 重复汇编,34,CHAR=aTABLE LABEL BYTE REPT 26 DB CHARCHAR=CHAR+1 ENDM,1 DB 61H1 DB 62H1 DB 63H 1 DB 7AH,汇编后:,例7.14 把字符A到Z的 ASCII 码填入数组TABLE,35,IRP格式:IRP 哑元,;重复块 ENDM 每

18、次重复用自变量表中的一项取代哑元,重复次数由自变量的个数决定。,例7.15 IRP REG,PUSH REGENDM,1 PUSH AX1 PUSH BX1 PUSH CX1 PUSH DX,汇编后:,7.2.2 不定重复伪操作 IRP,36,data segment array label byte IRP K,db NO.&K ENDMdata ends,data segment array label byte 1 db NO.1 1 db NO.2 1 db NO.3 1 db NO.4 1 db NO.5data ends,汇编后:,例7.16:在数据段产生字符区array,包括5个

19、字符串NO.K,37,IRPC格式:IRPC 哑元,字符串;重复块 ENDM 每次重复用字符串中的一个字符取代哑元,重复次数等于字符串中的字符数。例:在数据段产生字符区array,包括5个字符串NO.K,7.2.3 不定重复伪操作 IRPC,38,按参数字符个数重复,IRPC regad,dcba pop®ad&xENDM,1pop dx 1pop cx 1pop bx 1pop ax,39,data segment array label byte IRPC K,12345 db NO.&K ENDMdata ends,data segment array label byte 1 d

20、b NO.1 1 db NO.2 1 db NO.3 1 db NO.4 1 db NO.5data ends,汇编后:,例7.17:在数据段产生字符区array,包括5个字符串NO.K,40,根据条件把一段源程序包括在汇编语言范围内,或者排除在外 一般格式:IF 自变量;为条件;自变量满足条件则汇编此块 ELSE;自变量不满足条件则汇编此块 ENDIF,7.3 条件汇编,41,IF 表达式IFE 表达式IFDEF 符号IFNDEF 符号IFB IFNB IFIDN,IFDIF,详见Page 266,常见条件汇编语句,42,pdatamacro num IF num lt 100;如果num

21、100,则汇编如下语句db num dup(?)ELSE;否则,汇编如下语句db 100 dup(?)ENDIFendmpdata 12;宏调用db 12 dup(?);宏汇编结果pdata 102;宏调用db 100 dup(?);宏汇编结果,例7.18,43,宏结构的作用,宏汇编、重复汇编和条件汇编为源程序的编写提供了很多方便,灵活运用它们可以编写出非常良好的源程序来汇编系统中有些以圆点起始的 伪指令(如.startup、.exit等)实际上是一种宏结构,44,dstringMACRO string;定义字符串db 设置数据段地址mov ax,dssegmov ds,axENDMdispm

22、sgMACRO messagemov dx,offset messagemov ah,09hint 21hENDM,45,mainendMACRO retnum;返回DOS,可不带参数ifb mov ah,4ch;没有参数else mov ax,4c00h+(retnum AND 0ffh);有参数endifint 21hENDM,46,.model small.stack 256.datamsg1equ this bytedstringmsg2equ this bytedstring.codestart:mainbegin data;建立DS内容dispmsg msg1;显示msg1字符串d

23、ispmsg msg2;显示msg2字符串mainend;返回DOSend start,47,宏定义:MAX MACRO K,A,B,C LOCAL NEXT,OUT MOV AX,A IF K-1 IF K-2 CMP C,AX JLE NEXT MOV AX,C ENDIFNEXT:CMP B,AX JLE OUT MOV AX,B ENDIFOUT:ENDM,宏调用:MAX 1,PMAX 2,P,QMAX 3,P,Q,R,1 MOV AX,P1?0002:CMP Q,AX1 JLE?00031 MOV AX,Q1?0003:,1 MOV AX,P1 CMP R,AX1 JLE?00041 MOV AX,R1?0004:CMP Q,AX1 JLE?00051 MOV AX,Q1?0005:,1 MOV AX,P1?0001:,宏展开:,例7.18 求最大值放入AX,48,7.1 7.27.67.97.117.137.147.16,作 业,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号