新版汇编语言程序设计 宏汇编
宏汇编汇编语言
几个宏操作符的使用
%:表达式操作符:将其后面跟的表达式的值作为实参, 而不是将表达式本身作为参数,用在实参中。 &:替换操作符:用于将参数与其他字符分开。用在 宏体中。如果参数紧跟在其他字符之前或之后, 或者 参数出现在带引号的字符串中,就必须使用该伪操作 符。
宏汇编应用举例 例5-17 P148
multiply macro opr1,opr2,result
push dx push ax
; 定义宏
code segment assume
ds:data,cs:code,ss:stack start: mov ax,data
mov al,opr1 imul opr2 mov result,ax
在什么情况下使用宏?为什么要使用宏?
在汇编语言程序设计过程中,可以将具有一 定功能,需多次重复使用,且比较短的程序 段定义成一条宏指令。
使用宏指令语句可以减少程序书写错误,缩 短源程序长度,使源程序编写像高级语言一 样清晰、简洁。特别是使用宏库后,可以提 高编程效率。
比较
宏
子程序
➢ 仅是源程序级的简化: 宏调用在汇编时进行 程序语句的展开,不 需要返回;不减小目 标程序,执行速度没 有改变
5.6 宏结构程序设计
什么是宏?
宏是源程序中一段有独立功能的程序代码。 它只需在源程序中定义一次就可以多次调用它, 调用时,只需要用一个宏指令语句就可以了
宏(Macro)是汇编语言的一个特点,它是 与子程序类似又独具特色的另一种简化源程序的 方法
宏汇编
宏结构 重复汇编
新版汇编语言程序设计习题答案(钱晓捷主编)电子教案
新版汇编语言程序设计习题答案(钱晓捷主编)新版汇编语言程序设计习题答案(钱晓捷主编)第一章汇编语言基础知识1.1、简述计算机系统的硬件组成及各部分作用1.2、明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB1.3、什么是汇编语言源程序、汇编程序、目标程序?1.4、汇编语言与高级语言相比有什么优缺点?1.5、将下列十六进制数转换为二进制和十进制表示(1)FFH (2)0H (3)5EH (4)EFH(5)2EH (6)10H (7)1FH (8)ABH1.6、将下列十进制数转换为BCD码表示(1)12 (2)24 (3)68 (4)127(5)128 (6)255 (7)1234 (8)24581.7、将下列BCD码转换为十进制数(1)10010001 (2)10001001 (3)00110110 (4)10010000(5)00001000 (6)10010111 (7)10000001 (8)000000101.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示(1)0 (2)-127 (3)127 (4)-57(5)126 (6)-126 (7)-128 (8)681.9、完成下列二进制数的运算(1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001(5)1011 ∧~1011 (8)1011 ⊕ 1001 1001(6)1011 ∨1001(7)1.10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符?1.11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符?1.12、简述Intel 80x86系列微处理器在指令集方面的发展。
汇编语言第三章 宏汇编语言
第三章汇编语言指令本章的内容包括:汇编语言程序设计方法机器指令常用的DOS系统功能调用3.1汇编语言程序设计方法一.汇编语言程序设计的一般步骤:1.分析问题,选择合适的解题方法。
2.根据具体问题,确定输入输出数据的格式。
3.分配存贮区并给变量命名,包括分配寄存器。
4.绘制程序的流程图,将解题方法和步骤用程序流程图的形式表示出来。
5.根据流程图编写程序。
6.静态检查与动态调试二.汇编语言程序设计的质量要求1.结构清晰、简明、易读、易调试。
2.执行速度快。
3.占用存储空间少。
三.流程图符号说明1.起始、终止框2.判断框3.处理说明框4.子程序或过程调用框5.流向线,表示程序流向6.连接框,流程图较复杂时,连接框表示几部分之间的关系注意:●起始框一条线出,终止框一条线入●处理框和子程序框一条线入,一条线出●判断框一条线入,两根线(多条线)出●判断框中为陈述句●判断框的分支上要标明Y和N格式:[标号:]操作符OPD, OPS [;注释]注意:●OPD、OPS类型一致●OPD不能为立即数●结果在OPD,OPS内容不变●OPD、OPS不能为内存操作数如:MOV BYTE PTR[2000H], [2100H]3.2.1.数据传送指令功能:将数据、地址、立即数送入寄存器或存贮器。
这类指令有:MOV、XCHG、XLAT、LEA、LDS、LES等。
四.一般数据传送1.传送指令格式:MOV OPD, OPS功能:(OPS) →OPD。
注意:寄存器←→寄存器;立即数→寄存器、存贮器;存贮单元←→寄存器。
不能是:单元←→单元。
格式:XCHG OPD,OPS功能:(OPD)→OPS,(OPS)→OPD。
如:XCHG AX,BX若执行前:(AX)=5678H,(BX)=1234H执行后:(AX)=1234H,(BX)=5678H注意:寄存器←→寄存器,寄存器←→存贮器。
有一个必须为寄存器。
3.查表转换指令(换码指令)格式:XLAT OPS;或XLAT功能:([BX+AL])→AL,将(BX)为首址,(AL)为位移量的字节单元数据→AL。
汇编语言部分——3.宏汇编
3.2 如何定义堆栈段、数据段和代码段(参见EXP41.asm)
定义段(segment)用到的伪操作
SEGMENT与ENDS 【对位】【组合】【’类别‘】三个属性 堆栈段、数据段、代码段——三段式格式 END 标号 ASSUME 设定CS,DS,SS 程序中对SS,SP,DS的初始化 返回DOS的操作(4Ch号DOS功能调用) 五个定义要素,缺一不可
– segment_name SEGMENT PARA STACK
类别class:指明段的类别 代码段‘code’,数据段‘data’,堆栈段‘stack’
对位、组合、类别——告诉编译器,代码块之 间如何组合。
3.3 如何定义数据(变量和常量)
用到的伪指令 DB 定义字节,常用于8位数,字符,字符串 DW 定义字,数组 DD 定义双字、逻辑地址、长指针、中断向量 EQU 定义常量,求长度 用到的操作符 DUP: 定义数组 $: 注意不是“$”,代表当前位置的偏移值(地址计数器) ?:代表变量未赋初值(实际上由编译器赋初值0) 常见的算术运算符号
LINK link exp41; 产生EXE文件
DEBUG 上机调试及验证 课后需要验证的内容 1. 作业定义的数据及内存图的验证 (放入数据段定义) 2. 作业编写的指令、寻址结果、标志位的验证 (插入到代码段中)
SEGMENT
[align] [combine] [‘class’]
解释
对位align:指明段开始的边界。 通常段为小边界,参数为PARA。 组合combine:指明程序连接时,该段是否和其它的段组合在 一起(以后解释),参数为STACK, COMMON, PUBLIC 堆栈段通常定义
定义子程序(proc)用到的伪操作
宏汇编语言程序设计PPT课件
MOV ES , AX
129F:000F BF0000 MOV DI , 0000
129F:0012 B90600 MOV CX, 0006
129F:0015 F3
REP
129F:0016 A4
MOVSB
129F:0017 B44C
MOV AH, 4C
129F:0019 CD21
INT
21
、、、、、、
-U
;查看程序代码
129F:0000 FC
CLD
129F:0001 B89D12 MOV AX , 129D
129F:0004 8ED8
MOV DS , AX
129F:0006 8D360000 LEA SI ,
[ 0000 ]
129F:000A B89E12 MOV AX , 129E
129F:000D 8EC0
MOV AH, SIZE A2
汇编时形成指令
MOV CX, 200
MOV AH, 2
第21页/共92页
5). PTR 修改属性操作符
格式:类型/距离 PTR 变量或标号 功能:将PTR左边的类型属性赋给右边的变量或标号。 常用类型:BYTE、WORD、DWORD、NEAR、FAR
例:
MOV BYTE PTR [BX],10; [BX] 10H MOV WORD PTR [BX],10; [BX],[BX+1]
第15页/共92页
4). 数值返回操作符
SEG 取符号地址(变量或标号)的段地址
例 MOV AX , SEG yy
OFFSET 取符号地址(变量或标号)的偏移地址
例 MOV BX , OFFSET yy
bb yy bb cc ES:bb start :
第四章 宏汇编语言程序设计
三、关系运算符 有:EQ(相等)、NE(不等)、LT (小于)、GT(大于),LE(小于或等于)、 GE(大于或等于)。 关系运算符的两个操作数必须是数据, 例4-6 MOV AX,10H GT 16 或是同一段内的两个存储单元的地址。进行 MOV BL,6 EQ 0110B 关系运算的比较操作后,结果是一个数值, MOV CX, 12H GE 12 若结果为真,输出全1,即FFH(8位)或 由于表达式12H GE 12 为真所以汇编成: 由于表达式6 EQ 0110B为真所以汇编成: FFFFH(16位)。若结果为假,输出全0。 由于表达式10H GT CX,0FFFFH 16为假所以汇编成: MOV BL,0FFH MOV CX,1 AX,0 注意: MOV BL,1 × ×
4-2 汇编语言中的表达式
表达式由运算对象和运算符组成,在汇编时由 汇编程序对它进行运算,运算结果作为一个语句中 的操作数来使用。 ※运算对象:常数、标号或变量
※运算符:
①算术运算符 ②逻辑运算符 ③关系运算符 ④数值返回运算符 ⑤修改属性运算符 ⑥其它运算符
一、算术运算符 有:+、-、*、/、MOD(模,即取除法运算结 果之余数)、SHL(左移,左移1位相当于乘2)、 SHR(右移,右移1位相当于除以2)。 例4-2 数组ARRAY的定义如下: 所有的算术运算符均可以对数据进行运算,运 ARRAY DB 1,2,3,4,5,6,7,8 算对象与运算结果都是整数。若对地址运算,通常 TRY DB 20 两变量偏移地址之差 是在标号上加/减某一个值,例DA1+2、K2-4各表示 指令为: 一个存储单元的地址,对地址乘是没有意义的。 MOV AX,30*5 MOV CX,(TRY-ARRAY);数组长度→CX 汇编时,计算表达式形成指令为: MOV AX,150 MOV CX,8
第四章宏汇编语言程序设计
*.ASM
*.Oห้องสมุดไป่ตู้J
(3)链接得到可执行文件(解决定位错误,link.exe) *.EXE (4)调试得到功能正确的应用软件(解决逻辑错误) (以上第2~4步任何一步有错都应返回到第1步重来)
2.宏汇编源程序 汇编源程序组成 “指令”和 “伪指令”共同构成。 “指令”由8086CPU规定的;
“伪指令”说明与硬件有关的信息;
MOV DS,AX LEA SI,D1
; DS初始化为DATA
指令
;预置源数据的指针
微机原理与接口技术
MOV CX,CC+1
LODS BYTE PTR [SI] DEC CX
;预置次数
;取一个数并修改指针 ;修改次数
MOV AH,0
CLC AGAN:ADC SUM,AX LODS BYTE PTR [SI] LOOP AGAN MOV AH,4CH INT 21H CODE ENDS END BEGIN
•
1.汇编语言程序设计的特点
计算机语言优化
•
机器语言
时间,空间均优化;只有计算机才懂 • 汇编语言 时间,空间均优化;但源程序复杂 • 高级语言 时间,空间均较差;但源程序简单
1.汇编语言程序设计的特点
从计算机语言到计算机机器码
•
机器语言
直译 汇编程序 编译程序 解释程序
•
汇编语言
高级语言
机器码
• 偏移量属性
汇编后,AG 对应确定的 IP 值
• 类型属性
若标号在段内为 NEAR 类型、在段间为 FAR 类型
微机原理与接口技术
标识符
段名的属性 段基址
过程名的属性
过程的入口地址
宏汇编语言程序设计 .ppt
ENDS
END START
§4-4 程序设计方法
【 分支结构】
2.多分支
依次测试多个条件是否满足:若满足转入相应分支入口;不满足继续向下
测试,直到全部测试完。
此方法编程简单直观,但速度慢。
判定条件
例 有8个加工子程序,入口地址分别为
P1 ,P2 ,…P8 。编程实现检测键盘输入
命令,使系统分别转向8个加工子程序。
概述
一个好的程序,应该具备的特点:
程序结构模块化,程序易读,易调试及维护。 执行速度快。 占用内存空间小。
§4-4 程序设计方法
【概述】
设计汇编语言源程序的基本步骤:
⑴ 分析问题 抽象数学模型,确定实现算法。
⑵ 绘制程序流程图 粗框图 细框图。
⑶ 分配存储空间、工作单元 分配数据段、堆栈段、程序段 的位置,确定寄存器主:
§4-4 程序设计方法
P1: P2: P3:
P8: ST :
MOV INT CMP JE CMP JE … CMP JE JMP … … … … … HLT
AH, 1 21H AL, ‘1’ P1 AL, ‘2’ P2
AL, ‘8’ P8 ST
【 分支结构】
;1号功能键调用,键盘接收 ;键值为1,转1号加工子程序 ;键值为2,转2号加工子程序
MOV AH, 0
DEC AL MOV BL, AL
; AL为键值
ADD ADD MOV ADD JMP
AL, AL AL, BL BX, OFFSET BASE BX, AX BX
;偏移量=键值×3 ;基地址 ;表地址 ;转入转移指令
§4-4 程序设计方法
【 分支结构】
⑶根据关键字分支
汇编语言 宏汇编程序设计
昆明理工大学信息工程与自动化学院学生实验报告(2010 —2011 学年第 1 学期)课程名称:汇编语言程序设计开课实验室: 2010年 12 月 14 日年级、专业、班计科083 学号姓名成绩实验项目名称宏汇编指导教师教师评语教师签名:年月日一、实验要求宏指令设计1)掌握宏指令库的设计方法,并设计程序来调用其中的宏指令;2)编程实现32位二进制数除以16位二进制数,并把结果用十进制数形式显示在屏幕上。
要求采用宏指令库实现;3)观察并记录运行结果。
二、实验原理及基本技术路线图(方框原理图)使用debug进行调试。
源程序:INCLUDE MACRO.libPURGE SETMODE,INCHAR,OUTCHAR,WINDOW,MOVE,MULSTACKSG SEGMENT STACK 'S'DW 16 DUP('?')STACKSG ENDSDATA SEGMENTA DD 1234001B DW 1234C DW ?PROMPT DB 'The result is: $'ASCII DB 5 DUP(?),'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSGMAIN PROC FARMOV AX,DATAMOV DS,AXMOV DX,WORD PTR A+2MOV AX,WORD PTR ADIV BBIN_DEC ASCII,AX CLRSCRNDISP PROMPTDISP ASCIIRETURNMAIN ENDPCODE ENDSEND MAIN附:宏库MACRO.libSETMODE MACROPUSH AXMOV AH, 0MOV AL, 3INT 10HPOP AXENDMINCHAR MACROPUSH AXMOV AH,1INT 21HPOP AXENDMOUTCHAR MACRO XPUSH DXPUSH AXMOV DL,XMOV AH,2INT 21HPOP AXPOP DXENDMPUSHREG MACROPUSH DXPUSH CXPUSH BXPUSH AXPUSH DIPUSH SIPUSH BPENDMPOPREG MACROPOP BPPOP SIPOP DIPOP AXPOP BXPOP CXPOP DXENDMWINDOW MACRO Collor,WleftTopRow,WLeftTopCul, WRightBottomRow,WRightBottomCulPUSHREGMOV AH ,6MOV AL ,0MOV BH ,CollorMOV CH ,WleftTopRowMOV CL ,WLeftTopCulMOV DH ,WRightBottomRowMOV DL ,WRightBottomCulINT 10HPOPREGENDMMOVE MACRO X,YPUSH AXMOV AX,XMOV Y,AXPOP AXENDMCLRSCRN MACROPUSHREGMOV AH,6MOV AL,0MOV BH,1FHMOV CX,0MOV DX,184FHINT 10HPOPREGENDMCURSOR MACROPUSH AXPUSH BXMOV AH,2XOR BH,BHINT 10HPOP BXPOP AXENDMMUL MACRO M1,M2PUSH AXPUSH BXPUSH DXMOV AX,M1MOV BX,M2MUL BXPOP DXPOP BXPOP AXENDMRETURN MACROPUSH AXMOV AX, 4C00HINT 21HPOP AXENDMBIN_DEC MACRO ASC,BIN LOCAL LOPLOCAL EXITPUSHREGLEA DI, ASC ADD DI, 5MOV AX, BIN MOV BX, 10 LOP: MOV DX, 0CMP AX, 0JE EXITDIV BXADD DL, 30HDEC DIMOV [DI],DLJMP LOPEXIT: POPREGENDMDISP MACRO ASCPUSH DSPUSH DXPUSH AXLEA DX, ASCMOV AH, 9INT 21HPOP AXPOP DXPOP DSENDM三、所用仪器、材料(设备名称、型号、规格等)Masm 6.0,debug。
第03章 汇编语言程序设计5_宏汇编
宏
子程序
宏与子程序具有各自的特点, 宏与子程序具有各自的特点,程序员应该根据具 体问题选择使用那种方法 通常,当程序段较短或要求较快执行时, 通常,当程序段较短或要求较快执行时,应选用 当程序段较长或为减小目标代码时, 宏;当程序段较长或为减小目标代码时,要选用子 程序
宏的实例2 宏的实例2
dispmsg
macro message mov ah,9 lea dx,message int 21h endm … dispmsg string … mov ah,9 lea dx,string int 21h
;;宏定义 宏定义 ;;宏定义体 宏定义体
;宏调用(宏指令) 宏调用(宏指令) 宏调用 ;宏展开 宏展开
宏与子程序的比较 比较
宏
仅是源程序级的简化 : 仅是源程序级的 简化: 宏 简化 在汇编时进行程序语 调用在汇编时 调用 在汇编时 进行程序语 句的展开, 不需要返回; 句的展开 , 不需要返回 ; 不减小目标程序, 不减小目标程序 , 执行速 度没有改变 通过形参、 通过形参 、 实参结合实现 参数传递, 简捷直观、 参数传递 , 简捷直观 、 灵 活多变
子程序
还是目标程序级的简化 : 还是目标程序级的 简化: 简化 子程序调用在执行时由 CALL指令转向 RET指令返 指令转向、 CALL指令转向、RET指令返 形成的目标代码较短, 回 ; 形成的目标代码较短 , 执行速度减慢 需要利用寄存器、 需要子程序的比较结论 比较 结论
1. 宏定义
宏定义由一对宏汇编伪指令 宏定义 由一对宏汇编伪指令MACRO和 ENDM来 和 来 由一对宏汇编伪指令 完成,格式如下: 完成,格式如下: 形参表] 宏名 MACRO [形参表 形参表 …… ;宏定义体 ENDM 其中宏名是符合语法的标识符, 其中宏名是符合语法的标识符 , 同一源程序中该 名字定义唯一。宏定义体中不仅可以是硬指令序 名字定义唯一 。 宏定义体 中不仅可以是硬指令序 列,还可以是伪指令语句序列 可选的形参表给出了宏定义中用到的形式参数, 可选的形参表给出了宏定义中用到的形式参数 , 每个形式参数之间用逗号分隔
宏汇编程序设计
5. 1 编制汇编语言程序的步骤
1 . 将实际问题抽象为数学模型。 2 . 确定算法。 3 . 程序模块设计,确定确定各模块间的接 口(通信)。 4 . 画出流程图。 5 .编制程序(包括设置常量、变量,分配 工作区和工作单元。 6 .上机调试。
5. 1 编制汇编语言程序的步骤(续1)
上机调试的步骤: 生成目标程序(宏汇编): MASM <源程序名> ;;; 生成可执行程序(连接): LINK <目标程序名> ;
5. 6循环程序设计(续1 )
lp2: mov si , cx lea bx , arr lp1: mov al , [bx] cmp al,[bx+1] jge zy1 xchg al, [bx+1] mov [bx], al zy1: inc bx loop lp1 mov cx , si loop lp2 mov ah , 09h lea dx ,arr int 21h mov ah , 4ch int 21h ret code ends end start
4. 3ቤተ መጻሕፍቲ ባይዱ2 代码段(续1)
标号
⋮ AGAIN: MOV AX , BX ⋮ JNZ AGAIN ⋮ CODE ENDS END START
;JNZ:不等于转移
;代码段结束 ;指明程序开始地址
4. 3.3堆栈段和附加段
3.堆栈段:设置堆栈
例:
STACK SEGMENT DZH DB 100DUP(?) STACK ENDS 4.附加段:作用同数据段。一般用于串操
4. 3.1 数据段
DA5 DW ? ;变量,两个字节,初始值未定 DA6 DD ? ;常量,四个字节,初始值未定 DA7 DB 100 DUP(0) ;定义缓冲区、表, ;100个字节,初值 ; 为零 DA8 DB 100 DUP(?) ;定义缓冲区、表, ; 100个字节初值 ;未定
【4-1】宏汇编语言程序设计 (NXPowerLite)
AL,NOT 0FFH BL,8CH AND 73H AH, 8CH OR 73H CH,0110 0100B SHR 2
汇编时,计算表达式形成指令为:
MOV MOV MOV AL,0 BL,0 AH,0FFH CH,0FFH PORT DX, PORT AND 0FEH ;PORT为输入端口号 ;DX为输出端口号
MOV MOV AX, 0500H DX, AX
§4-1
3.TYPE
MASM中的表达式
MOV
例 IN AND
OUT
DX, AX
§4-1
例
MASM中的表达式
MOV MOV MOV MOV MOV MOV MOV AL,NOT 0FFH BL,8CH AND 73H AH, 8CH OR 73H DH,0110 0100B SHR 2 AL,0 BL,0 AH,0FFH CH,0FFH
§4-1 汇编语言程序格式
2.变量
【数据项】
变量通常指存放在存储单元中的值,程序运行中可以修改。所有的变量
都具有三个属性。 ⑴段值(SEGMENT):变量所在段的段基址。 ⑵段内偏移地址(OFFSET):指变量所在地址与所在段首地址之间的地 址偏移字节数。 ⑶类型(TYPE):指变量中每个元素所包含的字节数,类型有字节变量 (BYTE)、字变量(WORD)、双字变量(DWORD)等。
【概述】
MASM的表达式中的运算符(2)
名称
相等 不等 小于 小于等于 大于 大于等于 返回偏移地址 返回段基址 返回元素字节数 返回变量单元数 返回变量总字节数
运算结果
结果为真输出全“1” 结果为假输出全“0”
关系运算符
数值返回
偏移地址 段基址 字节数 单元数 总字节数
宏汇编语言程序设计
第3章宏汇编语言程序设计3.1 教学要求·熟悉汇编语言程序的结构及其语句的结构。
·熟悉伪指令及其功能。
·掌握汇编语言结构化程序设计方法,即顺序结构、分支结构和循环结构的设计。
·熟悉过程(子程序)和宏指令的定义及使用规则。
·熟悉DOS调用功能及其规则。
3.2 内容提要3.2.1 汇编语言的语句结构汇编语言程序是由语句组成的。
语句的格式如下[名称[:]] 操作助记符操作数[,操作数][;注释]汇编语言语句的分成包含名称、操作助记符、操作数、注释四个域。
语句格式“[ ]”中的内容为可选项,根据实际情况而使用。
1. 操作助记符域操作助记符域是指令中唯一不可缺少的部分,由指令、伪指令或宏指令构成。
(1)指令指令是计算机可以执行的基本操作,汇编时可以转换为机器代码。
操作助记符为指令的语句称为指令语句,每条指令语句在执行时都对应一条机器指令。
例如MOV、ADD、SUB 等皆为指令。
(2)伪指令伪指令是在汇编语言源程序中使用的指令,用来定义段、定义数据、分配存储器、指示程序结束等。
伪指令语句只在汇编语言源程序中使用,不会转换成机器代码,机器不能执行。
例如,SEGMENT、DB、END等皆是伪指令。
(3)宏指令宏指令是由用户自己定义的指令。
2. 名称域名称包括标号和变量。
名称在汇编语言源程序中定义和使用,名称应以字母开头,后跟若干字母、数字或特殊符号(“_”、“.”、“?”、“$”、“@”)组成,符号个数不超过31个。
(1)标号标号在代码段中定义和使用,标号后面需要加“:”号,例如“START:”。
标号用来表示代码段中某条语句的地址,因此也称为代码的符号地址。
利用标号可以方便实现程序的转移和循环的控制。
标号有段属性、偏移属性和类型属性。
段属性代表定义标号的段地址;偏移属性代表标号的偏移地址;类型属性代表标号的使用范围,NEAR类型属性的标号只能在段内使用,而FAR类型属性的标号可以在不同段之间使用。
汇编语言程序设计-宏汇编重复汇编
第七章 高级汇编语言技术
宏嵌套
可以用已经定义的宏指令来定义另一个宏指令,也就是说,宏指 令可以嵌套定义。
宏调用: (必须先定义后调用)
macro_name [实元表]
; 实参
宏展开:汇编程序把宏调用展开
宏定义体 复制到宏指令位置,实参代虚参 LOCAL中的标号 ??0000~??ffff
第七章 高级汇编语言技术
例:保存寄存器
宏定义: savereg
MACRO push push push push push push ENDM
高级汇编语言技术
宏展开:
1 1 1 1 …… cmp jge neg ??0000: …… …… cmp jge neg ??0001: …… var,0 ??0000 var
next:
宏调用:
…… absol …… absol ……
var bx
1 1 1 1
bx,0 ??0001 bx
主程序: … CALL ---… CALL ---… CALL ---…
第七章 高级汇编语言技术
7.2.2 使用IRP伪指令的重复汇编结构
格式:IRP 形参,<实参表> 重复体 ENDM 功能:使汇编程序对重复体作重复汇编,每作一次 汇编就依次将实参表中的一个实参取代重复体中的 形参。(重复次数就等于实参表中实参的个数)
第七章 高级汇编语言技术 设有重复汇编结构如下: IRP REG, <AX,BX,CX,DX> 其结果等价于: PUSH REG PUSH AX PUSH BX ENDM PUSH CX 汇编程序在汇编时将对重复体 PUSH DX PUSH REG 重复汇编4次,且分别用实参AX,BX,CX及 DX取代形参REG。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成功学院信工系
张莉
宏调用
宏名 [实参表]
.model small .stack 宏调用的实质是在 .data 汇编过程中进行宏 msg db "Hello, world!",0dh,0ah,"$" 展开 .code 宏展开的具体过程 dispmsg macro message 是:当汇编程序扫 mov dx, offset message 遇 到 已 有 描源程序 mov ah, 9 定义的宏调用时, int 21h 即用相应的宏定义 endm 体取代源程序的宏 .startup 指令,同时用位置 dispmsg msg 匹配的实参对形参 进行取代 .exit 0 end 成功学院信工系 张莉
成功学院信工系
张莉
用宏指令shrot扩展移位和循 环移位功能
;统一移位和循环移位8条指令的宏指令 shrot macro sroprand,srnum,sropcode push cx mov cl,srnum sropcode sroprand,cl pop cx endm
成功学院信工系
张莉
宏
第11讲 宏汇编结构程序设计
熟悉宏的定义与调用方法
理解宏的特点,能够区分宏与子程序的不同
成功学院信工系
张莉
第11讲 宏汇编结构程序设计
宏(Macro)是汇编语言的一个特点,它是与子 程序类似又独具特色的另一种简化源程序的方法
宏——具有宏名的一段汇编语句序列
——宏定义时书写 宏指令——这段汇编语句序列的缩写 ——宏调用时书写 宏展开——宏指令处用这段宏代替的过程 ——宏汇编时实现
少次,目标代码只在最终执行的程序中出现一次。
成功学院信工系
张莉
宏
(4)执行速度不同。
比较
子程序
子程序调用要执行CALL和RET指令,并进行参数传递,
执行速度稍慢。 (5)参数处理不同。
宏调用是实参代替形参,参数的形式不受限制,可以是指
令助记符、寄存器名、标号等,而子程序的参数传递必须 有确切的存放地。
(1)处理时间不同
比较
子程序
宏调用在源程序被汇编时由汇编程序处理,子程序被调用
时在程序执行期间由CPU直接执行。 (2)处理方式不同。
宏必须先定义后使用,宏调用是用宏体替换宏调用伪指令
,实参代替形参,而子程序调用没有这样的替换操作。 (3)目标代码长度不同。
宏调用要进行宏展开,目标代码长,而子程序无论调用多
成功学院信工系
张莉Biblioteka 用宏指令shift扩展SHL、SHR 、SAL、SAR功能
;统一4条移位指令的宏指令 shift macro soprand,snum,sopcode push cx 替换操作符 mov cl,snum s&sopcode& soprand,cl pop cx endm
;宏调用 Shift ax,6,hl
宏展开
宏展开——在汇编时,用宏定义体的代码序列替代 宏指令的过程。
宏调用 宏展开
成功学院信工系
张莉
用宏指令shlext扩展逻辑左 移SHL功能
;宏定义 ;宏指令 shlext macro shloprand,shlnum shlext ax,6 push cx ;宏展开 mov cl,shlnum 1 push cx shl shloprand,cl 1 mov cl,06 pop cx 1 shl ax,cl endm 1 pop cx
成功学院信工系
张莉
宏定义
dispmsg
宏名 macro [形参表] 宏定义体 endm
MACRO message 以是硬指令序列,又可以是伪指令序列
宏定义体可以是任何合法的汇编语句,既可
;;定义名为dipmsg的宏,带有形参message
mov dx,offset message ;;宏定义体 宏定义时,可以无参数,可以带有一个参数, mov ah,09h 也可以具有多个参数 int 参数可以是常数、变量、存储单元、指令(操 21h 宏注释符 作码)或它们的一部分,也可以是表达式 ENDM ;;宏定义结束
成功学院信工系
张莉
宏
比较 结论
子程序
宏与子程序具有各自的特点,程序员应该根据具体问题
选择使用那种方法
通常,当程序段较短或要求较快执行时,应选用宏;当
程序段较长或为减小目标代码时,要选用子程序
成功学院信工系
张莉