资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,11/7/2009,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第四章,8086,汇编语言程序设计,几个概念,8086,汇编语言的语句,8086,汇编中的伪指令,8086,汇编中的运算符,汇编语言程序设计,宏定义与宏调用,系统调用,第四章 8086汇编语言程序设计几个概念,几个概念,汇编语言,汇编语言源程序,汇编,汇编程序,几个概念汇编语言,什么是汇编程序?,汇编语言源程序不能由机器直接执行,必须翻译成由机器代码组成的目标程序,这一过程称为,汇编,。把汇编语言源程序翻译成目标程序的软件称为,汇编程序,。如8086 系统的汇编程序ASM-86,及其扩展功能后的8086宏汇编程序MASM-86。,什么是,汇编语言,?,汇编语言,是一种采用助记符(英文缩写)表示的程序设计语言。使用汇编语言编写的程序称为,汇编语言源程序,。它与机器语言(0、1编写的代码)密切相关。,什么是汇编程序?什么是汇编语言?汇编语言是一,机器语言与汇编语言,机器语言:机器语言是计算机硬件系统能够直接识别,的计算机语言,每一条语句实际上是一条,二进制,形式的指令代码,由操作码和操作,数组成。参见P52-53,汇编语言:汇编语言用,助记符,代替操作码,用,符号地,址,代替操作数。,机器语言与汇编语言机器语言:机器语言是计算机硬件系统能够直接,4.1 8086,汇编语言的语句,汇编语言由指令性语句和指示性语句组成。,一、指令性语句格式,标号:操作码 操作数1,操作数2;注释,二、指示性语句格式,标识符(名字)指示符(伪指令)表达式,三、有关属性,存储器操作数的属性有三种:段值、段内偏移量和,类型。,4.1 8086汇编语言的语句 汇编语言由指令性语句和,指令语句的一般格式如下:,标号:,操作码,操作数;注释,1、标号:标号是机器指令语句存放,地址,的符号表示,,代表该指令目标代码的第一个字节地址,后,面必须紧跟冒号“:”。,2、操作码:操作码为语句的核心成分,表示该语句的,操作类型。,3、操作数:操作数表示操作码的操作对象。,4、注释:注释均以,分号,开始,它可占一行或多行,一,般放在一条语句的后面。,指令语句的一般格式如下:,伪指令语句格式,伪指令语句格式如下:,标识符,伪指令,表达式;注释,标识符,:,标识符,是伪指令语句的一个可选项。,伪指令,:,伪指令,指定汇编程序要完成的具体操,作,如,规定,的数据定义伪指令,DB、DW、DD,,段,定义伪指令,SEGMENT,,说明伪指令,ASSUME,等。,表达式,:伪指令后面的,表达式,可以是常数、字符,串、常量名、变量名等,其个数由具体的伪指令决,定,各个操作数之间必须以“,逗号,”分隔。,注释,:伪指令的,注释,必须以“;”开始,其作用同,指令语句中的注释部分。,空格,伪指令语句格式伪指令语句格式如下:空格,存储器操作数即变量,变量,通常是存放在某些存储单元的,数据,,以变量名的形式出现在程序中,可代表符号地址、数据区或存储区的,第一个数据单元,,如BUF。,变量是用数据定义,伪指令,DB、DW、DD等定义的。,变量的三种属性:,段属性(SEGMENT):,表示变量存放在哪一个逻,辑段中(即变量所在段的段地址)。,偏移属性(OFFSET):,表示变量的偏移地址,即,在逻辑段中距段的起始点的字节数,类型属性(Type):,表示变量占用存储单元的字节,数。用DB定义的变量类型属性为字节;用DW定义,的变量类型属性为字(2B);用DD定义的变量类,型属性为双字(4B)。,存储器操作数即变量 变量通常是存放在某些存储单元的,4.2 8086,汇编中的伪指令,一、符号定义语句,1、等值语句,格式:符号名,EQU,表达式,功能:为,常量,、,表达式,及其他各种,符号,定义一个,等值,的,符号名,,但它,不申请存储单元,。不,允许重新定义。,例:,PORT EQU 1234,BUFF EQU PORT58,MEM EQU DS:BP20H,COUNT EQU CX,ABC EQU AAA,4.2 8086汇编中的伪指令一、符号定义语句,2、等号语句,格式:符号名=表达式,功能:为,常量,、,表达式,及其他各种,符号,定义一个,等值,的,符号名,,并能对所定义的符号多次,重复,定义,且以,最后一次,定义的值为准。,例:NUM34,NUM341,第04章汇编程序设计语言课件,二、变量定义语句,格式:符号名 DB/DW/DD 表达式,二、变量定义语句,1、定义一组数据,例1:,BUFF DW 1234H,0ABCDH,8EH,DW 79DH,7B6AH,可以为一个或连续的,存储单元,设置数值初值,。,2、定义一串字符,例2:,STR DB Welcome!,用DB伪指令为ASCII字符串中的每一个字符分配一个,字节单元,,字符串必须用单引号括起来。,3、定义保留存储单元,例3:,SUM DW?,?,为数据项分配,存储单元,的一种方法,只是存储单元中不预置确定的值,常用来预留存储单元。,1、定义一组数据,4、复制操作,复制操作符,DUP(Duplication),可预置重复的数值,n DUP,(表达式),例4:,ALL_ZERO DB 0,0,0,0,0,用复制操作可改为:,ALL_ZERO DB 5 DUP(0),为若干重复数据单元,分配存储单元,。,5、将已定义的地址存入内存单元,例5:,LIT DD CYC,CYC:MOV AX,BX,4、复制操作,三、段定义语句,1、段定义语句格式:,段名,SEGMENT,定位类型 组合类型 类别,段名,ENDS,段定义伪指令用于将源程序划分成若干段,即代码段(存放程序),数据段(存放数据),堆栈段,附加段。,只需要掌握,段名,SEGMENT,段名,ENDS,三、段定义语句,2、段假设语句,ASSUME,段寄存器名:段名,功能:向汇编程序指示当前各段所用的段寄存,器,设定段寄存器与段的关系。,3、,ORG,伪指令、地址计数器,$,格式:,ORG,功能:指定在它之后的代码或数据存放的起始地,址的偏移量,以表达式的值作为起始地,址,连续存放程序或数据。,$代表当前的地址。,4、,END,表示源代码结束,格式:,END,常数或表达式,功能:该语句标志整个程序的结束,是源程序的,最后一条语句。,2、段假设语句,四、过程定义语句,过程名,PROC NEAR/FAR,RET,过程名,ENDP,功能:,完成过程定义,在过程体中实现过程的操作功,能。当一程序块被定义为过程后,程序中其他,地方就可用CALL指令调用该过程。,调用过程的格式为:,CALL 过程名,过程名实质上是过程入口的符号地址,它和,标号,一样,也有三种属性:段、偏移量和类型(距离)。,一般来说,被定义为过程的程序块中应该有返回,指令RET,执行RET指令后,控制返回到原来调用指,令的下条指令。,四、过程定义语句,4.3 8086,汇编中的运算符,一、常用运算符,1、算术运算符,(加)、,(减)、*(乘)、/(除)、,MOD,(求余)。,2、逻辑运算符,AND、OR、XOR、NOT,4.3 8086汇编中的运算符 一、常用运算符,3、关系运算符,EQ,(相等)、,NE,(不等、)、,LT,(小于)、,GT,(大于)、,LE,(小于等于)、,GE,(大于等于)。,关系成立,全,1,关系不成立,全,0,例:,MOV DL,10H LT 16 ;,MOV DL,0,例:,AND AX,555 GT 222 ;,AND AX,0FFFFH,3、关系运算符,二、常用的操作符,4、分析操作符,1),SEG,操作符,取,段,地址,例:,MOV AX,SEG BUFF,2),OFFSET,操作符,取地址的,偏移,量,例:,MOV BX,OFFSET BUFF,二、常用的操作符,3),TYPE,操作符,对于变量有3种:,1,字节型;,2,字型;,4,双字型。,对于标号有2种:,1NEAR,(段内);,2FAR,(段间)。,例:,BUFF DB 20H,MOV BX,TYPE BUFF,MOV BX,01,3)TYPE操作符,4),LENGTH,操作符,格式:,LENGTH,变量名,功能:返回一个变量名所占,存储单元,(字节、字,或双字)的数目。若用重复定义子句说,明,则返回,DUP,前的数字;若没有,DUP,说明,则返回值总是,1,。,5)SIZE操作符,SIZETYPELENGTH,例:,BUFF DW 10 DUP(?),MOV CX,LENGTH BUF;,MOV CX,10,MOV CX,SIZE BUF;,MOV CX,20,4)LENGTH操作符,5、综合运算符(合成操作符),功能:1、由已有的操作数建立新的操作数;,2、新操作数和已有的操作数类型不一样。,新的类型只在,当前指令内有效,。,1),PTR,运算符,格式:类型,PTR,表达式,例:,INC WORD PTR BX,wx DW 1234H,MOV AL,BYTE PTR wx,MOV AH,BYTE PTR wx+1,2),THIS,操作符,格式:,THIS,类型(或属性),例:,FIRST EQU THIS BYTE,SECOND DW 100 DUP (?),运算符的优先级别见p96。,PTR:已分配存,储器单元;,THIS:不分配存,储器单元。,5、综合运算符(合成操作符)PTR:已分配存,4.4,汇编语言程序设计,常用的汇编语言程序框架:,DATA SEGMENT;定义数据段,VAL1 DB 12H,8EH ;定义变量,DATA ENDS ;数据段结束,CODE SEGMENT;定义代码段,ASSUME DS:DATA,CS:CODE;段属性说明,START:MOV AX,DATA;初始化DS,MOV DS,AX,MOV AX,4C00H;返回DOS,INT 21H,CODE ENDS ;代码段结束,END START ;源程序结束,4.4 汇编语言程序设计 常用的汇编语言程序框架:,特点,程序分段,语句由指令性和指示性语句组成,两种程序框架,特点,框架一:,DATA SEGMENT;定义数据段,VAL1 DB 12H,8EH ;定义变量,DATA ENDS ;数据段结束,CODE SEGMENT;定义代码段,ASSUME DS:DATA,CS:CODE;段属性说明,START:MOV AX,DATA;初始化DS,MOV DS,AX,;填写代码,MOV AX,4C00H;返回DOS,INT 21H,CODE ENDS ;代码段结束,END START ;源程序结束,框架一:,框架二:,DATA SEGMENT;定义数据段,VAL1 DB 12H,8EH ;定义变量,DATA ENDS ;数据段结束,CODE SEGMENT;定义代码段,MAIN PROC FAR,ASSUME DS:DATA,CS:CODE;段属性说明,START:PUSH DS,MOV AX,0,PUSH AX,MOV AX,DATA,MOV DS,AX,;填写代码,RET,MAIN ENDP,CODE ENDS ;代码段结束,END START ;源程序结束,框架二:,一、汇编语言程序设计基本步骤,分析问题,确定模型,确定算法,绘制流程图,编写程序,检查和调试,二、汇编语言程序的基本结构,一、汇编语言程序设计基本步骤,1、顺序结构,p97,1、顺序结构,2、分支结构,2、分支结构,举例p98,实现,举例p98实现,用查表法确定多分支,例:某应用程序主菜单有8个可选项,其入口地址分别,记为,R0、R1R7,。要求编制程序根据变量,N,的,值转向相应的处理程序(,N,为入口编号)。,步骤:,a、把入口地址放在,BASE,开
展开阅读全文