资源描述
第四章汇编语言程序设计 用汇编语言编写的程序称为汇编语言源程用汇编语言编写的程序称为汇编语言源程序,将汇编语言源程序翻译成机器语言的序,将汇编语言源程序翻译成机器语言的系统程序称为汇编程序系统程序称为汇编程序assemblerassembler,翻译翻译的过程叫做汇编的过程叫做汇编assembleassemble。汇编程序有两汇编程序有两种:种:ASMASM小汇编程序,小汇编程序,MASMMASM宏汇编程序。宏汇编程序。1 汇编语言指令到机器指令的示意图汇编语言指令到机器指令的示意图 24.1.1 汇编语言源程序的结构数据段名数据段名 SEGMENT 数据段名数据段名 ENDS附加数据段名附加数据段名 SEGMENT 附加数据段名附加数据段名 ENDS堆栈段名堆栈段名 SEGMENT 堆栈段名堆栈段名 ENDS代码段名代码段名 SEGMENT 代码段名代码段名 ENDS END每段以SEGMENT语句开始整个程序以END语句结束以ENDS语句结束3下面举例来加以说明:这是一个两个字相加的程序这是一个两个字相加的程序 DSEG SEGMENT ;定义数据段定义数据段 DATA1 DW 0F865H ;定义被加数定义被加数 DATA2 DW 360CH ;定义加数定义加数 DSEG ENDS ;数据段结束数据段结束 ESEG SEGMENT ;定义附加段定义附加段 SUM DW 2 DUP(?);定义存放结果区定义存放结果区 ESEG ENDS ;附加段结束附加段结束 4CSEG SEGMENT ;定义代码段定义代码段ASSUME CS:CSEG,DS:DSEG,ES:ESEGSTART:MOV AX,DSEG MOV DS,AX ;初始化初始化DS MOV AX,ESEG MOV ES,AX ;初始化初始化ES LEA SI,SUM ;存放结果的偏移地址送存放结果的偏移地址送SI MOV AX,DATA1 ;取被加数取被加数 ADD AX,DATA2 ;两数相加两数相加 MOV ES:SI,AX ;和送附加段的和送附加段的SUM单元单元中中 HLT CSEG ENDS ;代码段结束代码段结束 END START ;源程序结束源程序结束5总结:1 1、标号域、标号域语句中的标号是一个标示符,表示一条指令所在的存语句中的标号是一个标示符,表示一条指令所在的存储单元的地址,或叫符号地址。储单元的地址,或叫符号地址。2 2、操作码域:所有指令的助记符、伪指令等都在操作、操作码域:所有指令的助记符、伪指令等都在操作码域。码域。3 3、操作数域:操作数以逗号间隔。操作数可以是常数、操作数域:操作数以逗号间隔。操作数可以是常数、寄存器、标号、变量、表达式。寄存器、标号、变量、表达式。4 4、注释域:说明。、注释域:说明。标号和操作码之间用冒号,或空格;操作码和操作数标号和操作码之间用冒号,或空格;操作码和操作数之间用空格;操作数和注释之间用分号。之间用空格;操作数和注释之间用分号。64.1.2 4.1.2 汇编语言语句类型汇编语言语句类型语句类型:指令性语句、指示性语句语句类型:指令性语句、指示性语句指令性语句由指令组成、指令性语句由指令组成、CPUCPU可以执行;可以执行;指示性语句用来告诉编译程序指示性语句用来告诉编译程序MASMMASM如何对源程序进行如何对源程序进行汇编,它不生成目标代码,不由汇编,它不生成目标代码,不由CPUCPU执行,所以常称执行,所以常称为为伪操作指令;伪操作指令;例如:例如:START:MOV AX,DATASTART:MOV AX,DATA DATA DB 11H,12H,13H DATA DB 11H,12H,13H区别:区别:STARTSTART是指令性语句的标号,它是指令的符号地是指令性语句的标号,它是指令的符号地址址,后边通常加上后边通常加上“:”;DATADATA是是指示性语句的名指示性语句的名字,名字通常表示变量名、段名和过程名,后边不字,名字通常表示变量名、段名和过程名,后边不加加“:”指示性语句中的操作数可以有多个,相互指示性语句中的操作数可以有多个,相互之间用逗号分开;之间用逗号分开;74.1.3 数据项及表达式操作数可以是寄存器、存储器单元或数据项。存储器操作数可以是寄存器、存储器单元或数据项。存储器可以按字节、字、双字可以按字节、字、双字Double Word、四字四字Quad Word、十字节操作。而数据项又可以是常量、标十字节操作。而数据项又可以是常量、标号、变量或表达式。号、变量或表达式。1、常量、常量:分为数字常数和字符串常数。:分为数字常数和字符串常数。B:二进制二进制D:十进制,可以省略十进制,可以省略H:十六进制(以字母开始的十六进制(以字母开始的16进制数,要在前面进制数,要在前面加一个加一个0)字符串常数用字符串常数用单引号括起来,编译程序将其翻译单引号括起来,编译程序将其翻译成成ASCII码。码。8 2 2、标号、标号LabelLabel指令的标号由程序员确定指令的标号由程序员确定:不能与指令助记符或伪指令重名;不能与指令助记符或伪指令重名;不允许由数字打头;不允许由数字打头;字符个数不超过字符个数不超过3131个;个;标号标号代表存放一条指令的存储单元的地址;代表存放一条指令的存储单元的地址;标号可以作为程序转移、过程调用、循环控制等标号可以作为程序转移、过程调用、循环控制等指令的操作数;指令的操作数;标号有三种属性:标号有三种属性:段、偏移量、类型段、偏移量、类型偏移量是一个偏移量是一个16位的无符号数;位的无符号数;类型有两种:近过程属性类型有两种:近过程属性NEAR(2字节)和远过字节)和远过程属性程属性FAR(4字节);字节);9DELAY PROCPUSH BX PUSH CX MOV BL,2NEXT:MOV CX,2801HW20ms:LOOP W20msDEC BLJNZ NEXTPOP CXPOP BXRETDELAYENDP10 3 3、变量、变量VariableVariable变量是存储器中某个数据区的首地址,在指令中可以变量是存储器中某个数据区的首地址,在指令中可以作为存储器操作数使用;变量也具有三种属性:段、作为存储器操作数使用;变量也具有三种属性:段、偏移量、类型偏移量、类型段值:段值:一般在一般在DSDS或或ESES寄存器;寄存器;变量的变量的类型:类型:有有BYTEBYTE、WORDWORD、DWORDDWORD、QWORDQWORD、TBYTETBYTE;常用数据类型伪指令常用数据类型伪指令DBDB、DWDW、DDDD、DQDQ、DTDT来定义来定义。例如:例如:NUM DB 11H,22H,33HNUM DB 11H,22H,33HDATA2DATA2 DW 100H,200H DW 100H,200H 长度长度LENGTH:变量的个数。变量的个数。大小大小SIZE:分配给同一变量名的所有分配给同一变量名的所有 变量的总字节数。变量的总字节数。11变量名与标号名的区别:变量名与标号名的区别:变量名是变量的符号地址,标号是指令的符号变量名是变量的符号地址,标号是指令的符号地址。例如:地址。例如:MOV AX,VAR1 MOV BL,VAR2 JMP DONE DONE:ADD AL,512 4 4、表达式、表达式表达式由常数、标号、变量、寄存器和运算符组成。表达式由常数、标号、变量、寄存器和运算符组成。表达式不是指令,本身不能执行。表达式不是指令,本身不能执行。表达式中的运算是在汇编时完成的,而不是在指令执表达式中的运算是在汇编时完成的,而不是在指令执行时完成的。行时完成的。表达式常用运算符有:表达式常用运算符有:1)1)算术运算符算术运算符:+:+、-、*、/和和MODMOD(取余数)取余数)2)2)逻辑运算符逻辑运算符:AND:AND、OROR、XORXOR、NOTNOT3)3)关系运算符:关系运算符:EQ(EQ(等于等于)、NENE(不等于)、不等于)、LT(LT(小于小于)、GT(GT(大于大于)、LELE(小于等于)、小于等于)、GEGE(大于等于)大于等于)4)4)取值运算符取值运算符:OFFSET:OFFSET、SEGSEG5)5)属性运算符:属性运算符:PTRPTR6)6)其他运算符:其他运算符:、:、:13表达式中的运算符1、算术运算符:算术运算符:+、-、*、/、求余、求余(MOD)、它们运算它们运算的结果都取整数。的结果都取整数。MOV AL,8+5MOV AX,NUM+822、逻辑运算符逻辑运算符 与与AND、或、或OR、异或异或XOR、非、非NOT四种,逻辑运四种,逻辑运算符只能用于数值表达式算符只能用于数值表达式,结果也是数值,不能用结果也是数值,不能用于地址表达式中。于地址表达式中。例:例:AND AL,0ADH AND 0CCH 注意:逻辑运算符与逻辑运算指令在形式上相同,注意:逻辑运算符与逻辑运算指令在形式上相同,但是逻辑运算指令出现在指令码段,逻辑运算符出但是逻辑运算指令出现在指令码段,逻辑运算符出现在操作数段。现在操作数段。14 3、关系运算符、关系运算符相等相等EQ、不相等不相等NE、小于小于LT、大于大于GT、小于等于小于等于LE、大于等于大于等于GE例:例:MOV AX,4 EQ 3MOV AX,4 NE 3 关系运算符可对两个性质相同的数据进行关系运算,关系运算符可对两个性质相同的数据进行关系运算,这两个数据可以是数字,也可以是同一个段区域中这两个数据可以是数字,也可以是同一个段区域中的两个存储器地址。如果表达式成立,则运算结果的两个存储器地址。如果表达式成立,则运算结果为真为真TRUE,输出结果为全输出结果为全1;若表达式不成立,则;若表达式不成立,则表示结果为假表示结果为假FALSE,输出为全输出为全0。汇编之后:汇编之后:MOV AX,0 MOV AX,0FFFFH 15 4、取值运算符和类型运算符、取值运算符和类型运算符nSEGSEG、OFFSETOFFSET又称为数值返回运算符,用以获又称为数值返回运算符,用以获取变量或标号的属性。取变量或标号的属性。例:例:MOV AX,SEG BUFFERMOV AX,SEG BUFFERMOV AX,OFFSET BUFFERMOV AX,OFFSET BUFFERnPTRPTR是类型运算符:是类型运算符:CALL DWORD PTRBXCALL DWORD PTRBXMOV AL,BYTE PTRSIMOV AL,BYTE PTRSI164.2 伪指令伪指令由编译程序执行,不参与程序的运行;伪指令由编译程序执行,不参与程序的运行;功能:定义数据、存储区分配、定义段、定功能:定义数据、存储区分配、定义段、定义过程等。义过程等。常用的伪操作指令:常用的伪操作指令:1.1.数数据定据定义伪义伪指令指令 2.2.符符号号定定义伪义伪指令指令 3.3.设设定段寄存器定段寄存器伪伪指令指令 4.4.过过程定程定义伪义伪指令指令5.5.宏命令宏命令伪伪指令指令 6.6.模模块块定定义义与与连连接接伪伪指令指令 174.2.1 数据定义伪指令数据定义伪指令用来定义一个变量,说明变量的类型,数据定义伪指令用来定义一个变量,说明变量的类型,给变量分配存储空间,并赋初值。一般格式为:给变量分配存储空间,并赋初值。一般格式为:变量名变量名 伪操作助记符伪操作助记符 操作数操作数1,操作数,操作数2,操作数可以是常数、字符或字符串、表达式、操作数可以是常数、字符或字符串、表达式、?常用的数据定义伪操作有常用的数据定义伪操作有5种:种:DB:定义字节类型的变量定义字节类型的变量如:如:DELY1DB 11H,22H,33H,44HDELY2DBHELLODATA1DB?,?DW:定义字类型的变量定义字类型的变量DATA2DW100H,200HNUM DW 1005+88 11H22H33H44HHELLODELY1DELY218DD:定义双字类型
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关搜索