-汇编语言高级编程技术

上传人:宝路 文档编号:47982681 上传时间:2018-07-07 格式:PPT 页数:69 大小:305.33KB
返回 下载 相关 举报
-汇编语言高级编程技术_第1页
第1页 / 共69页
-汇编语言高级编程技术_第2页
第2页 / 共69页
-汇编语言高级编程技术_第3页
第3页 / 共69页
-汇编语言高级编程技术_第4页
第4页 / 共69页
-汇编语言高级编程技术_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《-汇编语言高级编程技术》由会员分享,可在线阅读,更多相关《-汇编语言高级编程技术(69页珍藏版)》请在金锄头文库上搜索。

1、第8章 汇编语言高级编程技术17.1 宏 指 令 7.2 宏指令库 7.3 重复伪指令 7.4 条件伪指令27.1 宏 指 令在高级汇编语言技术中,一段共用语句 序列除了可以设计成子程序外,还可以设 计成宏指令的形式。宏与子程序类似,首先在源程序中定义 一个宏,后面在需要时就可以调用它,并 允许传递多个参数。正确灵活使用宏,可以缩短源程序的长 度,扩充指令的功能,使源程序更清晰、 简洁,有利于阅读、修改与调试,从而提 高编程效率。3一、宏定义、宏调用、宏扩展宏指令是源程序中一段有独立功能的程序 代码,由用户使用宏定义伪指令定义。 1.宏定义 宏定义伪指令伪指令格式: 宏指令名 MACRO 形式

2、参数表 ;宏指令体 ENDM宏指令名由用户自起,注意ENDM前没有宏 指令名。形式参数表给出了宏定义中所用到 的形式参数,形式参数之间用逗号隔开。宏 指令体可以由伪指令、指令、甚至于宏指令 组成。 42.宏调用宏指令一经定义,就可以在程序中调用它, 这被称为宏调用。 宏调用格式:宏指令名 实参数表实参数表给出了宏调用中要用到的实参数, 实参数之间用逗号隔开,实参数应和形式参数 的顺序、类型一致。53.宏扩展当源程序被汇编时,汇编程序对每个宏调用进行 宏扩展。宏扩展:n宏定义体替换宏指令名n实参数替换形式参数n原则上,实参数个数应和形式参数个数相等,但 汇编程序允许它们不等n若实参数个数大于形式

3、参数个数,在替换时多余 的实参数不予考虑n若实参数个数小于形式参数个数,则多余的形式 参数作为空(字符)或零(数字)处理n应保证用实参数替换形式参数后,所展开的是有 效的汇编语句,否则汇编程序会提示错误。 6例1输入一个字符的宏定义、宏调用、宏扩展;宏定义 INCHARMACRO MOVAH,1INT21H;输入的字符在AL ENDM ;宏调用 INCHAR ;宏调用 当汇编程序汇编到宏指令INCHAR时对其扩展为: 1 MOV AH,1 1 INT 21H7由于宏调用是在宏扩展时替换, 一条宏指令在程序中被调用几次,经 汇编后其源代码就会在程序中出现几 次,而不是像子程序调用那样把控制 转移

4、到子程序、执行完后再返回。因 此使用宏指令仅仅是减轻了程序设计 人员的劳动量,并不能缩短目标码的 长度。8二、设计宏指令时应注意的问题宏指令也像子程序那样可以被多次调用或被多个程序 共享,设计时需注意: 1宏指令说明在宏指令开头说明功能、调用参数和返回参数。在 设计宏指令库时尤其要注意。 2寄存器保存与恢复在宏指令开头及结束处保存和恢复将要用到的寄存 器内容,使用PUSH保存、POP恢复。 3说明局部符号若宏指令中包含标号或变量名则一定要用LOCAL伪指 令说明,否则当一个程序多次调用该宏指令时会出现 符号重复定义错误。9三、LOCAL伪指令格式:LOCAL 局部符号表功能:对局部符号表中的每

