您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第4章 汇编语言程序设计基本方法
1第4章汇编语言程序设计基本方法内容提要:基本概念8086/8088指令系统汇编语言程序设计的基本方法汇编语言程序的编辑、汇编与连接2/320基本概念之机器语言机器(CPU)能直接认识的一种二进制代码语言。CPU能认识的一组二进制代码就是一条指令。如:B0H12H05H02H00H这一组二进制代码,就是告诉CPU将AL12H。这一组二进制代码,就是告诉CPU将(AL)+2AX。就是一条指令代码,或者机器语言代码3/320基本概念之机器语言程序采用机器语言编写的程序,即二进制代码程序。优点:程序送入计算机后,CPU可以直接执行。缺点:不易书写,不易检查,编写程序十分困难4/320基本概念之汇编语言汇编语言为了克服机器语言不易书写、记忆复杂等缺点,人们采用一组字母、数字和符号来代替一条二进制代码指令,这种表示指令的符号称为助记符。这种用一组符号来代替一条指令编写程序时采用的语言,称为汇编语言。汇编语言程序用汇编语言编写的程序称为汇编语言程序,或者称为汇编语言源程序。这种编程方法称为汇编语言程序设计。汇编语言源程序名必须为:文件名.ASM。5/320基本概念之汇编语言优点:要比一串二进制代码清晰多了,书写容易,记忆也方便。缺点:CPU不能直接执行。用汇编语言编写的汇编语言源程序必须经过汇编,将其翻译成机器语言格式,CPU才能执行。例如:6/320基本概念之汇编汇编把汇编语言源程序翻译成机器语言程序的过程称为汇编。汇编程序能把汇编语言源程序翻译成机器语言程序的系统程序(语言加工程序)。8086宏汇编程序为MASM.EXE。7/320基本概念之汇编8/320从汇编语言源程序到可执行程序所经过的处理过程9/320汇编语言的语句有两种基本类型:指令和伪指令。指令可以通过汇编程序翻译成机器语言指令,它与机器语言指令基本上是一一对应的。伪指令不汇编成机器语言指令,仅仅在汇编过程中帮助汇编程序(MASM.EXE)完成汇编过程。所以,伪指令是在汇编时使用的,在汇编过程完成后,它就不在目标程序中了。指令和伪指令都是汇编语言的基本语句。宏指令,程序员利用基本语句自己定义的新指令,一条宏指令可以对应多条基本指令。汇编语言10/3204.1.2汇编语言中语句的组成汇编语言的源程序是由一条条语句组成的,语句则由标识符、操作助记符、操作数、注释四部分组成。其中,操作助记符指出该条语句的基本操作功能,是必须有的部分。而[]项可有可无,视情况而定。若是指令语句,标识符就是一个标号名,以冒号结尾;若是伪指令语句,标识符就是变量名或者段名等,以空格结尾。[标识符]空格或:操作助记符空格[操作数];[注释]11/320CYCLE:ADDAX,02;(AX)←(AX)+2DATA1DB20H,30H,40H,50H标识符操作助记符操作数注释标识符操作助记符操作数汇编语言中语句的组成(2)12/320标识符标识符的命名规则:①可由大小写英文字母,数字(0、……、9)以及特殊符号(?、.、@、-、$)组成。②标识符必须由字母打头,若标识符中有圆点符,则圆点符必须作为第一个字符,数字不能作第一个字符。③构成名称的字符总数可以多达31个,超过31个字符的部分无效。④不能使用系统保留字。标识符分为标号和名称两大类。通常把指令前的标识符称为标号,书写时在标号和指令之间加冒号;把定义数据(或变量)的伪指令和其它伪指令之前的标识符称为名称,书写时在名称和伪指令之间加空格。汇编语言中语句的组成(3)13/320若语句带有标识符,通常都表示该标识符后面各项在内存存放的第一个存储单元的地址(包括段地址和段内偏移地址),也称符号地址。标识符不是所有语句都必须的。汇编语言中语句的组成(4)CYCLE:ADDAX,02;DATA1DB20H,30H,40H,50H14/320操作助记符①操作助记符是语句的必要部分,每条语句都必须要有操作助记符。②操作助记符指出该语句的基本操作功能③它是汇编语言中规定了明确含义的一组符号,不能随意使用。例如:ADDAX,5DB20H其中“ADD”是操作助记符,代表着加法;“DB”也是操作助记符,表示定义字节变量汇编语言中语句的组成(5)15/320操作数①操作数可以是立即数,寄存器,内存地址。②操作数不是每条语句所必需的。例如:LAHF;(AH)(FLAG低8位)③若语句为伪指令,则可以有多个操作数,操作数之间应用逗号“,”分隔,而操作数与操作助记符之间必须以空格分隔。例如:DB20H,30H,40H,50H汇编语言中语句的组成(6)16/320注释①分号及分号以后的内容叫注释。②注释仅仅用作语句或程序段的说明,它不是程序可执行的部分,汇编时不会形成机器代码。③汇编语言的注释是单行注释,如果注释的语句部分超过一行,另起一行时,还要以分号开头。汇编语言中语句的组成(7)17/3204.1.3汇编语言的常数和表达式1、常数常数可以分为数值常数和字符串常数两类。数值常数①数值常数按其数制基数的不同,分为二进制、八进制、十进制、十六进制等几种不同的形式,分别用不同的后缀来表示:B:二进制。例如:10110011BO:八进制。例如:263OD:十进制。例如:179D或179H:十六进制。例如:B3H。18/320②当一个数值数据后面没有后缀的时候,将默认为十进制。③汇编语言中数值常数的第一位必须是数字,否则汇编时将被看成是标识符。例如:十六进制FFH应表示为0FFH。汇编语言的常数和表达式(2)19/320字符串常数字符串常数是由单引号括起来的一串字符。例如:‘THISISASUBROUTINE’‘179’注意:此处的’179’并不代表十进制数179,而是字符1、7、9的ASCII码,即31H,37H和39H。汇编语言的常数和表达式(3)20/3202、表达式表达式是由操作数和操作符组成的,操作数可以是常数或标识符或表达式。算术操作符:+、-、*、/、MOD。①算术运算都是双操作数,操作数必须为数字,例如:5+9②MOD运算的两个操作数必须都为正整数,该运算是取两数相除的余数,例如:79MOD16=150B5HMOD10H=05H汇编语言的常数和表达式(4)21/320逻辑操作符:AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(逻辑异或)。①逻辑运算的两个操作数的值也应为数字,②两数进行逻辑运算的时候按位进行。关系操作符①主要有:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)②关系运算的操作数也必须是数字。当关系成立时,其结果为全1;否则,其结果为全0。汇编语言的常数和表达式(5)22/320说明:汇编语言中的表达式不能单独构成语句,只能是语句的一部分,例如:MOVAX,BUF+2ADDAL,VALAND0FHJMPAGAIN+3MOVBL,VBLEVA语句中表达式的求值不是在执行指令时完成的,而是在对源程序进行汇编时完成的。即语句中各表达式的值在汇编时必须是确定的。汇编语言的常数和表达式(6)23/320§4.1.4标号、变量及伪指令1、标号标号是写在指令前的标识符,用以指示对应指令在内存中的存储地址,也称符号地址。标号有三个属性:段地址、偏移地址和类型。段地址和偏移地址指标号所对应的指令的段地址和偏移地址类型属性有两种,即NEAR和FAR。NEAR类型表示该标号在段内使用(指针长度为2个字节),是默认类型;FAR类型表示该标号可以在段间使用(指针长度为4个字节)。24/320标号的基本定义方法是在指令的操作助记符前加上标识符和冒号,例如:START:PUSHDSSTART就为一个标号,它代表了指令PUSH的地址,从而标号可以作为程序转移指令的操作数,即要转向的地址。例如:JZSTART标号、变量及伪指令(2)25/3202、变量变量的值在程序运行时是可以改变的。变量定义汇编语言中的变量是通过伪指令定义的,其格式如下:变量名DB表达式;定义字节变量变量名DW表达式;定义字变量变量名DD表达式;定义双字变量变量名DQ表达式;定义四字变量变量名DT表达式;定义十字节变量标号、变量及伪指令(3)26/320说明:变量名是一个标识符,变量名后面只能用空格。变量的类型由变量名后面的关键字DB、DW、DD、DQ、DT确定。格式中的表达式可以有如下几种情况:①一个或多个常数或表达式。如为多个的时候,中间用逗号隔开。②带引号的字符串。③一个问号?,表示任意值。④重复方式。此时表达式的格式为:重复次数DUP(表达式)标号、变量及伪指令(4)27/320DATA1DB20HDATA2DW0204H,1000HDATA3DB(-1*3),(15/3)DATA4DD12345HDATA5DB‘0123’DATA6DW‘AB’,‘C’,‘D’DATA7DB?DATA8DD?DATA9DB5DUP(00)DATA10DW3DUP(?)例1:变量的定义0100:0000H28/320DATA1DB20HDATA2DW0204H,1000HDATA3DB(-1*3),(15/3)DATA4DD12345HDATA5DB‘0123’DATA6DW‘AB’,‘C’,‘D’DATA7DB?DATA8DD?DATA9DB5DUP(00)DATA10DW3DUP(?)0100:0000HDATA120H例1:变量的定义29/320DATA1DB20HDATA2DW0204H,1000HDATA3DB(-1*3),(15/3)DATA4DD12345HDATA5DB‘0123’DATA6DW‘AB’,‘C’,‘D’DATA7DB?DATA8DD?DATA9DB5DUP(00)DATA10DW3DUP(?)0100:0000HDATA120H0001H04H02H00H10HDATA20002H0003H0004H例1:变量的定义30/320DATA1DB20HDATA2DW0204H,1000HDATA3DB(-1*3),(15/3)DATA4DD12345HDATA5DB‘0123’DATA6DW‘AB’,‘C’,‘D’DATA7DB?DATA8DD?DATA9DB5DUP(00)DATA10DW3DUP(?)0100:0000HDATA120H0001H04H02H00H10HDATA20002H0003H0004HFDH05HDATA30005H0006H例1:变量的定义31/320DATA1DB20HDATA2DW0204H,1000HDATA3DB(-1*3),(15/3)DATA4DD12345HDATA5DB‘0123’DATA6DW‘AB’,‘C’,‘D’DATA7DB?DATA8DD?DATA9DB5DUP(00)DATA10DW3DUP(?)0100:0000HDATA120H0001H04H02H00H10HDATA20002H0003H0004HFDH05HDATA30005H0006H45H23H01H00HDATA40007H0008H0009H000AH例1:变量的定义32/320DATA1DB20HDATA2DW0204H,1000HDATA3DB(-1*3),(15/3)DATA4DD12345HDATA5DB‘0123’DATA6DW‘AB’,‘C’,‘D’DATA7DB?DATA8DD?DATA9DB5DUP(00)DATA10DW3DUP(?)0100:0000HDATA120H0001H04H02H00H10HDATA20002H0003H0004HFDH05HDATA30005H0006H45H23H01H00HDATA40007H0008H0009H000AH30H31H32H33HDATA5000BH000CH000DH000EH例1:变量的定义33/320DATA1DB20HDATA2DW0204H,1000HDATA3DB(-1*3),(15/3)DATA4DD12345HDAT
本文标题:第4章 汇编语言程序设计基本方法
链接地址:https://www.777doc.com/doc-4026779 .html