




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、13.4 汇编语言程序格式与常用伪指令23.4.1 汇编语言程序格式1.一般格式 一个完整的汇编语言程序往往需要分成若干段来书写。一个完整的汇编语言程序往往需要分成若干段来书写。一般情况下,格式如下:一般情况下,格式如下: 3NAME1 SEGMENT 语句语句1 NAME1 ENDSNAME2 SEGMENT 语句语句 NAME2 ENDS END 标号标号n任何一个汇编语言程序都必须有一个逻辑代任何一个汇编语言程序都必须有一个逻辑代码段和一条指示源程序结束的伪指令码段和一条指示源程序结束的伪指令END。n堆栈段、数据段和附加段可根据程序的需要堆栈段、数据段和附加段可根据程序的需要选用。选用
2、。41.一般格式52. 汇编语言语句格式汇编语言语句格式指令性语句指令性语句指示性语句指示性语句CPU执行的语句,执行的语句,能够生成目标代码能够生成目标代码CPU不执行,而由汇不执行,而由汇编程序执行的语句,编程序执行的语句,不生成目标代码(伪不生成目标代码(伪指令)指令)62. 汇编语言语句格式汇编语言语句格式 指令性语句: 标号: 前缀 助记符 操作数,操作数 ;注释指令的符号地址指令的符号地址标号后要有冒号标号后要有冒号操作码,如有前缀操作码,如有前缀,需用空格分开,需用空格分开注释前加分号注释前加分号7指示性语句格式(伪指令语句)符号名符号名 伪指令伪指令 参数参数 ;注释;注释变量
3、的符号地址变量的符号地址其后不加冒号其后不加冒号对汇编过程的进一步对汇编过程的进一步说明,参数个数由伪说明,参数个数由伪指令确定指令确定指示汇编程序应指示汇编程序应执行的具体操作执行的具体操作宏指令语句 标号:标号: 宏指令名宏指令名 参数参数1 ,参数,参数2 , ;注释;注释8宏指令是将程序中多次使用的程序段定义为一宏指令是将程序中多次使用的程序段定义为一条指令。在对宏指令汇编时,用原程序代码取条指令。在对宏指令汇编时,用原程序代码取代宏指令。代宏指令。93.4.2 常量、变量、表达式与运算符寄存器寄存器存储器单元存储器单元常量常量变量变量表达式与运算符表达式与运算符n在汇编语言程序中,数
4、据的表示形式大体上分在汇编语言程序中,数据的表示形式大体上分为两种类型,即常量与变量。为两种类型,即常量与变量。n用运算符把常量或变量连接起来的式子,称为用运算符把常量或变量连接起来的式子,称为表达式。表达式也可作为语句中的操作数。表达式。表达式也可作为语句中的操作数。10111.常量n数字常量数字常量n字符串常量字符串常量n例:例:A nMOV AL,An例:例:ABCD汇编时被译成对应的汇编时被译成对应的ASCII码码41H,42H,43H,44H用单引号引起的字符或字符串用单引号引起的字符或字符串常用的二进制、十进制、十六进制等。常用的二进制、十进制、十六进制等。2.变量n变量代表存放在
5、某存储单元中的数据,在程序变量代表存放在某存储单元中的数据,在程序运行期间可以改变,常以变量名的形式出现在运行期间可以改变,常以变量名的形式出现在程序中。程序中。n变量名是在程序中建立起来、可认为是存放数变量名是在程序中建立起来、可认为是存放数据的存储单元的符号地址。据的存储单元的符号地址。n变量名的取名规则与标号相同。变量名的取名规则与标号相同。12变量实例【例【例3-143-14】定义三个变量】定义三个变量DATA1DATA1、DATA2DATA2、DATA3DATA3。 13解:在程序中的数据段定义,语句如下:解:在程序中的数据段定义,语句如下: DATA SEGMENT DATA SE
6、GMENT DATA1 DB 12H DATA1 DB 12H DATA2 DW 1234H DATA2 DW 1234H DATA3 DD 12345678H DATA3 DD 12345678H DATA ENDS DATA ENDS变量的属性14段段 偏移量偏移量类类 型型变量所在段的段地址变量所在段的段地址变量所指单元与段首之间的位移量变量所指单元与段首之间的位移量( (相对字节数相对字节数) )变量的长度(变量所占内存单元个数)变量的长度(变量所占内存单元个数)字节型、字型、双字型等字节型、字型、双字型等变量的定义n变量必须在使用之前定义,由汇编语言提供的变量必须在使用之前定义,由汇
7、编语言提供的伪指令来实现的,即为变量分配存储器单元,伪指令来实现的,即为变量分配存储器单元,预置初值。预置初值。n常用的伪指令有常用的伪指令有DBDB、DWDW、DDDD、DQDQ、DTDT等。等。15格式:格式: 变量名变量名 伪指令名伪指令名 表达表达式式 数值表达式、数值表达式、地址表达式、地址表达式、字符串、?、字符串、?、N DUPN DUP(表达式)(表达式)变量的定义16nDB 定义的变量为字节型定义的变量为字节型n说明变量所定义的每个操作数占说明变量所定义的每个操作数占1字节字节nDW 定义的变量为字类型(双字节)定义的变量为字类型(双字节)n说明变量所定义的每个操作数占说明变
8、量所定义的每个操作数占2字节字节nDD 定义的变量为双字型(定义的变量为双字型(4字节)字节)n说明变量所定义的每个操作数占说明变量所定义的每个操作数占4字节字节nDQ 定义的变量为定义的变量为4字型(字型(8字节)字节)nDT 定义的变量为定义的变量为10字节型字节型17伪指令例nDATA1 DB 11H,22H,33H,44HnDATA2 DW 11H,22H,3344HnDATA3 DD 22H,33445566H以上变量在内存以上变量在内存中的存放形式中的存放形式DATA111H22H33H44HDATA211H00H22H00H33H44HDATA322H00H00H00H55H66
9、H44H33H18几点说明n伪指令的性质决定所定义变量的属性;伪指令的性质决定所定义变量的属性;n定义字符串必须用定义字符串必须用DB伪指令伪指令n例:例:n DATA1 DB ABCD,66HABCD41H42H43H44H66H数值表达式n为变量定义数值数据。为变量定义数值数据。19SUM DB 45,89H,10010101BNUMBER DW 4576H,-1,128TOTAL DD 7897AFE2H,4567H数据存放,低字节存数据存放,低字节存在低地址单元,高字在低地址单元,高字节存放高地址单元。节存放高地址单元。地址表达式n为变量定义存储器地址。为变量定义存储器地址。n由于段地
10、址和偏移地址都是由于段地址和偏移地址都是1616位数据,所以只位数据,所以只能使用能使用DWDW和和DDDD定义。其中定义。其中DWDW定义变量存放的是定义变量存放的是偏移地址,而偏移地址,而DDDD定义变量的偏移地址和段地址定义变量的偏移地址和段地址。20ADDR1 DW OFFSET SUM ADDR2 DD NUMBER取偏移地址取偏移地址定义偏移地址和段地址定义偏移地址和段地址字符串n可作为表达式使用,存放字符的可作为表达式使用,存放字符的ASCIIASCII码值。码值。21例如伪指令:例如伪指令:XYZ DB ABCD DATA DW CD,76 按字节依次存储按字节依次存储A、B、
11、C、D的的ASCII码值码值按字依次存放按字依次存放CD和和7、6的的ASCII码值码值 22N DUP(表达式)n重复操作符重复操作符n作用:作用:n可以复制某个(或某些)操作数,也可以嵌套。可以复制某个(或某些)操作数,也可以嵌套。n为一个数据区的各单元设置相同的初值;为一个数据区的各单元设置相同的初值;n目的:目的:n常用于声明一个数据区常用于声明一个数据区n格式:格式:n 变量名变量名 伪指令助记符伪指令助记符 n DUP(初(初值,值,)重复次数重复次数n例:例:nVAR1 DW 20 DUP( 30H )nDATA1 DB 3 DUP (4,3,DUP(1),),30H)nVAR1
12、 DB 20 DUP( ? )23为变量为变量VAR1分配分配20个字个字节的空间,初节的空间,初值为随机值值为随机值为变量为变量VAR1分分配配20个字单元,个字单元,均为均为0030H为为DATA1分配分配12个字节的空间,个字节的空间,初值()内容初值()内容24“?”的作用的作用n表示随机值,不赋初值。表示随机值,不赋初值。n用于既希望预留存储空间而不关心具体为何用于既希望预留存储空间而不关心具体为何值的情况。值的情况。n给变量保留相应的存储单元。给变量保留相应的存储单元。nMEM1 DB 34H,A,?,?n VAR1 DW 20 DUP(?)(?)预留预留40个字节单元,每单元为随
13、机值个字节单元,每单元为随机值随机数随机数占占1个字节单元个字节单元25应用实例nM1 DB How are you?nM2 DW 3 DUP(11H),3344Hn M2 DB 4 DUP(?)(?)nM3 DB 3 DUP(22H,11H,?),?)变量在内存中的分区变量在内存中的分区26数据定义伪指令例M1How aM211H11H00H44H33H r e you?11H00H00H随机数随机数M311H22H11H22H11H22HXXXXXXXXXXXXXX两点说明n变量类型与指令的要求必须相符变量类型与指令的要求必须相符n 27MOV AX,VAR1MOV BL, VAR2两点说
14、明n在定义变量时,变量名对应的是数据区的首地在定义变量时,变量名对应的是数据区的首地址。如果数据区中有多个数据,则在对其他数址。如果数据区中有多个数据,则在对其他数据操作时,需修改地址。据操作时,需修改地址。n 28NUM DB 11H,22H,33H MOV AL, NUM+2送送33H到到AL中中【例【例3-153-15】数值变量的引用。】数值变量的引用。 解:首先定义变量,然后引用,程序如下:解:首先定义变量,然后引用,程序如下: DA1 DB 0FFH DA1 DB 0FFH DA2 DW 2345H DA2 DW 2345H MOV AL MOV AL,DA1DA1 MOV BX M
15、OV BX,DA2DA229(AL)=0FFH(BX)=2345H【例【例3-163-16】 地址变量的引用。地址变量的引用。 解:引用变量名,取其偏移量,程序如下:解:引用变量名,取其偏移量,程序如下: DA3 DB 10H DUP(0) DA3 DB 10H DUP(0) DA4 DW 20H DUP(1) DA4 DW 20H DUP(1) MOV DA3SI MOV DA3SI,ALAL MOV DX MOV DX,DA4BXDIDA4BXDI 30313.表达式与运算符运算符运算符操作符操作符表达式:用运算符或操作符把常量、变量、标号表达式:用运算符或操作符把常量、变量、标号等连接起
16、来的式子,其值在程序汇编时是确定的。等连接起来的式子,其值在程序汇编时是确定的。算术操作符算术操作符逻辑运算符逻辑运算符关系运算符关系运算符数值返回操作符数值返回操作符属性操作符属性操作符(1)算术运算符n算术运算符算术运算符n+,-,*,/,MODnSHR和和SHL:移位运算符,用于逻辑移位,移:移位运算符,用于逻辑移位,移动的位数由动的位数由SHR/SHL右边的次数决定。右边的次数决定。n 若次数若次数16,结果恒为,结果恒为0。n :下标运算符,取表达式的值作为操作数地:下标运算符,取表达式的值作为操作数地址,若有两个表达式,则以两表达式的值之和址,若有两个表达式,则以两表达式的值之和作
17、为地址。作为地址。nHIGH与与LOW:取高:取高/低字节运算符。低字节运算符。32【例【例3-17】分析下面程序,确定变量的含义。】分析下面程序,确定变量的含义。 NUM=5*4/7 ;NUM=2 NUM=NUM+5 ;NUM=7 NUM=NUM MOD 3 ;NUM=1 ORG 30H DATA1 DB 34H,56H,ABCD DATA2 DW 1234H,EF CONT=DATA2DATA1 DATA3=DATA2+2 33例例3-18】分析下面程序,确定移位运算符的作用。】分析下面程序,确定移位运算符的作用。 NUM=10101101B MOV AX,NUM SHL 3 ADD DX
18、,NUM SHR 63435(2)逻辑运算符n逻辑运算符逻辑运算符nAND,OR,NOT,XORn例:例:nMOV AL,8 AND 4nMOV AL,8+4-1nMOV BH,VAR+2【例【例3-203-20】分析下面程序,确定逻辑运算符的作用。】分析下面程序,确定逻辑运算符的作用。 MOV AX MOV AX,NOT 0F0F0H NOT 0F0F0H ;与指令;与指令MOV AXMOV AX,0F0FH0F0FH等效等效 MOV BL MOV BL,55H AND 0F0H 55H AND 0F0H ;与指令;与指令MOV BLMOV BL,50H50H等效等效 MOV BH MOV
19、BH,05H OR 30H 05H OR 30H ;与指令;与指令MOV BHMOV BH,35H35H等效等效 MOV CL MOV CL,55H XOR 0F0H 55H XOR 0F0H ;与指令;与指令MOV CLMOV CL,0A5H0A5H等效等效36(3)关系运算符n关系运算符如表关系运算符如表3-53-5所示,用于两个表达式的所示,用于两个表达式的比较,其结果为真(比较,其结果为真(1 1)或假()或假(0 0)。)。37表表3-5 关系运算符关系运算符 运算符运算符 语语 法法 运算(真)运算(真)EQ表达式表达式1 EQ 表达式表达式2 两表达式相等为真两表达式相等为真 N
20、E表达式表达式1 NE 表达式表达式2 两表达式不相等为真两表达式不相等为真LT表达式表达式1 LT 表达式表达式2表达式表达式1表达式表达式2为真为真GE表达式表达式1 GE 表达式表达式2表达式表达式1表达式表达式2为真为真 【例【例3-213-21】分析下面程序,确定关系表达式的作用。】分析下面程序,确定关系表达式的作用。 MOV AX MOV AX,0FH EQ 1111B 0FH EQ 1111B MOV BX MOV BX,0FH NE 1111B0FH NE 1111B380FFFFH0(4)数值返回操作符n操作对象必须是变量或标号,操作后得到相应操作对象必须是变量或标号,操作后
21、得到相应的返回值。的返回值。n即即SEGSEG,OFFSETOFFSET,TYPETYPE,LENGTHLENGTH和和SIZESIZE。n用于分析存储器操作数的属性。用于分析存储器操作数的属性。3940返回变量名或标号所在段的段内偏移量返回变量名或标号所在段的段内偏移量返回变量名或标号所在段的段基值返回变量名或标号所在段的段基值TYPE 返回变量名或标号所属类型的数字返回变量名或标号所属类型的数字LENGTH 返回数组变量的元素个数返回数组变量的元素个数SIZE 返回数组变量所占的总字节数返回数组变量所占的总字节数OFFSETSEG41数值返回操作例 MOV AX,SEG DATA MOV
22、DS,AX MOV BX,OFFSET DATA LEA BX,DATA等价于等价于SEGn格式:格式:SEG 变量名或标号变量名或标号n功能:返回变量名或标号所在段的段基值。功能:返回变量名或标号所在段的段基值。42例例3-22:设变量:设变量K1和和ARRAY所在段的段基值分所在段的段基值分别是别是0314H和和0154H,取出后分别送,取出后分别送AX和和BX。 MOV AX,SEG K1 MOV BX,SEG ARRAYOFFSETn格式格式: OFFSET 变量名或标号变量名或标号n功能:返回变量名或标号所在段的段内偏移量。功能:返回变量名或标号所在段的段内偏移量。 43例例3-23
23、:设变量:设变量K1所在段的段内偏移量是所在段的段内偏移量是0125H,取出后送,取出后送SI。 MOV SI,OFFSET K1 TYPEn格式:格式:TYPE 变量名或标号变量名或标号n功能:返回变量名或标号所属类型的数字。功能:返回变量名或标号所属类型的数字。n对于对于DB,DW或或DD定义的变量名,返回值分定义的变量名,返回值分别为别为1,2,4;n对于对于NEAR与与FAR类型的标号,返回值分别为类型的标号,返回值分别为-1,-2。44LENGTHn格式:格式:LENGTH 变量名变量名n功能:返回数组变量的元素个数,如果变量功能:返回数组变量的元素个数,如果变量是用重复操作符是用重
24、复操作符DUP说明的,则返回最外层说明的,则返回最外层DUP给定的给定的N值值;如果没有如果没有DUP说明,返回值说明,返回值总是总是1。45SIZEn格式:格式:SIZE 变量名变量名n功能:返回数组变量所占总字节数,其值等于功能:返回数组变量所占总字节数,其值等于LENGTH*TYPE。4647数值返回操作例n若若BUFFERBUFFER存储区用如下伪指令定义:存储区用如下伪指令定义: n BUFFER DW 200 DUP(0) BUFFER DW 200 DUP(0)n 则:则:n TYPE TYPE BUFFER BUFFER 等于等于2 2n LENGTH BUFFER LENGT
25、H BUFFER等于等于200200n SIZE BUFFER SIZE BUFFER等于等于40040048(5)属性运算符n 用于指定其后存储器操作数的类型用于指定其后存储器操作数的类型n 运算符:运算符:PTR,THISPTRn格式:类型格式:类型 PTR 地址表达式地址表达式n可以是可以是BYTE、WORD、DWORD或或NEAR、FAR。n地址表达式可以是用变量名或标号给出的有效地址表达式可以是用变量名或标号给出的有效地址以及其它形式的有效地址。地址以及其它形式的有效地址。n功能:临时修改变量或标号的类型属性。功能:临时修改变量或标号的类型属性。49 例: MOV BYTR PTRB
26、X,12H MOV AL, BYTE PTR VAR ADD BYTE PRT DA20, BLTHISn格式:格式:THIS 类型类型n功能:将功能:将THIS 后的类型属性赋给变量所表示后的类型属性赋给变量所表示的存储单元,该单元的段与偏移量属性不变。的存储单元,该单元的段与偏移量属性不变。50例如:例如: DAB EQU THIS BYTE JUMPF EQU THIS DAB LABEL BYTE JUMPF LABEL FAR513.4.3 常用伪指令由汇编程序执行的由汇编程序执行的“指令系统指令系统”,不能生成,不能生成目标代码目标代码-伪操作。伪操作。52(1)符号定义伪指令EQ
27、Un格式:格式:n 符号名符号名 EQU 表达式表达式n操作:操作:n用符号名取代后边的表达式,不可重新定义用符号名取代后边的表达式,不可重新定义以后在使用表达式时即可引用它所表示的内以后在使用表达式时即可引用它所表示的内容。容。nEQU说明的表达式不占用内存空间。说明的表达式不占用内存空间。n如果有符号名,则需要事先定义。如果有符号名,则需要事先定义。可以是常数、可以是常数、符号、数值符号、数值表达式表达式TEN EQU 0AHVAR EQU 2 MOV AL,TENMOV BX,VAR53 TEN=0AH VAR=伪操作后边表达式的值 (AL)=0AH (BX)=102654DA EQU
28、1234H ADR1 EQU DS:BP+7 DATA EQU HEIGHT+91234H=DA段前缀的变址访问赋给符号段前缀的变址访问赋给符号ADR1地址表达式赋给符号地址表达式赋给符号DATA(2)赋值伪指令=n格式:格式:n 符号名表达式(或符号名)符号名表达式(或符号名)n功能:功能:n 与与EQUEQU语句类似,语句类似,EQUEQU中的符号不允许重复定中的符号不允许重复定义,而义,而“”允许符号名重复定义。允许符号名重复定义。55例:例: EXP=5 EXP=5 EXP=EXP+5 EXP=EXP+5 56(3)段定义伪指令SEGMENT/ENDSn说明逻辑段的起始和结束;说明逻辑
29、段的起始和结束;n说明不同程序模块中同类逻辑段之间的联系形说明不同程序模块中同类逻辑段之间的联系形n 态态57段定义伪指令格式段名段名 SEGMENT SEGMENT 定位类型定位类型 组合类型组合类型 类别类别 段名段名 ENDS ENDS对段起始边界的对段起始边界的要求,如要求,如PAGE,PARA,WORD,BYTE表示段与段的关系表示段与段的关系 定位类型:可以是定位类型:可以是PAGE、PARA、WORD或或BYTE。 组合类型:表示段与段之间的关系,可以是组合类型:表示段与段之间的关系,可以是NONE、PUBLIC、COMMON、AT表达式、表达式、STACK和和MEMORY。 类
30、别:用单引号括起来,连接时同类别的段类别:用单引号括起来,连接时同类别的段存放在连续的存储区内,并组成段组名,典型存放在连续的存储区内,并组成段组名,典型类别有类别有STACK、CODE等。等。5859(4)设定段寄存器伪指令n说明所定义逻辑段的性质说明所定义逻辑段的性质n格式:格式:n ASSUME 段寄存器名:段名,段寄存器名:段名, ,段,段寄存器名:段名寄存器名:段名段寄存器名可以段寄存器名可以是是CS,DS,ES,SS段名必须段名必须已经定义已经定义n功能功能n 指定变量与段寄存器之间的关系,但不能指定变量与段寄存器之间的关系,但不能把段地址装入段寄存器中。把段地址装入段寄存器中。n
31、段寄存器的初始化:段寄存器的初始化:n系统自动将代码段的段地址放入系统自动将代码段的段地址放入CS中,其他中,其他逻辑段的段地址由程序员自己装入相应的段逻辑段的段地址由程序员自己装入相应的段寄存器。寄存器。n在源程序中,在源程序中,ASSUME伪指令放在可执行程伪指令放在可执行程序开始位置的前面。序开始位置的前面。60n例:例:nASSUME CS:CODE,DS:DATA1,ES:DATA261(5)过程定义伪指令n格式:格式:n 过程名过程名 PROC NEAR/FARn n RETn 过程名过程名 ENDPn功能:定义一个过程,并说明它是功能:定义一个过程,并说明它是NEAR(段(段内调
32、用)或内调用)或FAR(段间调用)类型。(段间调用)类型。n注意:注意:PROC和和ENDP必须成对出现。必须成对出现。62过程入口的过程入口的符号地址符号地址63(6)程序结束伪指令n表示源程序结束表示源程序结束n格式:格式:n END 标号标号表示程序执行的开始表示程序执行的开始地址;可有可无地址;可有可无64(7)定义段起始偏移地址伪指令ORG 段内程序代码或变量的起始偏移地址格式: ORG 表达式例: ORG 2000H ORG $10计算值为计算值为非负常数非负常数ORGORG 30H DATA1 DB 34H,56H,ABCD DATA2 DW 1234H,EF 65定义下面定义下
33、面DATA1的起的起始偏移地址为始偏移地址为30H(8)标识符说明伪指令n格式:格式:n PUBLIC 标识符标识符n功能:功能:n 说明标识符的属性是公共标识符。说明标识符的属性是公共标识符。n 例:例:n PUBLIC NAME1 ,NAME2, n 66说明说明NAME1、NAME2属于公共标识符,可以被属于公共标识符,可以被其它模块引用其它模块引用(9)标识符说明伪指令EXTRNn格式:格式:n EXTRN 标识符标识符n功能:功能:n说明所使用的标识符在外部程序段中,即:说说明所使用的标识符在外部程序段中,即:说明当前模块所使用的标识符中,哪些标识符是明当前模块所使用的标识符中,哪些
34、标识符是已经在其他模块中被定义为指定类型的标识符已经在其他模块中被定义为指定类型的标识符。n标识符的含义与标识符的含义与PUBLIC中的标识符相同。中的标识符相同。n 例:例:n EXTRN NAME067(10)多文本汇编连接伪指令INCLUDEn格式:格式:n INCLUDE 文件名文件名n功能:把指定的文本一起汇编,直到指定文本功能:把指定的文本一起汇编,直到指定文本文件的末尾,再继续汇编其后的语句。文件的末尾,再继续汇编其后的语句。68693.4.4 宏指令(1)宏定义指令n宏指令是利用宏指令是利用CPU指令系统中已有的指令按照指令系统中已有的指令按照一定的规则定义的新的指令。一定的规
35、则定义的新的指令。n宏指令的功能是根据用户需要自己确定的。宏指令的功能是根据用户需要自己确定的。n宏指令一但定义,在源程序中就可以像其它指宏指令一但定义,在源程序中就可以像其它指令一样使用。令一样使用。7071宏定义指令n 源程序中由汇编程序识别的具有独n 立功能的一段程序代码宏宏n由于宏指令不是指令系统提供的,所以,必由于宏指令不是指令系统提供的,所以,必须定义后才能使用。宏指令的定义是利用伪须定义后才能使用。宏指令的定义是利用伪指令实现的。指令实现的。 宏定义指令72n格式:格式:n 宏命令名宏命令名 MACRO n n n n n ENDM宏体(由指令语宏体(由指令语句组成的能句组成的能
36、完成某一特定功完成某一特定功能的一段程序)能的一段程序); ;宏定义开始伪指令宏定义开始伪指令; ;宏定义结束伪指令宏定义结束伪指令宏定义指令n说明:宏指令名由用户指定,定义后在程序中可说明:宏指令名由用户指定,定义后在程序中可以和指令一样使用,即宏调用。其中形式参数为以和指令一样使用,即宏调用。其中形式参数为可选项,多个参数之间用逗号可选项,多个参数之间用逗号“,”隔开;宏调隔开;宏调用时,用实参数代替形式参数。用时,用实参数代替形式参数。nMACRO/ENDM必须成对使用必须成对使用.汇编时,宏指令汇编时,宏指令中的伪指令不被汇编,其它指令的机器代码插入中的伪指令不被汇编,其它指令的机器代
37、码插入到调用处,同时在插入的每一条指令前添加到调用处,同时在插入的每一条指令前添加“+”号,这一过程称为宏展开。号,这一过程称为宏展开。73宏定义指令例74例例1.1.定义一条宏指令,实现对某寄存器算术左移定义一条宏指令,实现对某寄存器算术左移4 4次次 LSHIFT MACRO REG LSHIFT MACRO REG MOV MOV CL ,4CL ,4 SAL SAL REG ,CLREG ,CL ENDM ENDM形式参数形式参数宏指令宏指令LSHIFT实现对寄存器实现对寄存器REG左移左移4次。次。REG在调用时将由实际参数提供具体的寄存器名。在调用时将由实际参数提供具体的寄存器名。
38、 宏指令名宏指令名宏定义指令例75例例2.2.定义一条宏指令,定义一条宏指令, 实现对某寄存器左移实现对某寄存器左移/ /右移若干次右移若干次 SHIFT MACRO N, REG ,CC SHIFT MACRO N, REG ,CC MOV CL, N MOV CL, N S&CC REG, CL S&CC REG, CL ENDM ENDM 宏指令宏指令SHIFTSHIFT有三个形式参数,有三个形式参数,N N表表示移位的次数,示移位的次数,REGREG表示要移位的寄存表示要移位的寄存器,器,CCCC则指出移位方向。移位方向在指则指出移位方向。移位方向在指令的操作助记符中。
39、形式参数出现在助令的操作助记符中。形式参数出现在助记符中时,若不是在助记符的开头,那记符中时,若不是在助记符的开头,那么,前面必须加么,前面必须加 & &。 宏定义指令例76例例3.3.定义一条宏指令,实现将某字符串送屏幕显示定义一条宏指令,实现将某字符串送屏幕显示 SDISP MACRO MESSGE SDISP MACRO MESSGE LEA DX , LEA DX , MESSGEMESSGE MOV AH , 09 MOV AH , 09 INT 21H INT 21H ENDM ENDM形式参数形式参数该宏指令是显示该宏指令是显示MESSGEMESSGE所指明的缓冲
40、区的内容,所以调用所指明的缓冲区的内容,所以调用该宏指令时,代替形式参数的实际参数应该是要显示的缓该宏指令时,代替形式参数的实际参数应该是要显示的缓冲区的变量名。冲区的变量名。 宏调用格式:宏调用格式: 宏指令名宏指令名 宏调用与展开宏调用与展开1 .1 .宏调用宏调用 宏指令名是程序中已定义的宏指令的名宏指令名是程序中已定义的宏指令的名称。实际参数应与宏定义中的形式参数相对称。实际参数应与宏定义中的形式参数相对应。应。 当有多个形式参数时,提供的实际参数当有多个形式参数时,提供的实际参数的顺序必须与形式参数的顺序一致。的顺序必须与形式参数的顺序一致。 当提供的实际参数多于形式参数时,多当提供
41、的实际参数多于形式参数时,多余部分被忽略;当少于形式参数时,多余的余部分被忽略;当少于形式参数时,多余的形式参数变为空。形式参数变为空。 SHIFT MACRO N, REG ,CC SHIFT MACRO N, REG ,CC MOV CL, N MOV CL, N S&CC REG, CL S&CC REG, CL ENDM ENDM SDISP MACRO MESSGE SDISP MACRO MESSGE LEA DX , LEA DX , MESSGEMESSGE MOV AH , 09 MOV AH , 09 INT 21H INT 21H ENDM ENDMSHI
42、FT 4,AX,AR SDISP STRING1宏调用,要宏调用,要对对AXAX的内容的内容右移右移4 4次。次。宏 调 用 , 指宏 调 用 , 指出显示出显示STRING1STRING1对应对应缓 冲 区 的 字缓 冲 区 的 字符串。符串。 宏展开是指在汇编过程中,当汇编到宏宏展开是指在汇编过程中,当汇编到宏调用语句时,它将用宏体中的一段程序来代调用语句时,它将用宏体中的一段程序来代替这条宏调用语句,并且语句中的形式参数替这条宏调用语句,并且语句中的形式参数被实际参数所取代。被实际参数所取代。 宏调用与展开宏调用与展开2 .2 .宏展开宏展开SHIFT MACRO N , REG , C
43、C MOV CL , N S&CC REG , CL ENDMCDISP MACRO MOV AH,02H INT 21H ENDM例如有如下的程序段:例如有如下的程序段: 宏定义:宏定义:形式参数形式参数 4.2.6 宏指令宏指令 MOV AL , BCD1 ;由由BCD1中取出中取出 ;一个字节的组合;一个字节的组合BCD码码 MOV DL , AL SHIFT 4 , DL , AR ;将将DL的内容右移的内容右移4次次 ADD DL , 30H CDISP ; 显示高位显示高位BCD码码 AND AL , 0FH ADD AL , 30H MOV DL, AL CDISP ;
44、显示低位显示低位BCD码码 宏调用:宏调用: 4.2.6 宏指令宏指令宏展开:宏展开:SHIFT MACRO N , REG , DIR MOV CL, N S&DIR REG,CL ENDM MOV MOV AL ,BCD1AL ,BCD1 MOV MOV DL ,ALDL ,AL SHIFT 4, SHIFT 4, DL ,ARDL ,AR + MOV + MOV CL ,4CL ,4 + SAR + SAR DL ,CLDL ,CL ADD ADD DL ,30H DL ,30H 宏体插入宏体插入 4.2.6 宏指令宏指令宏展开:宏展开:CDISP MACRO MOV AH, 0
45、2H INT 21H ENDM CDISP CDISP+ MOV AH,02H+ MOV AH,02H+ INT 21H+ INT 21H AND AL,0FH AND AL,0FH ADD AL,30H ADD AL,30H MOV DL,AL MOV DL,AL CDISP CDISP+ MOV AH,02H+ MOV AH,02H+ INT 21H + INT 21H 宏体插入宏体插入 4.2.6 宏指令宏指令 宏展开后,在每条宏调用指令语句后宏展开后,在每条宏调用指令语句后面是宏指令中所包含的语句(宏体),在面是宏指令中所包含的语句(宏体),在文件名文件名.LST.LST文件中,这些语
46、句前通常有标文件中,这些语句前通常有标志,如例中冠有加号志,如例中冠有加号+,也有些汇编程,也有些汇编程序汇编后在宏展开语句前冠以序汇编后在宏展开语句前冠以11。【例【例3-243-24】定义一条宏指令,可以实现移位操作功能。】定义一条宏指令,可以实现移位操作功能。 解:使用宏定义指令来完成,定义过程如下:解:使用宏定义指令来完成,定义过程如下: SHIFT MACRO REG X SHIFT MACRO REG X, N N MOV CL MOV CL,N N S&X REG S&X REG,CLCL ENDM ENDM 参数参数REGREG代表寄存器名,代表寄存器名,X X
47、代表操作码,代表操作码,N N代表移位次数。为了使参代表移位次数。为了使参数可以出现在指令助记符中,用数可以出现在指令助记符中,用& &符号连接。宏调用:符号连接。宏调用: SHIFT AX SHIFT AX,ARAR,3 3 SHIFT DL SHIFT DL,HRHR,6 6 宏展开:宏展开: +MOV CL, 3 +MOV CL, 3 +SAR AX, CL +SAR AX, CL +MOV CL, 6 +MOV CL, 6 +SHR DL, CL +SHR DL, CL86(2)取消宏定义伪指令 PURGEn格式:格式:n PURGE 宏指令名宏指令名,n功能:功能:n
48、 取消宏指令名的定义,可以同时取消多个宏取消宏指令名的定义,可以同时取消多个宏定义。定义。87宏指令与子程序的区别宏指令与子程序的区别 通过上述内容的介绍,宏指令在有些方通过上述内容的介绍,宏指令在有些方面与子程序十分相似,它们都可以是程序中面与子程序十分相似,它们都可以是程序中可能多次使用的一个程序段,在定义后,它可能多次使用的一个程序段,在定义后,它们都可以被调用,对于源程序的编写和程序们都可以被调用,对于源程序的编写和程序的调试都带来一定的方便。的调试都带来一定的方便。 但是宏指令与子程序也有许多不同之处,但是宏指令与子程序也有许多不同之处,子程序汇编后的机器码只出现在一处,而宏子程序汇
49、编后的机器码只出现在一处,而宏指令则不同,汇编后,凡是宏调用处都将被指令则不同,汇编后,凡是宏调用处都将被宏体所代替,所以,采用子程序可以节省内宏体所代替,所以,采用子程序可以节省内存,而宏指令则不节省内存。存,而宏指令则不节省内存。 但子程序执行时必须通过调用和返回使但子程序执行时必须通过调用和返回使主程序与子程序联系起来,而宏指令在执行主程序与子程序联系起来,而宏指令在执行时不需要这样的时间开销,因而宏指令在执时不需要这样的时间开销,因而宏指令在执行时时间上要比子程序短,特别是某些多次行时时间上要比子程序短,特别是某些多次使用的程序段本身就很短的时候,采用宏定使用的程序段本身就很短的时候,
50、采用宏定义,这一优点就更为明显。义,这一优点就更为明显。 程序设计中究竟采用子程序还是采用程序设计中究竟采用子程序还是采用宏指令要根据时间和空间矛盾的具体情况而宏指令要根据时间和空间矛盾的具体情况而定。定。 923.4.5 条件汇编n格式:格式: n IF n n ELSEn n ENDIFn功能:当条件为真,汇编程序段功能:当条件为真,汇编程序段1,跳过程序段,跳过程序段2;当条件为假,跳过程序段;当条件为假,跳过程序段1,汇编程序段,汇编程序段2。93(1 1)IF IF 表达式表达式 功能:表达式的值不为功能:表达式的值不为0 0,条件为真。,条件为真。(2 2)IFE IFE 表达式表
51、达式 功能:表达式的值为功能:表达式的值为0 0,条件为真。,条件为真。(3 3)IFB IFB 功能:参数为空,条件为真。功能:参数为空,条件为真。(4 4)IFNB IFNB 功能:参数不为空,条件为真。功能:参数不为空,条件为真。9495963.4.6 保护方式编程指令n保护方式和实地址方式以同样的方式使用和执行保护方式和实地址方式以同样的方式使用和执行指令,区别在于生成主存物理地址的不同。指令,区别在于生成主存物理地址的不同。n在实地址方式中,是段寄存器左移在实地址方式中,是段寄存器左移4 4位加偏移量位加偏移量而生成物理地址。而生成物理地址。n在保护方式中,段寄存器中是一个在保护方式
52、中,段寄存器中是一个1313位的选择符位的选择符,根据选择符可访问一个,根据选择符可访问一个8 8字节的描述符,再从字节的描述符,再从中获取段起始地址。中获取段起始地址。97保护方式控制指令n装 入 全 局装 入 全 局 / 中 断 描 述 符 表 寄 存 器 指 令中 断 描 述 符 表 寄 存 器 指 令LGDT/LIDTn装入局部描述符表寄存器指令装入局部描述符表寄存器指令LLDTn装入任务状态段寄存器指令装入任务状态段寄存器指令LTRn装入机器标志字指令装入机器标志字指令LMSWn调整选择符特权级调整选择符特权级RPL指令指令ARPLn清除任务切换标志清除任务切换标志CLTS98装入全
53、局/中断描述符表寄存器指令LGDT/LIDTn格式:格式:LGDT/LIDT SRCn功能:把功能:把SRC指定的指定的6B(48位)数据装入描述位)数据装入描述符表寄存器符表寄存器GDTR/IDTR中,前中,前2个兹节是描述个兹节是描述符表的界限值,后符表的界限值,后4个字节是描述符表线性基个字节是描述符表线性基地址值。对状态标志无影响。地址值。对状态标志无影响。n例:例:n LGDT DI99装入局部描述符表寄存器指令LLDTn格式:格式:LLDT SRCn功能:把功能:把SRC指定的数据作为选择符装入描述指定的数据作为选择符装入描述符表寄存器符表寄存器LDTR中。源操作数可以是中。源操作
54、数可以是16位寄位寄存器或存储器单元,其中选择符是指向全局描存器或存储器单元,其中选择符是指向全局描述表述表GDT中类型为中类型为LDT的选择符。对状态标志的选择符。对状态标志无影响。无影响。n例如:例如:n LLDT BX100装入任务状态段寄存器指令LTRn格式:格式:LTR SRCn功能:把功能:把SRC指定的数据作为选择符装入任务指定的数据作为选择符装入任务状态段寄存器状态段寄存器TR中,并使装入的任务状态段中,并使装入的任务状态段标记为忙,但不发生任务切换。源操作数可以标记为忙,但不发生任务切换。源操作数可以是是16位寄存器或存储器单元,它指向位寄存器或存储器单元,它指向GDT中一中
55、一个忙的个忙的TSS描述符。对状态标志无影响。描述符。对状态标志无影响。101装入机器标志字指令LMSWn 格式:格式:LMSW SRCLMSW SRCn 功能:把功能:把SRCSRC指定的数据装入控制寄存器指定的数据装入控制寄存器CR0CR0的低的低1616位。位。102调整选择符特权级RPL指令ARPLn格式:格式:ARPL DEST,REGn功能:若操作数功能:若操作数DEST的的RPL小于或等于操作小于或等于操作数数REG的的RPL,则,则ZF置置1,并用操作数,并用操作数REG的的RPL修改操作数修改操作数DEST的的RPL;若操作数;若操作数DEST的的RPL大于操作数大于操作数R
56、EG的的RPL,则,则DEST不变不变,ZF清清0。103清除任务切换标志CLTSn格式:格式:CLTSn功能:清除控制寄存器功能:清除控制寄存器CR0中的任务切换标志中的任务切换标志TS,即,即TS清清0。104保护参数检验指令n检查数组边界指令检查数组边界指令BOUNDn控制寄存器装入指令控制寄存器装入指令n控制寄存器存储指令控制寄存器存储指令n保存保存GDTR/IDTR指令指令SGDT/SIDTn保存保存LDTR指令指令SLDTn保存机器标志字指令保存机器标志字指令SMSW105检查数组边界指令BOUNDn 格式:格式:BOUND REG,MEMn 功能:检查数组下标(索引)是否违反了边
57、界功能:检查数组下标(索引)是否违反了边界,若违反则产生异常中断,若违反则产生异常中断5。106控制寄存器装入指令n 格式:格式:MOV CRn,SRCn 功能:把源操作数功能:把源操作数SRC指定的指定的32位寄存器中的位寄存器中的数据装入数据装入CR0、CR2或或CR3中。中。107控制寄存器存储指令n 格式:格式:MOV DEST,CRnn 功能:把控制寄存器功能:把控制寄存器CR0、CR2或或CR3中的数中的数据存入据存入DEST指定的指定的32位寄存器中。位寄存器中。108保存GDTR/IDTR指令SGDT/SIDTn 格式:格式:SGDT/SIDT DESTn 功能:把描述符表寄存
58、器功能:把描述符表寄存器GDTR/IDTR中的内中的内容存入容存入DEST指定的连续指定的连续6B(48位)单元中。位)单元中。109保存LDTR指令SLDTn 格式:格式:SLDT DESTn 功能:把局部描述符表寄存器功能:把局部描述符表寄存器LDTR中的内容中的内容存入存入DEST指定的指定的16位目的寄存器或存储器单位目的寄存器或存储器单元中。元中。110保存机器标志字指令SMSWn格式:格式:SMSW DESTn功能:把功能:把CR0的低的低16位存储到位存储到DEST指定的寄指定的寄存器或存储器单元中。存器或存储器单元中。111进入保护方式n在开机或在开机或RESET复位之后,复位
59、之后,80486进入实地址方进入实地址方式,如果进入保护方式需要对各系统表和寄存式,如果进入保护方式需要对各系统表和寄存器进行初始化。器进行初始化。n建立全局建立全局/中断描述符表中断描述符表GDT/IDT、任务状态段、任务状态段TSS等;等;n执行指令执行指令MOV CRn,SRC,将控制寄存器,将控制寄存器CR0中的中的PE置置1。n在进入保护方式后首先执行段间跳转在进入保护方式后首先执行段间跳转JMP,转,转向保护方式下的初始化程序,对代码段寄存器向保护方式下的初始化程序,对代码段寄存器CS、数据段寄存器、数据段寄存器SS、DS、ES、FS、GS及任及任务状态段寄存器务状态段寄存器TR等
60、进行设置。等进行设置。1121133.5 汇编语言程序设计概述n一个完整的程序一般由若干段构成,即数据一个完整的程序一般由若干段构成,即数据段、代码段、堆栈段,有时还有附加段,其段、代码段、堆栈段,有时还有附加段,其核心是代码段。核心是代码段。n程序可分为顺序程序、分支程序、循环程序程序可分为顺序程序、分支程序、循环程序和子程序。和子程序。114设计步骤可归纳如下:设计步骤可归纳如下: (1 1)分析问题,确定算法;)分析问题,确定算法; (2 2)绘制流程图;)绘制流程图; (3 3)编写程序;)编写程序; (4 4)上机调试。)上机调试。115概述顺序程序设计n顺序程序是按照指令序列顺序执行。顺序程序是按照指令序列顺序执行。116n【例【例3-25】 把字节存储单元把字节存储
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗领域中的隐私保护与区块链技术的深度融合及合规性分析
- 固体物理总结模版
- 专利合作使用合同范例
- 青岛版二年级下册数学第二单元教学设计
- 以教育为例探讨区块链在增强信息传递中的关键作用
- 光纤面板采购合同范例
- 浙江省钱塘联盟2024-2025学年高一下学期4月期中联考试题 化学 PDF版含答案
- 医疗养老服务经济价值分析
- 医疗科技融合背景下的数据隐私保护技术
- 医疗健康物联网的隐私保护与数据安全
- 门窗知识讲解课件
- 道路材料知识培训课件总结
- 屋顶分布式光伏电站建设
- 镇痛药物在糖尿病足疼痛治疗中的效果评估
- 北京南站流线分析报告
- SL176-2007 水利水电工程施工质量检验与评定规程
- 咖啡品鉴大全
- 医用耗材配送服务方案
- 狂犬病暴露预防处置工作规范(2023年版)课件
- 成品可靠性测试计划
- 反腐倡廉廉洁行医
评论
0/150
提交评论