5、个符号,在汇编 时每扩展一次便建立一个惟一的符号,形如 ?xxxx。以保证汇编时生成名字的惟一性。说明:xxxx的值在0000FFFF之间。注意:LOCAL伪指令一定要是宏体中的第一 个语句,即它应紧跟在宏定义的MACRO之后, 中间不能插有任何其它语句(含注释语句) 。10例2定义一个延时10ms宏指令delay,并且在程序中 调用实现延时20ms功能。 ;宏定义 DELAY MACRO LOCAL LOP MOVCX,2801 LOP:LOOPLOP ENDM ;宏调用: DELAY DELAY ;宏扩展:DELAY 0009 B9 0AF11 MOV CX,2801 000C E2 FE

6、1 ?0000: LOOP ?0000 DELAY 000E B9 0AF11 MOV CX,2801 0011 E2 FE1 ?0001: LOOP ?000111四、宏指令中参数的使用形式参数使宏更通用更灵活,而在宏调 用时给出实参数即可。宏指令的实参数可以是常数、寄存器、 变量、表达式、操作码或操作码的一部分 、指令或伪指令助记符等,如此多的参数 种类以及参数传递的方便性是子程序所不 能比拟的。宏指令允许嵌套。12例3定义在两个字型内存变量之间传送数据的宏指令, 并调用之。MOVEMACRO X,Y ;XY PUSHAX MOVAX,X MOVY,AX POPAX ENDM DATA S

7、EGMENT VAR1 DW 6543H VAR2 DW ? DATA ENDSMOVE VAR1,VAR2 ;宏调用 ;宏扩展 1 PUSH AX 1 MOV AX,VAR1 1 MOV VAR2,AX 1 POP AX13例4用宏指令实现清屏、设置光标、显示彩色 字符及彩色字符串功能。 ;功能:保存寄存器DX、CX、BX、AX PUSHREGMACRO PUSH DX PUSH CX PUSH BX PUSH AX ENDM ;功能:恢复寄存器AX、BX、CX、DX POPREGMACRO POP AX POP BX POP CX POP DX ENDM14;功能:清屏 CLRSCRNMA

8、CRO PUSHREG MOV AH,6 MOV AL,0 MOV BH,1FH MOV CX,0 MOV DX,184FH INT 10H POPREG ENDM 15;功能:置光标 ;入口参数:DH:DL 行,列 出口参数:无 CURSORMACRO PUSH AX PUSH BX MOV AH,2 XOR BH,BH INT 10H POP BX POP AX ENDM 16;功能:在指定位置显示指定颜色的字符 ;入口参数:X:行,Y:列,CHAR:字符,ATTRIB:颜色 ;出口参数:无 PUTCMACRO X,Y,CHAR,ATTRIB PUSHREG;宏嵌套 MOV DH,X MO

9、V DL,Y CURSOR MOV AH,09H MOV AL,CHAR MOV BH,0 MOV BL,ATTRIB MOV CX,1 INT 10H POPREG;宏嵌套 ENDM 17;功能:在指定位置显示指定颜色的字符串 ;入口参数:以$结束的字符串变量S 出口参数:无 PUTSMACRO ROW,COL,S,ATTRIB LOCAL EXIT5 LOCAL LOOP10 PUSHREG MOV DH,ROW MOV DL,COL CURSOR LEA BX,S MOV CX,8018LOOP10:MOV AL,BX CMP AL,$ JE EXIT5 PUTC DH,DL,AL,AT

10、TRIB INC DL INC BX LOOP LOOP10 EXIT5:POPREG ENDM19DATASEGMENT STR DB PRINT A STRING.$ DATA ENDS CODE SEGMENT ASSUMECS:CODE,DS:DATA MAIN PROC FAR MOV AX,DATA MOV DS,AX CLRSCRN;清屏 MOV DH,10 MOV DL,20 PUTC DH,DL,$,1EH;兰底黄 INC DH;行号加1 ;用兰底白字显示字符串PRINT A STRING. PUTS DH,DL,STR,1FH MOV AX,4C00H INT 21H MA

