1第四章汇编语言程序设计第四章4.0概述4.1汇编语言程序格式4.2MASM中的表达式4.3伪指令语句4.4程序设计方法4.5DOS系统功能调用2第四章4.0概述从使用者的角度看,一般可分成以下三种:1、机器语言(MachineLanguage)用‘0’、‘1’数字代码来表示机器操作;如:加法:1001、1D、2B……特点:计算机能够直接识别,执行速度快;但不方便记忆和编程一、计算机程序设计语言3第四章2、汇编语言(AssemblyLanguage)用助记符来表示指令,如:加法:ADD……特点:机器不能识别,需翻译;但仍然面向硬件,执行速度较快;多用于编制系统程序、实时控制和通信程序。3、高级语言(High-levelLanguage)用数学语言和自然语言编程;如:加法:+,输出:Printf…特点:编程方便简单,无需了解机器硬件;但机器不能识别,需要庞大的翻译系统,速度较慢。4第四章一般应用:混合语言汇编语言加高级语言等组合编程;各取所长,相互调用汇编语言实现:硬件操作高级语言实现:复杂算法5第四章二、汇编语言程序执行过程1、几个名词汇编语言:用助记符来表示指令的语言汇编语言源程序:用汇编语言编写的程序。汇编:将源程序翻译成机器代码的过程。汇编程序:将源程序翻译成机器代码的程序。2、汇编语言源程序执行过程源程序汇编程序机器代码程序设计算法语法8086系统:MASM规范6第四章三、完整汇编源程序实例DATASEGMENTDA1DB12HDA2DB34HDA3DB00HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA(下接右边)START:MOVAX,DATAMOVDS,AXMOVBL,DA1ADDBL,DA2MOVDA3,BLMOVAH,4CHINT21HCODEENDSENDSTART分析程序的结构、功能、组成7第四章汇编源程序特点分段的结构4个段,至少有代码段,其他视需要而定;有部分固定的程序框架(程序结构)基本组成---语句有些是前面学过的指令语句,其他是MASM中规定的格式、语法语句。8第四章段名1SEGMENT;段开始………段名1ENDS;段结束段名2SEGMENTASSUMECS:段名2,DS:段名1;段分配START:MOVAX,DATAMOVDS,AX;送段基址……………MOVAH,4CH;返回DOS方法一INT21H段名2ENDSENDSTART;源程序结束一般程序框架MAINPROCFAR…………PUSHDSMOVAX,0PUSHAX…………RETMAINENDP返回DOS方法二9第四章4.1汇编语言程序格式MASM中的语句分为两类:指令性语句:与机器指令相对应,可译成目标代码(机器指令代码)。伪指令语句:无对应的机器指令,汇编时对伪指令进行处理,可完成数据定义、存储区分配、段定义、段分配、指示程序开始和结束等功能。差别:格式及功能不同(形式);汇编时能否形成对应的机器码(本质)。一、汇编源程序的语句10第四章1、指令性语句格式:标号:指令助记符操作数,操作数;注释标号-符号地址;必须加“:”;命名规则;可省略指令助记符-指令名称,不可省略操作数-操作对象;多个时用“,”隔开注释-以“;”开头;说明性语句,可省略例:NEXT:MOVAH,0FH;将0FH送入AH中11第四章2、伪指令语句(也称汇编命令语句)格式:名字伪指令指示符操作数,操作数;注释名字-符号地址;不加“:”;变量名、段名等;可省略伪指令指示符-MASM中规定的符号;如变量定义DB等操作数-操作对象;不同伪指令有不同要求,多个时用“,”隔开注释-以“;”开头;说明性语句,可省略例:DA1DB10H,20H,30H;定义变量DA1,并赋初值12第四章MASM中使用的数据项:常数、寄存器、存储器、变量、标号或表达式。1、常数是固定值,没有属性,是确定的数据。二进制:字母“B”结尾,如:00110100B;十进制:字母“D”结尾或省略,如:1234D、5678;十六进制:字母“H”结尾,“A~F”开头时,前面加0,如:0F7H;字符串:用单引号‘’括起来字符或字符串,如:‘A’,‘123H’。注:字符串汇编时被翻译成对应的ASCII码,机内也以ASCII码形式存放,如:MOVAH,‘A’;AH=41H二、数据项与指令系统中介绍的一样13第四章2、变量数据的符号地址;名称可以代表后面数据项第一字节的地址;例:DA1DB10H,20H,30H,…;定义变量DA1,初值为…,DA1表示‘10H’的地址相当于高级语言中的数组;在程序中作为存储器操作数来使用。14第四章变量有三种属性:⑴段值:变量所在段的段基址。⑵段内偏移地址:指变量所在地址与所在段首地址之间的地址偏移字节数。⑶类型:长度属性,指变量中每个元素所包含的字节数,类型有字节变量(BYTE)、字变量(WORD)、双字变量(DWORD)等。15第四章3、标号指令性语句的符号地址;名称代表后面可执行指令语句的开始地址;可作为转移指令的目的操作数。例:JMPNEXT……NEXT:MOVAH,0FH16第四章标号也有三种属性:⑴段值:标号所在段的段基址,总在CS中。⑵段内偏移地址:指标号所在地址与所在段首地址之间的地址偏移字节数。⑶类型:指标号可转移的距离,也称距离属性。NEAR:近标号,实现段内转移或调用;FAR:远标号,实现段间转移或调用。若没有对类型进行说明,默认为NEAR。17第四章4.2MASM中的表达式表达式:运算对象与运算符组成;运算对象:常数、变量、标号;运算符:MASM中有六类算术运算符、逻辑运算符、关系运算符、数值返回运算符、修改属性运算符、其它运算符注意:所有表达式由MASM处理(即:在汇编时进行运算),结果为常数或存储器地址;掌握:常用运算符及表达式的结果18第四章一、算术运算符包括:+,-,*,/(取商),MOD(取余),SHL,SHR特点:①运算对象及结果均为整数②地址只能加减例:DA1DB1,2,3,4DA2DB20MOVAX,30*5MOVAL,31MOD5MOVAL,31/5MOVAL,DA2-DA1汇编时MOVAX,150MOVAL,1MOVAL,6MOVAL,419第四章二、逻辑运算符包括:AND,OR,NOT,XOR特点:①位运算;②只能用于数字表达式例:MOVBL,8CHAND73HMOVBL,ALANDOFFHMOVBX,NOT0FFH注意:ANDAX,8CHAND73H(两‘AND’不同)区别:⑴前为指令助记符,后为运算符;⑵处理时间不同;⑶前影响PSW,后不影响汇编时MOVBL,00H(×)MOVBX,0FF00H20第四章三、关系运算符包括:EQ,NE,LT,GT,LE,GE特点:①运算对象:数据或同一段内的地址;②运算结果:关系为真,结果全1;假,全0例:MOVAX,10HGE16MOVAL,10HGE16MOVAX,0FFFFHMOVAL,0FFH关系运算符常与逻辑运算符组合起来使用例:MOVCX,((PORTLT5)AND100)OR((PORTGE5)AND200)若PORT<5,MOVCX,100若PORT≥5,MOVCX,20021第四章四、数值返回运算符(分析运算符)包括:OFFSET,SEG,TYPE,LENGTH,SIZE格式:运算符变量或标号功能:OFFSET:取偏移地址值;SEG:取段基址;TYPE:返回长度(变量)或距离(标号)属性值;变量类型返回值DBDWDD124标号类型返回值NEARFAR-1[FFH]-2[FEH]22第四章LENGTH:返回变量长度•对于一般变量,返回1;•对于DUP定义的变量,返回单元数(以DUP形式表示的第一组变量被重复设置的次数,所以直接返回第一个DUP前的N值);说明:DUP为复制操作符,格式:NDUP(表达式);N表示复制次数,表达式为复制内容例:2DUP(1,2)等价于1,2,1,2SIZE:SIZE=LENGTH*TYPE数值返回运算符(续)23第四章例:设DS=0200H,从偏移量为0000H定义以下变量:DA1DW1234H,5678HDA2DD5DUP(1,2)……….MOVAX,OFFSETDA1MOVAX,OFFSETDA2MOVAX,SEGDA1L1:MOVAX,TYPEDA2MOVAX,TYPEL1MOVAX,LENGTHDA1MOVAX,SIZEDA2MOVAX,4MOVAX,0FFHMOVAX,1MOVAX,20汇编时MOVAX,0000HMOVAX,0004HMOVAX,0200H汇编时数值返回运算符(续)24第四章五、修改属性运算符段操作符ES:,DS:,SS:,CS:修改段基址的来源例:MOVAX,[BX];默认段基址在DS中MOVAX,ES:[BX];段基址在ES中PTR格式:类型/距离PTR变量或标号功能:临时改变或指明变量或标号的类型属性,常与BYTE、WORD、NEAR、FAR等连用。25第四章例:DA1DB15H,36HDA2DW1122H,3344HMOVAX,DA1(×);长度不一致MOVAL,DA2(×);长度不一致MOV[BX],10H(×);类型不明改:MOVAX,WORDPTRDA1MOVAL,BYTEPTRDA2;临时改变变量类型MOVWORDPTR[BX],10H;临时指明操作类型思考:这三条指令执行后的结果分别是多少?AX=3615H,AL=22H,(BX)=0010H26第四章六、其他运算符():改变优先级;[]:内存单元地址或多变量下标补充$:地址计数器的当前值例:DA1DW1,2,$+4,0AH若DA1偏移量为1000H,则上述变量定义等效为:DA1DW1,2,1008H,0AH27第四章例:若DA1DB01H,02H,03HDA2DW5566HCOUNTEQU$-DA1则:COUNT的值为5COUNT表示:DA1,DA2占的字节总数(长度之和)七、优先级(P134表4-3)28第四章4.3伪指令语句在汇编时进行处理,主要完成变量定义,段定义,段分配,指示程序开始和结束等功能。常用:•数据定义(变量定义)语句:DB,DW,DD•符号定义语句:EQU•段定义语句:SEGMENT…ENDS•段分配语句:ASSUME•过程定义语句:PROC…ENDP•程序开始、结束语句:ORG,END29第四章一、数据定义(变量定义)语句(DB,DW,DD)格式1:变量名助记符opr,opr…;注释格式2:变量名助记符NDUP(opr,opr…);注释助记符:DB:定义字节变量,表示每个opr占一个字节DW:定义字变量,表示每个opr占2个字节DD:定义双字变量,表示每个opr占4个字节N:重复次数,正整数掌握:变量占的总字节数;在内存中的存放格式30第四章例1:opr是常数或表达式若数据定义语句如下:DA1DB10,5,10HDA2DW100H,100,-4DA3DD2*30,0FFFBH则各变量所占字节数:DA13B;DA26B;DA38B;.0A51000016400FCFF3C000000..100HDA1DA2DA3100-460汇编后存放格式如下图:31第四章例2:opr是字符串DA1DB‘HELLO’DA2DB‘OK’DA3DW‘OK’字节数:DA15BDA22BDA32B思考:DA4DW‘ABC’怎么存储?48454C4C4F4F4B4B4FDA1DA2DA3HELLOOKKO字节’OK’字’OK’汇编后存放格式如下图:(×)用DW定义字符串时,只允许包括两个字符,多于两个字符时,只能用DB定义存放格式不同32第四章例3:opr用?来保留存储空间,但不存入数据。DA1DB0,1,?,?,?DA2DW?,54,?字节数:DA15BDA26B注意:DB?与DB‘?’不同0001╳╳╳╳╳3600╳╳DA1DA201?????5433第四章例4:opr用DUP缩写DA1DB2DUP(