




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第1 1页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术 第第13章章 高级宏汇编语言技术高级宏汇编语言技术 13.1 结构结构 13.2 记录记录 13.3 宏汇编宏汇编 13.4 重复汇编重复汇编 11.5 条件汇编条件汇编第第2 2页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术 13.1 结构结构 MASM支持结构,其直接引用高级语言的结构数据概念。支持结构,其直接引用高级语言的结构数据概念。 13.1.1 结构的定义结构的定义 结构名结构名 STRUC 结构名结构名 ENDS【例】【例】 定
2、义一个与时间有关的结构。定义一个与时间有关的结构。TIMERS STRUC YEAR_STR DB CURRENT DATE:,$ YEAR DW ? MONTH DB ? DAY DB ? TIME_STR DB CURRENT TIME:,$ HOUR DB ? MINUTE DB ? SEC DB ?TIMERS ENDS第第3 3页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术13.1.2 结构的预置与存储单元的分配结构的预置与存储单元的分配 结构变量预置语句的格式:结构变量预置语句的格式: 结构变量名结构变量名 结构名结构名 【例】【例】
3、 TIMERS结构进行引用。结构进行引用。 STR1 TIMERS STR2 TIMERS 所有字段都不修改。所有字段都不修改。修改前两个字段。修改前两个字段。注意注意:只有简单结构字段(用:只有简单结构字段(用DB、DW、DD定义的单项变量)和字定义的单项变量)和字符串字段的初值可以修改。符串字段的初值可以修改。第第4 4页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术13.1.3 结构变量使用举例结构变量使用举例 【例】【例】 写一个程序,获取系统日期和时间,并显示。写一个程序,获取系统日期和时间,并显示。TIMERS STRUC DATE_S
4、TR DB The current date is : ,$ YEAR DW ? MONTH DB ? DAY DB ? TIME_STR DB The current time is ,$ HOUR DB ? MINUTE DB ? SEC DB ?TIMERS ENDS第第5 5页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术INCLUDE USER.MAC DISP_T MACRO X ;以十进制输出字节内容 DISP_CHAR : MOV AL,X MOV AH,0 MOV BX,10 CALL NUM_DECENDMDATA SEGMEN
5、T TIMES TIMERS DATA ENDS第第6 6页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX,DATA MOV DS,AX CALL GET_DATE ;获取系统日期 CALL DISP_DATE ;显示系统日期 CRLF ;回车换行 CALL GET_TIME ;获取系统时间 CALL DISP_TIME ;显示系统时间 MOV AX,4C00H INT 21H 第第7 7页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级
6、宏汇编语言技术高级宏汇编语言技术GET_DATE PROC NEAR ;取系统日期 MOV AH,2AH INT 21H MOV TIMES.YEAR,CX ;年信息 MOV TIMES.MONTH,DH ;月 MOV TIMES.DAY,DL ; 日 RETGET_DATE ENDP GET_TIME PROC NEAR ;取系统时间 MOV AH,2CH INT 21H MOV TIMES.HOUR,CH MOV TIMES.MINUTE,CL MOV TIMES.SEC,DH RETGET_TIME ENDP 第第8 8页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编
7、语言技术高级宏汇编语言技术DISP_DATE PROC NEAR ; 显示系统日期 DISP_STR TIMES.DATE_STR MOV AX,TIMES.YEAR MOV BX,10 CALL NUM_DEC ;输出年份 DISP_T TIMES.MONTH ;输出月 DISP_T TIMES.DAY ;输出日 RETDISP_DATE ENDP 第第9 9页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术DISP_TIME PROC NEAR ; 显示系统时间 DISP_STR TIMES.TIME_STR DISP_T TIMES.HOUR
8、DISP_T TIMES.MINUTE DISP_T TIMES.SEC RETDISP_TIME ENDPINCLUDE NUM_DEC.ASMCODE ENDS第第1010页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术宏汇编的意义:宏汇编的意义:避免了重复编写,使源程序更加简洁、易读。避免了重复编写,使源程序更加简洁、易读。 13.3.1 13.3.1 宏功能的使用过程宏功能的使用过程1.宏定义 宏指令宏指令:将在源程序中多次使用到同一个程序段定义成一个将在源程序中多次使用到同一个程序段定义成一个“指令指令”格式不带参数 宏名 MACRO 宏
9、体 ENDM带参数 宏名 MACRO 形参1,形参2,. 宏体 ENDM不可缺省,不可缺省,且名字唯一且名字唯一语句序列语句序列【例】【例】对两个存储单元(字节/字)的内容相互交换的程序段进行宏定义:EXCHANGE MACROMACRO MEM1,MEM2,REGMOV REG,MEM1XCHG REG,MEM2MOV MEM1,REGENDMENDM 形参形参13.3 宏汇编宏汇编第第1111页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术2.2.宏调用宏调用含义:用宏指令名来代替原来的程序段 格式不带参数 宏名带参数 宏名 实参1,实参2,.
10、 数字,符号名等。第第1212页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术3.3.宏展开宏展开含义:宏汇编程序在汇编源程序时自动用宏指令的内容代替宏指令 注意:注意:宏指令的使用不会减少程序的目标代码长度 【例】【例】宏指令使用的过程:;宏定义 PUSH4 MACROMACRO PUSH AX PUSH BX PUSH CX PUSH DX ENDMENDM EXCHANGE MACRO MEM1,MEM2,REG MOV REG,MEM1 XCHG REG,MEM2 MOV MEM1,REG ENDMENDM;设置数据段DATASEGMENT
11、DA_W01DW 1234HDA_W02DW 5678HDATAENDS;设置堆栈段STACK1 SEGMENT PARA STACKDW 20H DUP(?)STACK1ENDS;设置代码段COSEG SEGMENT ASSUME CS:COSEG,DS:DATA,SS:STACK1START:MOV AX,DATA MOV DS,AX PUSH4 ;宏指令语句 + PUSH AX + PUSH BX + PUSH CX + PUSH DX EXCHANGE DA_W01,DA_W02,CX ;宏指令语句 + MOV CX, DA_W01 + XCHG CX, DA_W02 + MOV DA
12、_W01,CX COSEG ENDS END START第第1313页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术 1.连接操作符连接操作符& 13.3.2 宏操作符宏操作符含义:宏展开时,对应形参的实参就与它前后的符号连接在一起用途:修改某些符号【例】【例】连接符连接符&的使用的使用: :SHIFT_VAR MARCO R_M,DIRECT,COUNT MOV CL,COUNT S&DIRECT R_M, CL ENDMSHIFT_VAR AX,HL,2的宏展开为:的宏展开为:+ MOV CL,2+ SHL AX,CL
13、SHIFT_VAR BX,HR,3的宏展开为:的宏展开为: + MOV CL,3 + SHR BX,CL第第1414页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术 2.表达式操作符表达式操作符%含义:告诉宏汇编程序获取表达式的值,而不是获取表达式文本本身 格式:%表达式 注意:注意:这个操作符一般是出现在宏调用中,不允许出现在形参的前面。 【例】【例】表达式%的使用:;宏定义SHIF0 MACRO CNT MOV CL,CNT ENDMSHIF1 MACRO REG,DIRECT,NUM COUNT=NUM SHIF0 %COUNT S&
14、DIRECT REG,CL ENDM ;宏调用 SHIF1 AX,HL,2 SHIF1 BL,AR,3;宏展开 SHIF1 AX,HL,2 + MOV CL,2 + SHL AX,CL SHIF1 BL,AR,3 + MOV CL,3 + SAR BL,CL第第1515页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术3.文本操作符文本操作符含义:把一个完整的实参括起来,作为一个单一的实参 。【例】【例】:EXCHANGE ,AL 宏展开时,替换的三条指令是: MOV AL,BYTE PTR DA_WORD1 XCHG AL,BYTE PTR DA_
15、WORD2 MOV BYTE PTR WORD1,AL 注意注意: :文本操作符还可以用来处理某些特殊字符:如“;”和“&”。 【例】【例】:就表示一个分号“;”的实参,而不是注释符。 第第1616页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术4.字符操作符!字符操作符! 含义: “!” 后的字符不作特别的操作符使用,而是以字符本身的意义进行处理。如: “!&” 表示 & 不作连接操作符用,只作符号 & 使用。“!%” 表示 % 不作表达式操作符使用,只作百分号用。 【例】【例】字符操作符!的使用字符操作符!的使用
16、:;宏定义:;宏定义: PROMPT MACRO NUM ,TEXT PROMP&NUM DB & TEXT & ENDM宏调用:宏调用:PROMPT 23, 255宏展开:宏展开:PROMP23 DB Expression 2555.5.宏注解符;宏注解符; 含义:说明后面的文本是注解。第第1717页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术13.3.3 LOCAL伪指令伪指令意义:在宏定义中使用变量名和标号,为了避免在宏展开时产生多个相同的变量名或标号。 格式格式: LOCAL 在宏定义中定义的变量名和标号,在宏定义
17、中定义的变量名和标号,多个符号之间用逗号间隔多个符号之间用逗号间隔 注意注意:宏展开时,LOCAL伪指令指定的变量、标号自动生成格式为“??” 的符号,其中后四位顺序使用0000FFFF的十六进制数字。 第第1818页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术【例】【例】用连续相加的办法实现无符号数乘法运算,编制宏定义MULTIPMULTIP MACRO MULT1,MULT2,MULT3 LOCAL LOP,EXIT0 MOV DX,MULT1 ;乘数1 MOV CX,MULT2 ;乘数2 XOR BX,BX XOR AX,AX JCXZ E
18、XIT0 LOP:ADD BX,DX ADC AX,0 LOOP LOP EXIT0:MOV MULT3,BX MOV MULT3+2,AX ENDM设某数据段有如下定义的变量: DA1 DW 1234H,5678H DA2 DW 120H,210H DA3 DW 4 DUP(?)在代码段中:如有两次宏调用,则两次的宏展开如下: MULTIP DA1,DA2,DA3MULTIP DA1,DA2,DA3+ MOV DX,DA1+ MOV CX,DA2+ XOR BX,BX+ XOR AX,AX+ JCXZ ? 0001? 0001 +?00000000:ADD BX,DX+ ADC AX,0+
19、LOOP ?0000?0000 +?00010001:MOV DA3,BX+ MOV DA3+2,AX MULTIP DA1+2,DA2+2,DA3+4MULTIP DA1+2,DA2+2,DA3+4+ MOV DX,DA1+2+ MOV CX,DA2+2+ XOR BX,BX+ XOR AX,AX+ JCXA ?00030003 +?0002:ADD BX,DX ADC AX,0 LOOP ?00020002 +?0003:MOV DA3+4,BX+ MOV DA3+6,AX第第1919页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术13.3.4
20、 宏嵌套宏嵌套1.1.宏定义嵌套宏定义嵌套含义:一个宏定义中包含另一个宏定义 【例】【例】嵌套的宏定义: JUMP MACRO COND ;外层宏定义 J&COND&S MACRO DEST ;内层宏定义 LOCAL NEXT,EXIT J&COND NEXT JMP EXIT NEXT:JMP DEST EXIT ENDM ENDM应用:常常用这种宏定义嵌套来产生一些新的宏定义 例如外层宏调用为: JUMP E JUMP NE JUMP G JUMP GE分别形成内层宏定义的宏名:JES,JNES,JGS,JGES。 如有两个条件转移的目标地址分别是SUB1和SUB2
21、,这时内层宏调用为: JES SUB1 ;等于0转移 JGES SUB2 ;大于或等于0转移 当宏汇编程序对内层宏展开后,得如下结果: JE ? 0000 JMP ? 0001? 0000:JMP SUB1? 0001: JGE ? 0002 JMP ? 0003 ?0002:JMP SUB2 ?0003: 第第2020页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术 2.2.宏定义内嵌套宏调用宏定义内嵌套宏调用 含义:在一个宏定义的宏体内有宏调用 注意:被调用的宏指令必须是已定义的 【例】【例】SHIFT是对32位数左移一位的宏定义,其中NUM1
22、是高16位数,NUM2是低16位数。MULT12是对一个32位数乘以12的宏定义,其中M_R1是存放高16位数的存储单元或寄存器,M_R2是存放低16位数的存储单元或寄存器。在乘法的过程中,要使用寄存器暂存32位数,REG1和REG2就是指定用来暂存数据的两个寄存器。在MULT12的宏定义中,当需要对32位数进行左移时,就调用SHIFT的宏定义。 现有两个宏定义:SHIFT MACRO NUM1,NUM2 SAL NUM2,1 RCL NUM1,1 ENDMMULT12 MACRO M_R1,M_R2,REG1,REG2 PUSHF PUSH REG1 PUSH REG2 SHIFT M_R1
23、,M_R2 某数据段已定义变量: DA_WORD DW 123H ,456H 程序中可以编写宏指令语句: MULT12 DA_WORD+2,DA_WORD,AX,BX MULT12 AX,BX,CX,DX SHIFT M_R1,M_R2 MOV REG1,M_R1 MOV REG2,M_R2 SHIFT M_R1,M_R2 ADD M_R2,REG2 ADC M_R1,REG1 POP REG2 POP REG1 POPF ENDM第第2121页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术13.3.5 宏程序库宏程序库含义:若干个宏定义以文件的形
24、式组成一个宏库,供其他源程序使用。 调用:在新编制的源程序中使用INCLUDE伪指令 宏指令与子程序的区别宏指令与子程序的区别 相同点:(1)简化源程序的书写。 (2)节省编程工作量。不同点: (1)宏指令并不节省目标程序,子程序节省目标代码和存储空间 (2)宏指令的功能灵活,执行速度快;子程序的灵活性差些,执行 速度也不如宏指令快 第第2222页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术【例12-10】用IRP重复汇编伪指令定义一个保存寄存器信息的宏定义: PUSHREG MACRO TEXT IRP REG, PUSH REG ENDM E
25、NDM【例】【例】用重复汇编可以在9*9个字节存储单元中存放一个乘法九九表的数值: N=0 REPT 9 N=N+1 M=0 REPT 9 M=M+1 DB N*M ENDM ENDM 13.4 重复汇编重复汇编类型REPT伪指令 格式:REPT 表达式 ENDM重复语句序列 含义:将重复语句序列重复汇编,表达式的值为重复汇编的次数。 重复汇编语句序列等效:DB 1,2,3,4,5,6,7,8,9DB 2,4,6,8,10,12,14,16,18DB 3,6,9,12,15,18,21,24,27DB 4,8,12,16,20,24,28,32,36DB 5,10,15,20,25,30,35
26、,40,45DB 6,12,18,24,30,36,42,48,54DB 7,14,21,28,35,42,49,56,63DB 8,16,24,32,40,48,56,64,72DB 9,18,27,36,45,54,63,72,81IRP伪指令 格式: IRP 形参, ENDM 含义:将重复语句序列重复汇编,次数由实参个数所决定。 重复语句序列IRPC伪指令 格式: IRPC 形参,字符串 ENDM 含义:将重复语句序列重复汇编,次数由字符串中字符个数决定重复语句序列对上述宏定义的宏调用: PUSH REG 在汇编源程序时,宏展开可得: + PUSH AX + PUSH BX + PUSH CX + PUSH DX对上述宏定义的宏调用: POPREG DCBA在汇编期间,宏展开可得:+ POP DX+ POP CX+ POP BX+ POP AX例:编制一个用IRPC伪指令从堆栈中恢复寄存器内容的宏定义: POPREG MACRO STRING IRPC REG,STRING POP REG&X ENDM ENDM 第第2323页页 汇编语言程序设计汇编语言程序设计 第第 13 章章 高级宏汇编语言技术高级宏汇编语言技术13.5 条件汇编条件汇编含义:汇编程序根据条件的不同汇编不同的程序段。 格式:IFIF 表达式 ; 为条
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文化遗产数字化保护与智慧社区建设的技术路径分析
- 2025年智能停车场系统与城市公共交通衔接评估报告
- 2025年风电行业市场前瞻:技术创新引领风电行业技术创新报告
- 农业物联网在2025年精准种植中的智能灌溉系统应用案例研究报告
- 2025爆炸押运证试题及答案
- 2025年事故反思考试题库及答案
- 2025年初级经济师专业实务考试真题卷含答案(运输经济)
- 2025污水考试试题及答案
- 2025年体育学科职称试题及答案
- 党建与新质生产力建设
- 酒店客户服务质量提升培训课件
- GB/T 9258.2-2025涂附磨具用磨料粒度组成的检测和标记第2部分:粗磨粒P12~P220
- 2025山西太原西山生态文旅投资建设有限公司及子公司招聘13人笔试参考题库附带答案详解
- 2025 年小升初吕梁市初一新生分班考试语文试卷(带答案解析)-(部编版)
- 2025秋全体教师大会上,德育副校长讲话:德为根,安为本,心为灯,家为桥-这场开学讲话,句句都是育人的方向
- 数控铣床实训安全教育
- GB/T 16288-2024塑料制品的标志
- 人教统编版五年级上册道德与法治全册教学课件
- 口腔牙体牙髓病学第四章龋病的治疗课件
- 危险化学品分类信息表(全)2828项
- 93抗战胜利阅兵之爱国主义主题班会PPT课件-纪念伟大的民族胜利、传承不屈的民族精神
评论
0/150
提交评论