11、INENDP CODEENDS END MAIN20五、宏指令嵌套宏指令允许嵌套,嵌套情况有两种:n宏定义体中含有宏调用n遵循先定义后引用的原则,后边的宏定 义可以调用在它之前定义的宏指令n宏定义体中含有宏定义n只有调用了外层宏指令后才能调用内 层宏指令,因为只有调用了外层的宏后, 内层的宏定义才有效。21宏定义体中含有宏定义的宏定义、宏调 用及宏替换的例子:DMACMACROMNAME,OPER;外层宏定义 MNAMEMACRO X,Y,Z;内层宏定义 PUSH AX MOV AX,X OPER AX,Y MOV Z,AX POP AX ENDM ENDM22ADW25 BDW12 CDW?

12、 DMAC ADDITION,ADD;外层宏调用 1ADDITION MACRO X,Y,Z 1 PUSH AX 1 MOV AX,X 1 ADD AX,Y 1 MOV Z,AX 1 POP AX 1ENDM ADDITION A,B,C;内层宏调用 1 PUSH AX 1 MOV AX,A 1 ADD AX,B 1 MOV C,AX 1 POP AX 23DMAC LOGIC_AND,AND ;外层宏调用 1LOGIC_AND MACROX,Y,Z 1 PUSHAX 1 MOVAX,X 1 ANDAX,Y 1 MOVZ,AX 1 POPAXnENDM LOGIC_AND A,B,C;内层宏调

13、用 1 PUSH AX 1 MOV AX,A 1 AND AX,B 1 MOV C,AX 1 POP AX24使用适当的实参数,通过调用DMAC 宏指令可以生成另一条新的宏指令,再 调用新宏指令可以实现任何双操作数指 令的操作,而且两个操作数可以同时为 存储器操作数。这种方法使得宏的功能 更强大。25六、PURGE伪指令格式:PURGE 宏指令名, 功能:从内存中删除指定的宏指令。 七、宏操作符为使宏更灵活,汇编程序还支持宏操作符。这些操作 符不仅适用于宏指令,也适用于重复汇编伪指令。 宏操作符格式名称;注释 宏注释261操作符宏调用PUTDATA MYDATA, 5 ;宏扩展1 PD_MYD

14、ATA DB 5 JUMP宏指令JUMPMACRO COND,L J宏调用 JUMP NE,LAB1;宏扩展 1JNE LAB128在宏指令中,当使用宏定义 PUTDATA0 MACRO THENAME,THEDATALOCAL PD_宏调用 PUTDATA0 MYDATA,5 ;宏扩展 1?0000MYDATA DB 5 ;宏调用 PUTDATA0 MYDATA,8 ;宏扩展 1?0001MYDATA DB 8 297.2 宏指令库为了使宏指令能让多个程序共享,可以把 它们组织到一个文件中,并存放在磁盘上,把 这种文件称为宏指令库。 1建立宏指令库可以把一些常用的宏指令集中在一个文件中 形成

15、宏指令库,用EDIT等任何文本编辑程序创 建宏指令库,库名由用户自己起,而且对库的 扩展名没有特殊要求。库中的宏指令以源代码 形式出现。 30例如用EDIT建立一个文件名为MACRO.LIB的宏指令库,键 入以下命令:EDIT MACRO.LIB 假设MACRO.LIB中包含以下宏指令: SETMODE;设置8025彩色显示模式 INCHAR;接收一个字符,并返回在AL中 OUTCHAR X ;输出X字符 PUSHREG ;保存寄存器DX、CX、BX、AX、DI、SI、BP POPREG ;恢复寄存器BP、SI、DI、AX、BX、CX、DX31WINDOW MACRO Collor,WleftTopRow,WLeftTopCul, WRightBottomRow,WRightBottomCul ;功能:开窗口 MOVE MOCRO X,Y ;字型数据X送Y变量 CLRSCRN ;清屏 CURSOR;置光标,入口参数: DH:DL行,列号 MUL M1,M2 ;两个字型数据相乘 RETURN ;返回操作系统 BIN_DECMACRO ASC,BIN ;功能:把16位二进制数转换为十进制数的 ;ASCII值,ASC为5个字节的十进制数缓冲区,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号