汇编语言入门教程PPT-第七章 宏定义
合集下载
宏汇编汇编语言
宏的参数形式灵活多变,可以是常数、变量、存储单元、指 令操作码或它们的一部分,也可以是表达式,使用灵活多变 的参数,同一个宏定义甚至可以执行不同的操作。
几个宏操作符的使用
%:表达式操作符:将其后面跟的表达式的值作为实参, 而不是将表达式本身作为参数,用在实参中。 &:替换操作符:用于将参数与其他字符分开。用在 宏体中。如果参数紧跟在其他字符之前或之后, 或者 参数出现在带引号的字符串中,就必须使用该伪操作 符。
宏汇编应用举例 例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)是汇编语言的一个特点,它是 与子程序类似又独具特色的另一种简化源程序的 方法
宏汇编
宏结构 重复汇编
几个宏操作符的使用
%:表达式操作符:将其后面跟的表达式的值作为实参, 而不是将表达式本身作为参数,用在实参中。 &:替换操作符:用于将参数与其他字符分开。用在 宏体中。如果参数紧跟在其他字符之前或之后, 或者 参数出现在带引号的字符串中,就必须使用该伪操作 符。
宏汇编应用举例 例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)是汇编语言的一个特点,它是 与子程序类似又独具特色的另一种简化源程序的 方法
宏汇编
宏结构 重复汇编
汇编语言的基本语法ppt
举例:已有数据定义如下:
TWO_BYTE DW ? 可以用以下语句对这两个字节赋予另一种
类型定义:
ONE_BYTE EQU BYTE PTR TWO_BYTE 这里ONE_BYTE与TWO_BYTE两个符号
地址具有相同得段地址与偏移地址,但就是它们 得类型属性不同,前者为1,后者为2。
此外,有时指令要求使用PTR操作符。例如 用 MOV [BX], 5
OR ((PORT_VAL GE 5) AND 30) 则当PORT_VAL < 5时,汇编结果应该就是:
MOV BX, 20 否则,汇编结果应该就是:
MOV BX, 30
(4) 数值回送操作符 数值回送操作符有:TYPE、
LENGTH、SIZE、OFFSET、SEG等。 数值回送操作符把一些特征或存储
例如,用段前缀指定某段得地址操作数 MOV AX,ES:[BX + SI]
·SHORT 用来修饰JMP指令中转向地址得属性,指
出转向地址就是在下一条指令地址得±127个 字节范围之内。
例如: JMP SHORT TAG ;转移属性为短转移 、 、 、
TAG: MOV、、、
·THIS 格式为: THIS 属性或类型 THIS可以象PTR一样建立一个指定
又例如: MOV CX, SIZE TABLE
将形成为 MOV CX, 1。
·OFFSET 格式为:OFFSET 变量或标号 汇编程序将回送变量或标号得偏移地址值。
举例: MOV BX, OFFSET OPER_ONE
汇编程序将OPER_ONE得偏移地址作为 立即数回送给指令,而在执行时则将该偏移地址 装入BX寄存器中。所以这条指令得功能与指 令
汇编语言的基本语法
宏汇编语言程序设计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 :
第七章 Win32汇编语言-IA-32ASM高级编程
计算机学院信息安全系
mov ecx,100 xor eax,eax lea ebx, array .repeat .if sword ptr [ebx] >= 0 add eax,[ebx] .else .break .endif inc ebx inc ebx .untilcxz mov result, eax
2012-6-10
; sum3.asm .386 .model flat, stdcall
.code sum3 proc v1, v2, v3 mov eax, v1 add eax, v2 add eax, v3 ret sum3 endp end ;不上述文件相似
10
;调用库测试: ;Test33_2.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib
计算机学院信息安全系
求1~100乊和 ;WHILE结构 xor eax, eax mov ecx,100 .while ecx!=0 add eax,ecx dec ecx .endw mov sum,eax ;UNTIL结构 xor eax, eax mov ecx,100 .repeat add eax,ecx dec ecx .until ecx==0 mov sum,eax
2012-6-10
21
宏的定义
MACRO和ENDM是成对出现的关键字,分别表示宏定义的 开始和结束;
10讲:宏汇编、C语言调用汇编
3
宏定义可以带参数: 例: SHIFT1 MACRO X,Y MOV CL, X SAL Y,CL ENDM 调用时: SHIFT1 2, BX;BX算术左移2位. 例: SHIFT2 MACRO X,Y,Z MOV CL, X S&Z Y,CL ENDM 调用时: SHIFT2 2, SI,HR;SI逻辑右移2位源自*作业6:P124:题3-2,
22
8.数据返回C程序时,类型不同,使用的寄 存器不同,见表3-6. 例: CHAR 型: AL LONG 型: DX,AX (二) 举例 例3-16 气泡排序用汇编;数组元素在C程序 中输入,基本程序结构如下:
17
;exm3-16.c #include “stdio.h” extren void sort(int*,int); Main() { int aa[50]; … sort(aa,n) … }
1
宏调用:用宏名(也称宏指令)。 宏扩展:汇编时,将宏指令替换成宏体。 例:源程序 汇编时 … … SHIFT MOV CL, 4 … SAL AL, CL SHIFT … MOV CA, 4 SAL AL, CL 注:与子程序一样,可以简化源程序书写, 但有区别.
2
源程序:主程序 子程序 … SHIFT PROC CALL SHIFT MOV CL, 4 … SAL AL, CL CALL SHIFT RET 宏定义与子程序的区别: 1.子程序在运行时起作用;而宏定义在汇 编时起作用. 2.相同程序,子程序省目标码,而宏定义执 行速度快.
PUBLIC 名字 [,…] 功能:定义可以被其它模块引用的全局名字. 二、外部过程的调用 主模块: EXTRN SUB-PROC:FAR CODE SEGMENT MAIN-PROC PROC FAR … CALL SUB-PROC … RET MAIN-PROC ENDP
宏定义可以带参数: 例: SHIFT1 MACRO X,Y MOV CL, X SAL Y,CL ENDM 调用时: SHIFT1 2, BX;BX算术左移2位. 例: SHIFT2 MACRO X,Y,Z MOV CL, X S&Z Y,CL ENDM 调用时: SHIFT2 2, SI,HR;SI逻辑右移2位源自*作业6:P124:题3-2,
22
8.数据返回C程序时,类型不同,使用的寄 存器不同,见表3-6. 例: CHAR 型: AL LONG 型: DX,AX (二) 举例 例3-16 气泡排序用汇编;数组元素在C程序 中输入,基本程序结构如下:
17
;exm3-16.c #include “stdio.h” extren void sort(int*,int); Main() { int aa[50]; … sort(aa,n) … }
1
宏调用:用宏名(也称宏指令)。 宏扩展:汇编时,将宏指令替换成宏体。 例:源程序 汇编时 … … SHIFT MOV CL, 4 … SAL AL, CL SHIFT … MOV CA, 4 SAL AL, CL 注:与子程序一样,可以简化源程序书写, 但有区别.
2
源程序:主程序 子程序 … SHIFT PROC CALL SHIFT MOV CL, 4 … SAL AL, CL CALL SHIFT RET 宏定义与子程序的区别: 1.子程序在运行时起作用;而宏定义在汇 编时起作用. 2.相同程序,子程序省目标码,而宏定义执 行速度快.
PUBLIC 名字 [,…] 功能:定义可以被其它模块引用的全局名字. 二、外部过程的调用 主模块: EXTRN SUB-PROC:FAR CODE SEGMENT MAIN-PROC PROC FAR … CALL SUB-PROC … RET MAIN-PROC ENDP
汇编语言程序设计第七章 循环结构程序
2. LOOPE/LOOPZ 条件重复控制指令
指令汇编格式: LOOPE/LOOPZ AGAIN
操作: (1) CX CX-1
(2) 若CX≠ 0且ZF=1,则使控制转到AGAIN 标识的循环入口处,继续下一次循环,否则退出循 环体,执行后续指令。
例 比较两个字符串是否相等。
STR1 DB
‘12345’
DSEG SEGMENT
DATA DB
10,20,30,80,100,90,120
CNT DW 7
ADR DW 0FFFFH
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,ES:DSEG
START: MOV AX,DSEG MOV DS,AX
DATA1 00H
01H 00H 02H
: :
SI DATA2 00H
10H
50
00H
个
20H
字
单
:
元
:
DI SUM 00H
BX
00H
50
00H 50
个
00H
个
字 单
:
字 单
元
:
元
00H
00H
例7.1 设内存DATA1和DATA2开始分别存放50个无符 号字数据,编制程序将两个存储区对应字数据求和并存 入SUM开始的单元。
存储器中仅由字节或字组成的一组数据称为数据串。由字节组 成的数据串称为字节数据串,简称字节串;由字组成的数据串称为 字数据串,简称字串。一个数据串的长度最长不能超过64KB。
数据串操作指令的寻址方式为数据串寻址:
(1)指令中要处理的两个数据串应分别在数据段和附加段中定义。 (2)数据段中定义的数据串要用SI作指针;
汇编语言基础知识 课件
更大的数据表示范围,但在汇编语言中很少使用该数据类型。
➢十字节 由10个字节组成一个十字节类型,它总共有80个二进制位。在汇
编语言中很少使用该数据类型。
➢字符串 字符串是由若干个字节组成的,字节数不定,通常每个字节存储一
个字符。该数据形式是汇编语言程序中经常使用的一种数据形式。 汇编语言中没有C语言中的规定:以ASCII码0为字符串的结束符。
②已知带符号数在计算机内表示,求出其真值 (注意字长多少位)
3 .BCD码
把十进制数的每个数位用4位二进制数表示,又称 BCD码(并非数值相等)
10#
2# , 2#
10# 要求数值相等!
4.非数值数据表示
(2)常用字(符1的)A字SCII表符示 数据表示——字符用ASCII码表示
只用只用2进制0和1来表示指令,计算机能直接接收并执行的语言。 [x]反码 数符数字化,当是正数时,[x]反与[x]原相同
字符数据表示:每个字符用一个字节,用ASCII码 表示
(3)汉字编码——基本形式: 每一个汉字2个字节
5. 基本数据类型
➢字节 一个字节有8位二进制组成,其最高位是第7位,
最低位是第0位。 通常情况下,存储器按字节编址,读写存储器的
最小信息单位就是字节。
➢字 由2个字节组成一个字,其最高位是第15位,最
(1)字符数据表示——字符用ASCII码表示 用2个字(4个字节)来组成一个双字,其高16位称为高字,低16位称为低字。
(3)编写程序的复杂性: 若是正数, [x]补码[x]原码表示形式相同
(2) 所生成的机器语言程序执行效率高。
基面础向知 机识器,必面须了向解硬机件特器性,,执行汇细节编; 指令与机器指令基本保持1 :1关系, 编程时要了解计算机硬件工作原理与特性,资源限制, 把十进制数的每个数位用4位二进制数表示,又称BCD码(并非数值相等)
➢十字节 由10个字节组成一个十字节类型,它总共有80个二进制位。在汇
编语言中很少使用该数据类型。
➢字符串 字符串是由若干个字节组成的,字节数不定,通常每个字节存储一
个字符。该数据形式是汇编语言程序中经常使用的一种数据形式。 汇编语言中没有C语言中的规定:以ASCII码0为字符串的结束符。
②已知带符号数在计算机内表示,求出其真值 (注意字长多少位)
3 .BCD码
把十进制数的每个数位用4位二进制数表示,又称 BCD码(并非数值相等)
10#
2# , 2#
10# 要求数值相等!
4.非数值数据表示
(2)常用字(符1的)A字SCII表符示 数据表示——字符用ASCII码表示
只用只用2进制0和1来表示指令,计算机能直接接收并执行的语言。 [x]反码 数符数字化,当是正数时,[x]反与[x]原相同
字符数据表示:每个字符用一个字节,用ASCII码 表示
(3)汉字编码——基本形式: 每一个汉字2个字节
5. 基本数据类型
➢字节 一个字节有8位二进制组成,其最高位是第7位,
最低位是第0位。 通常情况下,存储器按字节编址,读写存储器的
最小信息单位就是字节。
➢字 由2个字节组成一个字,其最高位是第15位,最
(1)字符数据表示——字符用ASCII码表示 用2个字(4个字节)来组成一个双字,其高16位称为高字,低16位称为低字。
(3)编写程序的复杂性: 若是正数, [x]补码[x]原码表示形式相同
(2) 所生成的机器语言程序执行效率高。
基面础向知 机识器,必面须了向解硬机件特器性,,执行汇细节编; 指令与机器指令基本保持1 :1关系, 编程时要了解计算机硬件工作原理与特性,资源限制, 把十进制数的每个数位用4位二进制数表示,又称BCD码(并非数值相等)
宏汇编语言程序设计 .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 程序设计方法
【 分支结构】
⑶根据关键字分支
汇编语言_PPT课件
person4 Employee <,,,2 DUP(20000)>
可以像下例一样声明结构数组,其中AllPoints的每个元素都被初
始化为<0,0>:
NumPoints=3 AllPoints COORD NumPoints DUP(<0,0>)
循环遍历数组 使用间接寻址或变址寻址来操纵结构数组时通常要使用循环。
调用mPutChar:
mPutChar ‘A’
1 push eax 2 1 mov al,’A’ 3 call WriteChar 4 1 pop eax
左边的“1”表示宏展开的层次。
宏的例子
mWriteStr宏 mReadStr宏 mGotoxy宏
冲突的检查:一定要确保作位参数传递的寄存器值不与宏内使用的寄存器
开销。但使用宏也有一个缺点:大量使用宏会增大程序的体积,因
为对宏的每次调用都要在程序中插入宏的一份新的拷贝。
下面的NewLine宏只包含一条调用Crlf库过程的语句:
NemLine MACRO call Crlf
ENDM
这个定义一般放在数据段之前,在接下来的代码段中,我们调用该 宏:
.code NewLine
声明结构变量
我们可以声明结构的一个实例,称为结构变量(structure variables),并用特定值进行初始化,如果声明的时候使用尖括号
<>(或大括号{}),编译器将保留默认的域初始值;或者还可以向特 定的域中插入新值。例如
.data
point1 COORD <5,10>
point2 COORD <>
的文本文件中,对于后者要使用INCLUDE伪指令使之在编译时被插
可以像下例一样声明结构数组,其中AllPoints的每个元素都被初
始化为<0,0>:
NumPoints=3 AllPoints COORD NumPoints DUP(<0,0>)
循环遍历数组 使用间接寻址或变址寻址来操纵结构数组时通常要使用循环。
调用mPutChar:
mPutChar ‘A’
1 push eax 2 1 mov al,’A’ 3 call WriteChar 4 1 pop eax
左边的“1”表示宏展开的层次。
宏的例子
mWriteStr宏 mReadStr宏 mGotoxy宏
冲突的检查:一定要确保作位参数传递的寄存器值不与宏内使用的寄存器
开销。但使用宏也有一个缺点:大量使用宏会增大程序的体积,因
为对宏的每次调用都要在程序中插入宏的一份新的拷贝。
下面的NewLine宏只包含一条调用Crlf库过程的语句:
NemLine MACRO call Crlf
ENDM
这个定义一般放在数据段之前,在接下来的代码段中,我们调用该 宏:
.code NewLine
声明结构变量
我们可以声明结构的一个实例,称为结构变量(structure variables),并用特定值进行初始化,如果声明的时候使用尖括号
<>(或大括号{}),编译器将保留默认的域初始值;或者还可以向特 定的域中插入新值。例如
.data
point1 COORD <5,10>
point2 COORD <>
的文本文件中,对于后者要使用INCLUDE伪指令使之在编译时被插
宏汇编语言PPT课件
③ 利用EQU可以用一个符号名替代一个复杂的地址表 达式和其他一些符号,如指令助记符、变量名、标号、 段名、寄存器名、宏定义名等。
.
34
2.等号伪指令
格式:符号名 = 表达式
功能:为常量、表达式及其他各种符号定义一个 等价的符号名,并能对所定义的符号多次重复定 义,且以最后一次定义的值为准。
【例3.17】定义等价符号名。
.
20
1.操作数
2.算术运算符
算术运算符包括:+(加)、-(减)、 * ( 乘 ) 、 / ( 除 ) 、 MOD( 求 模 ) 、 SHL(左移)、SHR(右移)几种,它既 可以用于数值表达式又可用于地址表达 式。
.
21
【例3.4】用算术运算符进行数值表达式运算。
NUM1 NUM2 NUM3 VAR1 VAR2 NUM4 NUM5
DW伪指令则是取它的偏移地址来初始化变量, 用DD伪指令则是取它的段首址和偏移地址来初 始化变量。
例如:
BUF1 DW A
BUF2 DD B
.
16
(5)带DUP的表达式
在表达式中使用重复数据操作符DUP,可以为连续的存 储单元提供重复数据,其格式为:
N DUP(表达式)
其中N为重复因子,只能取正整数,表示定义了N个重 复数据存储单元,其类型由它前面的数据定义伪指令确 定,而每个数据存储单元中的初值由DUP后面圆括号中 的表达式给定。
DATA1
.
22Biblioteka 3.逻辑运算符逻辑运算符包括:逻辑乘(AND)、逻辑加(OR)、 按位加(XOR)、逻辑非(NOT)四种运算。由于逻辑 运算是按位操作,且在汇编过程中完成,因而运算的结 果仍为整数常量。
【例3.5】用逻辑运算符进行运算。
.
34
2.等号伪指令
格式:符号名 = 表达式
功能:为常量、表达式及其他各种符号定义一个 等价的符号名,并能对所定义的符号多次重复定 义,且以最后一次定义的值为准。
【例3.17】定义等价符号名。
.
20
1.操作数
2.算术运算符
算术运算符包括:+(加)、-(减)、 * ( 乘 ) 、 / ( 除 ) 、 MOD( 求 模 ) 、 SHL(左移)、SHR(右移)几种,它既 可以用于数值表达式又可用于地址表达 式。
.
21
【例3.4】用算术运算符进行数值表达式运算。
NUM1 NUM2 NUM3 VAR1 VAR2 NUM4 NUM5
DW伪指令则是取它的偏移地址来初始化变量, 用DD伪指令则是取它的段首址和偏移地址来初 始化变量。
例如:
BUF1 DW A
BUF2 DD B
.
16
(5)带DUP的表达式
在表达式中使用重复数据操作符DUP,可以为连续的存 储单元提供重复数据,其格式为:
N DUP(表达式)
其中N为重复因子,只能取正整数,表示定义了N个重 复数据存储单元,其类型由它前面的数据定义伪指令确 定,而每个数据存储单元中的初值由DUP后面圆括号中 的表达式给定。
DATA1
.
22Biblioteka 3.逻辑运算符逻辑运算符包括:逻辑乘(AND)、逻辑加(OR)、 按位加(XOR)、逻辑非(NOT)四种运算。由于逻辑 运算是按位操作,且在汇编过程中完成,因而运算的结 果仍为整数常量。
【例3.5】用逻辑运算符进行运算。
PPT-汇编语言源程序的框架结构
JMP BX ;产生多分支转移TAB: JMP SHORT A0 ;转移表JMP SHORT A1JMP SHORT A2A0: LEA DX,S0 ;各分支程序段MOV AH,9INT 21HJMP EXIT1A1: LEA DX,S1MOV AH,9INT 21H
JMP EXIT1A2:LEA DX,S2MOV AH,9INT 21HJMP EXIT1ERROR: MOV DX,OFFSET ERMOV AH,9INT 21HEXIT1: MOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START
A0: LEA DX,S0 ;各分支程序段MOV AH,9INT 21HJMP EXIT1A1: LEA DX,S1MOV AH,9INT 21HJMP EXIT1A2: LEA DX,S2MOV AH,9INT 21HJMP EXIT1
ERROR: MOV DX,OFFSET ERMOV AH,9INT 21HEXIT1: MOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START
图5.8 用转移表法实现多路分支旳构造框图例5.5:编程实现菜单项选择择,根据不同旳选择做不同旳事情。解:假设有3路分支,转移表中旳转移指令分别为:JMP SHORT A0、JMP SHORT A1、JMP SHORT A2;详细见图5.9所示:
参照程序:DATA SEGMENTMENU DB 0DH,0AH,"0:Chinese!"DB 0DH,0AH,"1:English!"DB 0DH,0AH,"2: German!"DB 0DH,0AH,"Please choose one to answer the following question:$"
汇编语言第7章高级汇编语言技术PPT课件
7.1.1 宏定义、宏调用和宏展开
1. 宏定义:
说明:
① 定义宏指令以MACRO语句开始,ENDM 语句结束,它们必须成对出现
② 宏指令名:为宏指令取的名字,必须以字 母开头,后可跟字母、数字或下划线
③ 宏定义体:能够完成一定功能的指令序列
④ 哑元:定义宏体中出现的符号(字符串),
可有可无,各哑元之间用逗号隔开
注:先有宏定义,后有宏调用 例7.9: 例7.11:
12
第七章 高级汇编语言技术
7.1.5 列表伪操作 .XALL:为默认情况,指示清单中只列
出产生目标码的宏展开
.LALL:列出包括注释在内的所有宏展
开
.SALL:不列出任何展开信息
注:宏定义中的注释可用“;”和“;;”表示
(在宏展开时不展开,即使在.LALL之 下的清单中也不会出现)
7.2.2 不定重复伪操作 1.IRP伪操作
格式:IRP dummy,<argument list>
…
(重复块)
ENDM
重复次数
功能:连续地执行重复块几次,每次重复把重复块中的哑
元用自变量表中的一项来取代,下一次取代下一项, 重复次数由自变量表中的自变量个数来确定
例7.17:
注:该操作不一定非要在宏定义体内 18
3. 宏展开:在汇编时,将宏定义体插入宏调用
处(宏指令名),用实元代替哑元
注:宏展开工作是汇编程序在汇编过程中完成
例7.1:
7
第七章 高级汇编语言技术
7.1.1 宏指令与子程序的区别
共同优点:简化源程序代码
区别:
① 执行时间:子程序调用是在程序运行过程中进行;而宏调用 是在汇编过程中完成
② 执行方式:子程序执行时,每调一次都要先保护断点、再保 护现场,返回时先恢复现场、再恢复断点,因此采用子程序 方式程序的执行要花费额外的开销,执行时间长、速度慢; 而宏指令方式不需要这些开销,因而执行时间短、速度快
1. 宏定义:
说明:
① 定义宏指令以MACRO语句开始,ENDM 语句结束,它们必须成对出现
② 宏指令名:为宏指令取的名字,必须以字 母开头,后可跟字母、数字或下划线
③ 宏定义体:能够完成一定功能的指令序列
④ 哑元:定义宏体中出现的符号(字符串),
可有可无,各哑元之间用逗号隔开
注:先有宏定义,后有宏调用 例7.9: 例7.11:
12
第七章 高级汇编语言技术
7.1.5 列表伪操作 .XALL:为默认情况,指示清单中只列
出产生目标码的宏展开
.LALL:列出包括注释在内的所有宏展
开
.SALL:不列出任何展开信息
注:宏定义中的注释可用“;”和“;;”表示
(在宏展开时不展开,即使在.LALL之 下的清单中也不会出现)
7.2.2 不定重复伪操作 1.IRP伪操作
格式:IRP dummy,<argument list>
…
(重复块)
ENDM
重复次数
功能:连续地执行重复块几次,每次重复把重复块中的哑
元用自变量表中的一项来取代,下一次取代下一项, 重复次数由自变量表中的自变量个数来确定
例7.17:
注:该操作不一定非要在宏定义体内 18
3. 宏展开:在汇编时,将宏定义体插入宏调用
处(宏指令名),用实元代替哑元
注:宏展开工作是汇编程序在汇编过程中完成
例7.1:
7
第七章 高级汇编语言技术
7.1.1 宏指令与子程序的区别
共同优点:简化源程序代码
区别:
① 执行时间:子程序调用是在程序运行过程中进行;而宏调用 是在汇编过程中完成
② 执行方式:子程序执行时,每调一次都要先保护断点、再保 护现场,返回时先恢复现场、再恢复断点,因此采用子程序 方式程序的执行要花费额外的开销,执行时间长、速度慢; 而宏指令方式不需要这些开销,因而执行时间短、速度快
汇编语言宏指令语句
示。
参数传递
在宏调用时,将参数值传递给宏的参 数占位符,以便在宏体中使用这些值。
可选参数
可选参数是指在宏定义中未指定的参 数,可以在宏调用时选择是否传递。
参数替换
在宏体中,可以使用参数占位符来表 示参数,并在宏调用时将参数值替换 到相应的占位符位置。
03
汇编语言宏指令语句的分类
数据宏指令语句
总结词:定义数据
可视化
可视化编程工具的发展将为汇编 语言宏指令语句提供更好的支持, 使编程更加直观和方便。
THANKS
感谢观看
宏调用
宏调用
在程序中,使用宏名称和参数列表来调用宏 。
参数替换
在宏体中,可以使用参数占位符来表示参数,并在 宏调用时将参数值替换到相应的占位符位置。
宏展开
在程序预处理阶段,将宏定义的指令语句展 开到程序中相应的位置,以实现代码复用。
宏参数
位置参数
位置参数是指在宏定义中按照顺序指定 的参数,可以在宏体中使用占位符来表
02
汇编语言宏指令语句基础
宏定义
01
02
03
04
宏定义
在汇编语言中,宏是一 种预处理指令,用于定 义一个或多个宏指令语 句,以便在程序中重复 使用。
宏名称
宏的名称是自定义的标 识符,用于在程序中引 用宏。
宏参数
宏可以接受参数,以便 在宏调用时传递值。
宏体
宏体包含宏定义的指令 语句,这些语句将在宏 调用时被替换。
操作数宏引用
在指令中使用操作数宏,例如:`MOV AX, @REG`。
控制流宏指令语句实例
无条件跳转宏
使用`JMP`指令,可以定义无条件跳转宏, 例如:`JMP label`。
参数传递
在宏调用时,将参数值传递给宏的参 数占位符,以便在宏体中使用这些值。
可选参数
可选参数是指在宏定义中未指定的参 数,可以在宏调用时选择是否传递。
参数替换
在宏体中,可以使用参数占位符来表 示参数,并在宏调用时将参数值替换 到相应的占位符位置。
03
汇编语言宏指令语句的分类
数据宏指令语句
总结词:定义数据
可视化
可视化编程工具的发展将为汇编 语言宏指令语句提供更好的支持, 使编程更加直观和方便。
THANKS
感谢观看
宏调用
宏调用
在程序中,使用宏名称和参数列表来调用宏 。
参数替换
在宏体中,可以使用参数占位符来表示参数,并在 宏调用时将参数值替换到相应的占位符位置。
宏展开
在程序预处理阶段,将宏定义的指令语句展 开到程序中相应的位置,以实现代码复用。
宏参数
位置参数
位置参数是指在宏定义中按照顺序指定 的参数,可以在宏体中使用占位符来表
02
汇编语言宏指令语句基础
宏定义
01
02
03
04
宏定义
在汇编语言中,宏是一 种预处理指令,用于定 义一个或多个宏指令语 句,以便在程序中重复 使用。
宏名称
宏的名称是自定义的标 识符,用于在程序中引 用宏。
宏参数
宏可以接受参数,以便 在宏调用时传递值。
宏体
宏体包含宏定义的指令 语句,这些语句将在宏 调用时被替换。
操作数宏引用
在指令中使用操作数宏,例如:`MOV AX, @REG`。
控制流宏指令语句实例
无条件跳转宏
使用`JMP`指令,可以定义无条件跳转宏, 例如:`JMP label`。
汇编语言入门教程PPT-第七章宏定义
mainbegin @data
;建立DS内容
dispmsg msg1
;显示msg1字符串
dispmsg msg2
;显示msg2字符串
mainend
;返回DOS
end start
• &——替换操作符,用于将参数与其 他字符分开。如果参数紧接在其他 字符之前或之后,或者参数出现在 带引号的字符串中,就必须使用该 伪操作符
;宏定义 dstring macro string
db ’&string&’,0dh,0ah,’$’ endm
;宏调用
传递注释符
dstring < This is a example. >
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
例 宏指令GOTO L,X,REL,Y(其中REL可以是Z,NZ,L,NL等)可以 根据不同情况产生无条件转移指令或比较和条件转移指令。
dstring < 0 !< Number !< 10 >
转义注释符
;宏展开
1
db ’This is a example.’, 0dh,0ah,’$’
1
db ’0 < Number < 10’, 0dh,0ah, ’$’
与宏有关 的伪指令
• 局部标号伪指令 LOCAL 标号列表 宏定义体采用了标号,应使用LOCAL加以说明 它必须是宏定义MACRO语句之后的第一条语句
;; 有参数
endif
int 21h
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
宏定义:
第七章第一高章级汇基编础语知言识技术
例 宏定义可允许递归调用,此时条件伪操作可用来结束宏递归。
宏指令POWER可以用来实现X和2N相乘。这只需对X左移N次即可实现, 可以设COUNT为递归次数的计数值,当该数与N相等时就可结束遇归调用。
宏定义:
宏结构的作用
宏汇编、重复汇编和条件汇编 为源程序的编写提供了很多方便, 灵活运用它们可以编写出非常 良好的源程序来
第七章第一高章级汇基编础语知言识技术
变元是操作码的一部分,必须用‘&’符号作为分隔符
第七章第一高章级汇基编础语知言识技术
&是一个操作符,它在宏定义体中可以作为哑元的前缀,展开时可以把&前后两个符 号合并而形成一个符号,这个符号可以是操作码、操作数或是一个字符串。下面两个 例子进一步具体说明这个问题。
mainbegin @data
;建立DS内容
dispmsg msg1
;显示msg1字符串
dispmsg msg2
;显示msg2字符串
mainend
;返回DOS
end start
例 要求建立一个100D字的数组,其中每个字的内容是下一个 字的地址,而最后一个字的内容是第一个字的地址。 ARRAY LABEL WORD
REPT 99 DW $+2 ENDM DW ARRAY
第七章第一高章级汇基编础语知言识技术
重复次数由自变量表中的自变量个数 来确定。自变量表必须用尖括号括起, 它可以是常数、符号、字符串等
宏的参数功能强大,颇具特色 配合宏,还有宏操作符和有关伪指令
第七章第一高章级汇基编础语知言识技术
其中哑元表给出了宏定义中所用到的形式参数 (或称虚参),每个哑元之间用逗号隔开
第七章第一高章级汇基编语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
mov ds,ax
ENDM
MACRO message
mov dx,offset message
mov ah,09h
int 21h
ENDM
例题
mainend
MACRO retnum
;;返回DOS,可不带参数
ifb <retnum>
mov ah,4ch
;;没有参数
else
mov ax,4c00h+(retnum AND 0ffh)
汇编系统中有些以圆点起始的 伪指令(如.startup、.exit等) 实际上是一种宏结构
例题
dstring mainbegin dispmsg
MACRO string
;;定义字符串
db '&string&',0dh,0ah,'$'
ENDM
MACRO dsseg
;;设置数据段地址
mov ax,dsseg
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
注意: 如果程序中多次调用该宏定 义时,展开后台出现标号的多重定义, 这是不能允许的。汇编程序对LOCAL伪 操作的局部标号表中的每一个局部标号 建立唯一的符号(用??0000一?? FFFF)以代替在展开中存在的每个局部 标号。必需注意,LOCAL伪操作只能用 在宏定义体内,而且必须是MACRO伪操 作后的第一语句,在MACRO和LOCAL之间 不允许有注释和分号标志。
• 宏定义删除伪指令 PURGE 宏名表 不需要某个宏定义时,可以把它删除
• 宏定义退出伪指令 EXITM 伪指令EXITM表示结束当前宏调用的展开
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
汇编程序把跟在%之后的表达 式的值转换成当前基数下的数, 在展开期间,用这个数来取代 哑元。
宏操作符总结
• ;;——宏注释符,用于表示在宏定义 中的注释。采用这个符号的注释, 在宏展开时不出现
dstring < 0 !< Number !< 10 >
转义注释符
;宏展开
1
db ’This is a example.’, 0dh,0ah,’$’
1
db ’0 < Number < 10’, 0dh,0ah, ’$’
与宏有关 的伪指令
• 局部标号伪指令 LOCAL 标号列表 宏定义体采用了标号,应使用LOCAL加以说明 它必须是宏定义MACRO语句之后的第一条语句
• &——替换操作符,用于将参数与其 他字符分开。如果参数紧接在其他 字符之前或之后,或者参数出现在 带引号的字符串中,就必须使用该 伪操作符
;宏定义 dstring macro string
db ’&string&’,0dh,0ah,’$’ endm
;宏调用
传递注释符
dstring < This is a example. >
第七章第一高章级汇基编础语知言识技术
宏结构程序设计
宏汇编 重复汇编 条件汇编 ——统称宏结构 宏(Macro)是汇编语言的一个
特点,它是与子程序类似又独具特色 的另一种简化源程序的方法
宏汇编
宏——具有宏名的一段汇编语句序列 ——宏定义时书写
宏指令——这段汇编语句序列的缩写 ——宏调用时书写
宏展开——宏指令处用这段宏代替的过程 ——宏汇编时实现
;; 有参数
endif
int 21h
ENDM
msg1 dstring msg2 dstring
start:
.model small
例题
.stack 256
.data
equ this byte
<Hello,Everybody !!>
equ this byte
<You see,I made it.>
.code
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
例 宏指令GOTO L,X,REL,Y(其中REL可以是Z,NZ,L,NL等)可以 根据不同情况产生无条件转移指令或比较和条件转移指令。
第七章第一高章级汇基编础语知言识技术
例 宏定义可允许递归调用,此时条件伪操作可用来结束宏递归。
宏指令POWER可以用来实现X和2N相乘。这只需对X左移N次即可实现, 可以设COUNT为递归次数的计数值,当该数与N相等时就可结束遇归调用。
宏定义:
宏结构的作用
宏汇编、重复汇编和条件汇编 为源程序的编写提供了很多方便, 灵活运用它们可以编写出非常 良好的源程序来
第七章第一高章级汇基编础语知言识技术
变元是操作码的一部分,必须用‘&’符号作为分隔符
第七章第一高章级汇基编础语知言识技术
&是一个操作符,它在宏定义体中可以作为哑元的前缀,展开时可以把&前后两个符 号合并而形成一个符号,这个符号可以是操作码、操作数或是一个字符串。下面两个 例子进一步具体说明这个问题。
mainbegin @data
;建立DS内容
dispmsg msg1
;显示msg1字符串
dispmsg msg2
;显示msg2字符串
mainend
;返回DOS
end start
例 要求建立一个100D字的数组,其中每个字的内容是下一个 字的地址,而最后一个字的内容是第一个字的地址。 ARRAY LABEL WORD
REPT 99 DW $+2 ENDM DW ARRAY
第七章第一高章级汇基编础语知言识技术
重复次数由自变量表中的自变量个数 来确定。自变量表必须用尖括号括起, 它可以是常数、符号、字符串等
宏的参数功能强大,颇具特色 配合宏,还有宏操作符和有关伪指令
第七章第一高章级汇基编础语知言识技术
其中哑元表给出了宏定义中所用到的形式参数 (或称虚参),每个哑元之间用逗号隔开
第七章第一高章级汇基编语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
mov ds,ax
ENDM
MACRO message
mov dx,offset message
mov ah,09h
int 21h
ENDM
例题
mainend
MACRO retnum
;;返回DOS,可不带参数
ifb <retnum>
mov ah,4ch
;;没有参数
else
mov ax,4c00h+(retnum AND 0ffh)
汇编系统中有些以圆点起始的 伪指令(如.startup、.exit等) 实际上是一种宏结构
例题
dstring mainbegin dispmsg
MACRO string
;;定义字符串
db '&string&',0dh,0ah,'$'
ENDM
MACRO dsseg
;;设置数据段地址
mov ax,dsseg
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
注意: 如果程序中多次调用该宏定 义时,展开后台出现标号的多重定义, 这是不能允许的。汇编程序对LOCAL伪 操作的局部标号表中的每一个局部标号 建立唯一的符号(用??0000一?? FFFF)以代替在展开中存在的每个局部 标号。必需注意,LOCAL伪操作只能用 在宏定义体内,而且必须是MACRO伪操 作后的第一语句,在MACRO和LOCAL之间 不允许有注释和分号标志。
• 宏定义删除伪指令 PURGE 宏名表 不需要某个宏定义时,可以把它删除
• 宏定义退出伪指令 EXITM 伪指令EXITM表示结束当前宏调用的展开
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
汇编程序把跟在%之后的表达 式的值转换成当前基数下的数, 在展开期间,用这个数来取代 哑元。
宏操作符总结
• ;;——宏注释符,用于表示在宏定义 中的注释。采用这个符号的注释, 在宏展开时不出现
dstring < 0 !< Number !< 10 >
转义注释符
;宏展开
1
db ’This is a example.’, 0dh,0ah,’$’
1
db ’0 < Number < 10’, 0dh,0ah, ’$’
与宏有关 的伪指令
• 局部标号伪指令 LOCAL 标号列表 宏定义体采用了标号,应使用LOCAL加以说明 它必须是宏定义MACRO语句之后的第一条语句
• &——替换操作符,用于将参数与其 他字符分开。如果参数紧接在其他 字符之前或之后,或者参数出现在 带引号的字符串中,就必须使用该 伪操作符
;宏定义 dstring macro string
db ’&string&’,0dh,0ah,’$’ endm
;宏调用
传递注释符
dstring < This is a example. >
第七章第一高章级汇基编础语知言识技术
宏结构程序设计
宏汇编 重复汇编 条件汇编 ——统称宏结构 宏(Macro)是汇编语言的一个
特点,它是与子程序类似又独具特色 的另一种简化源程序的方法
宏汇编
宏——具有宏名的一段汇编语句序列 ——宏定义时书写
宏指令——这段汇编语句序列的缩写 ——宏调用时书写
宏展开——宏指令处用这段宏代替的过程 ——宏汇编时实现
;; 有参数
endif
int 21h
ENDM
msg1 dstring msg2 dstring
start:
.model small
例题
.stack 256
.data
equ this byte
<Hello,Everybody !!>
equ this byte
<You see,I made it.>
.code
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
第七章第一高章级汇基编础语知言识技术
例 宏指令GOTO L,X,REL,Y(其中REL可以是Z,NZ,L,NL等)可以 根据不同情况产生无条件转移指令或比较和条件转移指令。