南通大学NATOGUNIVERSITY祈通中西力求精进第四章8086汇编语言程序设计几个概念8086汇编语言的语句8086汇编中的伪指令8086汇编中的运算符汇编语言程序设计宏定义与宏调用汇编语言系统程序设计实例与上机调试南通大学NATOGUNIVERSITY祈通中西力求精进几个概念程序是一组为完成某种功能而按一定顺序(由算法确定)编排的指令序列。本章将首先介绍8086宏汇编语言的基本语法及常用伪指令,然后用实例说明8086宏汇编语言源程序的设计方法。南通大学NATOGUNIVERSITY祈通中西力求精进1.3种语言机器语言:当指令和数据都用二进制代码表示时,计算机能够直接识别与执行,因而称之为机器语言。高级语言:是完全独立于机器的通用语言,效率低。面向过程、面向对象,必须译成机器语言。汇编语言:汇编语言是一种用符号表示的、面向CPU指令系统的程序设计语言。是用指令的助记符、符号地址、标号等编写程序的语言。汇编语言程序是机器语言程序的符号表示南通大学NATOGUNIVERSITY祈通中西力求精进用汇编语言编写程序能够:程序目标代码占用内存少,执行速度快,效率高,具有实时性.直接利用硬件系统的特性(如寄存器、标志、中断系统等),直接对位、字节、字、寄存器或存储单元、I/O端口进行处理,同时也能直接使用CPU指令系统提供的各种寻址方式,编制出高质量的程序。从源程序获得目标程序的过程汇编语言源程序机器语言程序(目标代码)汇编(可由汇编程序完成)高级语言源程序编译或解释(可由编译程序完成)为了能顺利完成汇编,用户必须为汇编程序提供一些额外的、与硬件有关的信息.如:程序使用的变量应分别存放在内存的哪个单元、堆栈应从内存的什么地址开始等等。南通大学NATOGUNIVERSITY祈通中西力求精进2.汇编程序的作用将源程序翻译成机器语言程序。按用户要求自动分配存储区域(如程序区、数据区等)。自动地把各种进制数→二进制数。把字符→ASCII码。计算表达式的值。自动对源程序进行检查,指出语法错误(如非法格式、未定义的助记符、标号、漏掉操作数等)。南通大学NATOGUNIVERSITY祈通中西力求精进3.汇编语言程序的上机与处理过程上机环境硬件系统软件应用软件操作系统:DOS系统编辑器:EDIT.exe编译程序:MASM.exe连接程序:LINK.exe调试程序:DEBUG.exe用户开发的程序:ABC.exe等CPU、存储器(ROM、RAM)、I/O接口、输入、输出设备汇编语言上机过程D:EDITABC.asmD:MASMABC有语法错,回EDIT下改该程序D:LINKABC有错,回在EDIT下改程序D:ABC运行结果错,回EDIT下改程序或在DEBUG下调试,找原因。D:DEBUGABC.exe编辑源程序EDITABC.ASM汇编源程序MASMABC.ASM形成目标程序ABC.OBJ连接目标程序LINKABC.OBJ有连接错误信息?形成可执行程序ABC.EXE装入可执行程序到内存,并执行D:\subABC下一程序用DEBUG调试可执行程序D:\subDEBUGABC.EXE找到原因YNYNNYN有汇编错误信息?Y运行结果正确?用DEBUG调试程序查错?南通大学NATOGUNIVERSITY祈通中西力求精进4.1汇编语言的程序结构与语句格式语法——语句和程序结构必须遵循的规则。源程序按其编译器能够理解的语法编写方可。南通大学NATOGUNIVERSITY祈通中西力求精进4.1.1汇编语言源程序的框架结构1.源程序由若干个逻辑段组成每段由伪指令SEGMENT开始、由ENDS结束。通常有:代码段(必不可少)堆栈段——建立一个堆栈区,以存放中断时的断点地址,子程序调用时断点地址及子程序间传递参数。数据段和附加数据段——用来在内存中建立一个适当容量的工作区用以存放数据。一、源程序的结构特点按逻辑段组织源程序。包括代码段、堆栈段、数据段等。南通大学NATOGUNIVERSITY祈通中西力求精进【例题4.1】实现:123+456→sum的源程序CODESEGMENT;语句6ASSUMECS:CODE,DS:DATAMAINPROCFAR;语句8START:PUSHDS;语句9……….;RET;语句17MAINENDP;语句18CODEENDS;语句19数据段代码段DATASEGMENT;语句1ADW123;语句2BDW456;语句3SUMDW?;语句4DATAENDS;语句5ENDSTART;语句20汇编语言语法南通大学NATOGUNIVERSITY祈通中西力求精进3.每段由若干语句行组成,每行只有一条语句且不能超过128个字符,允许有后续行。整个源程序以END结束,它通知汇编程序停止汇编。END后的START标号为程序运行时的起始地址。2.在代码段起始处,用ASSUME伪指令说明各个段Reg与逻辑段的关系,并在程序起始处设置段Reg的初值(代码段CS除外)。4.每条语句由4个字段构成。各字段间用空格分开。5.源程序中设有返回DOS的指令语句,使程序执行完后返回DOS系统的命令接受状态。南通大学NATOGUNIVERSITY祈通中西力求精进二、源程序与PCDOS的接口汇编语言源程序(.ASM)经过汇编转变为目标程序(.OBJ),当用链接程序对其进行链接和定位时,操作系统为每个用户程序建立:①一个256字节的程序段前缀区(PSP),存放用户程序信息。在PSP的开始处(偏移地址0000H)安排一条INT20H软中断指令。INT20H功能是使系统返回到DOS管理状态。因此,用户执行程序完后,必须能够转到PSP起始处执行INT20H指令。INT20HPSP起始0000H定位用户程序②定位用户程序③设置DS和ES的值使之指向PSP的开始处,即PSP的段地址→DS和ES。④将用户程序的段基址、第一条指令的偏移地址设置CS、IP;同时设置SS、SP。⑤运行用户程序保证用户程序执行完后返回DOS的方法——第一种方法:标准序法①将用户程序中的主程序定义为FAR过程,其最后一条指令为RET(当程序执行到RET时,会将栈顶的两个字分别送IP、CS)②在主程序的开始处将PSP的段地址和偏移地址(DS、ES和0000H)进栈保护:PUSHDS;保护PSP段地址MOVAX,0;保护偏移0地址PUSHAX……;用户程序开始当用户程序返回时,会返回到DOS(执行INT20H)。注:由于DS、ES由DOS设置,所以在用户程序开始处应重新设置DS、ES。南通大学NATOGUNIVERSITY祈通中西力求精进第二种方法:非标准方法①不定义主程序为FAR过程,并去掉标准序。②在代码段结束之前(即CODEENDS之前)增加两句:MOVAH,4CHINT21H;4CH号的DOS系统功能调用南通大学NATOGUNIVERSITY祈通中西力求精进4.1.28086汇编语言的语句源程序是一个语句序列,每条语句规定一个基本操作,语句序列完成某个特定的操作任务。一、语句的种类与格式1.语句的种类(1)指令语句____可执行语句,对应CPU指令系统规定的一条指令。汇编时,汇编程序为之产生一一对应的机器目标代码。例:MOVAH,4CHINCBX(2)伪指令语句____汇编时给汇编程序提供与硬件有关的汇编信息,本身并不产生目标代码,CPU不执行。是指示汇编程序进行汇编的操作。例:MESSAGEDB‘THISISASAMPLEPROGRAM.’;定义变量MESSAGE在数据段DATA中的存放形式汇编时,汇编程序将MESSAGE定义为一个字节类型数据区的首地址,并按字节存储字符串。2.语句格式指令语句的一般格式:[标号:][前缀]指令助记符[操作数][;注释]伪指令语句的格式:[名字]伪指令定义符[操作数][;注释]标识符字段标识符字段由各种有效字符组成,一般表示符号地址,具有段基址、偏移量、类型三种属性。很多情况下标识符字段是语句中的可选部分,主要为便于程序的读写方便而使用。标识符字段通常有:标号后跟冒号,在程序中作为JMP、LOOP指令的转移目标,与具体的指令地址相联系。名字用于定义常量名、变量名、过程名、段名等。(1)标号和名字标号和名字必须符合汇编语言对标识符的规定:以字母开头,由字母(不分大小写)、数字(0~9)及部分特殊字符(?@$和下划线_等)组成,字符串长度不超过31个。标识符不能是汇编语言中有特定意义的保留字、助记符、Reg等,如:CPU的内部寄存器名AH、AL、AX等。(2)助记符、定义符——规定指令或伪指令的操作功能,是语句中唯一不可缺少的部分。对于指令,汇编程序将其翻译成机器语言指令。MOVAX,100→B80001对于伪指令,汇编程序据其要求的功能进行处理。dataSEGMENT→data与一段地址对应stringDB‘Tsinghua’→string与一内存地址对应前缀仅可出现在指令助记符前。(3)操作数——指令语句中提供给指令的操作对象、存放位置。操作数可以是1个、2个或0个,2个时用逗号‘,’分开。(INCBX;MOVAX,DATA;RET)——伪指令语句中操作数的格式和含义随伪操作指令不同而不同。(4)注释——以“;”开始,给以编程说明。汇编程序对“;”后的内容不做处理。注释对汇编不起任何作用,不对应于任何机器码,仅增强源程序的可读性。操作数可能为以下几种情况:常量操作数:如34等。寄存器操作数:如AX等。存储器操作数:如[0100H]等。表达式操作数:如[AX+2]、SEGNUM1等。南通大学NATOGUNIVERSITY祈通中西力求精进4.28086汇编中的伪指令——指示汇编、链接程序如何进行汇编和链接,影响目标代码生成,本身不产生目标代码。——有符号定义语句、数据定义语句、程序结构语句、模块链接语句、有关宏的语句、条件汇编语句等。南通大学NATOGUNIVERSITY祈通中西力求精进—给表达式赋予一种符号名,以便在程序中用它替代表达式1、等值语句格式:符号名EQU表达式例:PORTEQU40H;用PORT代替40H号端口COUNTEQUCX;用COUNT代替CX寄存器MEQUMOV;用M代替MOV指令助记符注:EQU语句不能重新定义,即在同一源程序中,用EQU定义过的符号不能赋予不同的值。例:BEQU[bp+8]BEQU20H不行!4.2.1符号定义语句南通大学NATOGUNIVERSITY祈通中西力求精进2、等号语句格式:符号名=表达式功能与EQU类似。例:PP=89FAH;赋值PP=PP+1;PP=89FBH注:等号语句与EQU语句的相同点:符号不是变量,所以用EQU、=定义的符号不占用存储器单元。区别:等号语句可以在同一源程序中重复定义符号。南通大学NATOGUNIVERSITY祈通中西力求精进4.2.2变量定义语句—用于定义变量(程序中所用的存储器操作数),指定变量的类型和名称,并为其分配存储单元和预置初值。1.格式[变量名]数据定义符操作数[,操作数]…[,操作数]变量名指示存储器操作数的地址(符号地址)数据定义符指示存储器操作数的类型(字节、字、双字等)操作数指示存储器操作数的内容,是赋给变量的初值。多个相同类型的变量可在一条语句中定义[]——表示可选▲汇编程序将定义的操作数,按其类型分配内存单元数,并顺序存入变量名指向的内存单元中。▲常用的数据定义符有:DB变量为字节数据类型DW变量为字数据类型,存放时低对低高对高。DD变量为双字数据类型,存放时低对低高对高。南通大学NATOGUNIVERSITY祈通中西力求精进经过定义的变量有3种属性:段值、段内偏移量和类型。若某个变量表示的是一个数组,则其类型属性为变量的单个元素所占用的字节数。▲其它的数据定义符有:DQ变量为4字数据类型(64位)DT变量为10字节数据类型(80位)xxyyzz01FFFC0100FFFFFC0001000000FFFFFFFFFC0000001-1FC1-1FC1-1FC例:定义赋初值的变量d