您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第4章 汇编语言语法及其程序格式
第4章汇编语言语法及其程序格式第4章汇编语言语法及其程序格式4.1汇编语言语句格式4.2伪指令4.3汇编语言源程序结构4.4汇编语言程序的上机过程4.5动态调试程序DEBUG习题4第4章汇编语言语法及其程序格式4.1汇编语言语句格式4.1.1语句种类【例4-1】先给出一个完整的汇编语言源程序,该程序的功能是完成两个字节数据相加。DATASEGMENT;段定义开始(DATA段)BUF1DB34H;第1个加数BUF2DB2AH;第2个加数第4章汇编语言语法及其程序格式SUMDB?;准备用来存放和数的单元DATAENDS;段定义结束(DATA段)CODESEGMENT;段定义开始(CODE段)ASSUMECS:CODE,DS:DATA;规定DATA、CODE分别为数据段和代码段START:MOVAX,DATAMOVDS,AX;给数据段寄存器DS赋值MOVAL,BUF1;取第1个加数第4章汇编语言语法及其程序格式ADDAL,BUF2;和第2个加数相加MOVSUM,AL;存放结果MOVAH,4CH;赋功能号INT21H;返回DOS状态CODEENDS;段定义结束(CODE段)ENDSTART;整个源程序结束第4章汇编语言语法及其程序格式从上面这个例子可以看出,汇编语言源程序由若干个语句组成,语句分为如下两类:1)指令语句指令语句即由8086/8088提供的指令形成的语句,它能够被翻译成机器代码,并完成一定操作功能。2)伪指令语句伪指令语句也叫指示性语句,它只是为汇编程序在翻译汇编语言源程序时提供有关信息,并不翻译成机器代码。第4章汇编语言语法及其程序格式程序中的语句BUF1DB34HBUF2DB2AHSUMDB?就是伪指令语句,其功能是在内存中开辟三个名字分别为BUF1、BUF2和SUM的字节单元。前两个单元的初值分别为34H和2AH,SUM仅指定一个字节单元,不定义确定的初值。实际上,汇编语言源程序中还可出现宏指令语句。宏指令语句就是由若干条指令语句形成的语句体。一条宏指令语句的功能相当于若干条指令语句的功能。第4章汇编语言语法及其程序格式4.1.2语句格式指令语句和伪指令语句的格式是类似的,格式如下:[名字]操作码操作数[;注释]其中带方括号的项可以省略,注释内容以分号(;)引导。1.名字1)名字的定义规则名字就是由用户按一定规则定义的标识符,可由英文字母(A~Z,a~z),数字(0~9)和特殊符号(?、@、_)等组成。第4章汇编语言语法及其程序格式名字的定义要满足如下规则:(1)数字不能作为名字的第一个符号;(2)单独的问号(?)不能作为名字;(3)一个名字的最大有效长度为31,超过31的部分计算机不再识别;(4)汇编语言中有特定含义的保留字,如操作码、寄存器名等,不能作为名字使用。为了便于记忆,名字的定义最好能够见名知义,如用BUFFER表示缓冲区,SUM表示累加和等。第4章汇编语言语法及其程序格式2)名字的主要形式名字有标号和变量两种主要形式。(1)标号在代码段中定义,后面跟着冒号。标号也可以用LABEL或EQU伪指令来定义。此外,标号还可以作为过程名定义,由于过程由伪指令定义,所以过程名不需冒号说明。标号经常在转移指令或CALL指令的操作数字段出现,用以表示转向地址。标号有三种属性:段、偏移和类型属性。段属性:定义标号的段起始地址,此值必须在一个段寄存器中,而标号的段则总是在CS寄存器中。第4章汇编语言语法及其程序格式偏移属性:标号的偏移地址是从段起始地址到定义标号的位置之间的字节数。对于16位段是16位无符号数;对于32位段则是32位无符号数。类型属性:类型属性用来指出该标号是在本段内引用还是在其他段中引用的。如是在段内引用的,则称为NEAR。对于16位段,指针长度为2字节;对于32位段,指针长度为4字节。如在段外引用,则称为FAR。对于16位段,指针长度为4字节(段地址2字节,偏移地址2字节);对于32位段,指针长度为6字节(段地址2字节,偏移地址4字节)。第4章汇编语言语法及其程序格式(2)变量在数据段、附加数据段或堆栈段中定义,后面不跟冒号。它也可以用LABEL或EQU伪指令来定义。变量经常在操作数字段出现。它也有段、偏移和类型三种属性。段属性:定义变量的段起始地址,此值必须在一个段寄存器中。偏移属性:变量的偏移地址是从段的起始地址到定义变量的位置之间的字节数。对于16位段,是16位无符号数;对于32位段,则是32位无符号数。第4章汇编语言语法及其程序格式类型属性:变量的类型属性定义该变量所保留的字节数。如BYTE(DB,1个字节长)、WORD(DW,2个字节长)、DWORD(DD,4个字节长)、FWORD(DF,6个字节长)、QWORD(DQ,8个字节长)和TBYTE(DT,10个字节长)。在同一个程序中,同样的标号或变量的定义只允许出现一次,否则汇编程序会指示出错。第4章汇编语言语法及其程序格式2.操作码操作码用来指明操作的性质或功能。指令中的助记符都是操作码。操作码与操作数之间用空格分开,如MOV、ADD等都是操作码。3.操作数指令中的操作数用来指定参与操作的数据。对于一般指令,可以有1个或2个操作数,也可以没有操作数;对于伪指令和宏指令,可以有多个操作数。当操作数多于1个时,操作数之间用逗号分开。操作数可以是常数和表达式。第4章汇编语言语法及其程序格式1)常数(1)数值常数。汇编语言中的数值常数可以是2进制、8进制、10进制或16进制数,书写时用加后缀(2进制用B、8进制用O或Q、10进制用D、16进制用H)的方式标明即可。对于10进制数可以省掉后缀。对于16进制数,当以A~F开头时,前面加数字0,以避免和操作码混淆。(2)字符串常数是由包含在单引号中的若干个字符形成的,字符串在计算机中存储的是相应字符的ASCII码。如‘A’的值是41H,‘AB’的值是4142H等。第4章汇编语言语法及其程序格式(3)符号常数就是指常数用符号名来代替。用COUNTEQU3或COUNT=3定义后COUNT就是一个符号常数,与数值常数3等价。2)表达式由运算对象和运算符组成的合法式子就是表达式,分为数值表达式和地址表达式两种。数值表达式的运算结果是一个数,地址表达式的运算结果是一个存储单元的地址。第4章汇编语言语法及其程序格式4.注释项注释是语句的说明部分,用来说明一条指令或一段程序的功能,由分号(;)开始。适当地加些注释内容,可以增加程序的可读性,便于阅读、理解和修改程序。汇编源程序时,注释部分不产生机器代码。一条语句可以写在多行上,续行符使用&。第4章汇编语言语法及其程序格式4.2伪指令汇编语言程序的语句除指令以外还可以由伪指令和宏指令组成。伪指令又称为伪操作,它们不像机器指令那样是在程序运行期间由计算机来执行的,而是在汇编程序对源程序汇编期间由汇编程序处理的操作,它们可以完成如处理器选择、定义程序模式、定义数据、分配存储区和指示程序结束等功能。伪指令形式上与一般指令相似,但伪指令只是为汇编程序提供有关信息,不产生相应的机器代码。第4章汇编语言语法及其程序格式4.2.1定义符号的伪指令有时程序中需要多次出现同一个表达式,为方便起见,可以用赋值伪指令给表达式赋予一个名字。1.等值伪指令EQU格式:符号名EQU表达式功能:给符号名定义一个值,赋予一个符号名、表达式或助记符。第4章汇编语言语法及其程序格式此后,程序中凡需要用到该表达式之处,就可以用表达式名来代替了。EQU的引入提高了程序的可读性,也使其更加易于修改。上式中的表达式可以是任何有效的操作数格式,或任何可以求出常数值的表达式,也可以是任何有效的助记符。例如:CONSTANTEQU256;数256赋以符号名CONSTANT第4章汇编语言语法及其程序格式在EQU语句的表达式中,如果有变量或标号的表达式,则在该语句前应该先给出它们的定义。例如,语句ABEQUDATA_ONE+2必须放在DATA_ONE的定义之后才行,否则汇编程序将指示出错。2.等号伪指令==伪指令与EQU相类似,也可以作为赋值操作使用,它们之间的区别是EQU伪指令中的表达式名不允许重复定义,而“=”伪指令则允许重复定义。第4章汇编语言语法及其程序格式【例4-2】EMP=6或EMPEQU6都可以使数6赋以符号名EMP,然而不允许两者同时使用。但是如下语句EMP=7EMP=EMP+1在程序中是允许使用的,因为“=”伪指令允许重复定义。这种情况下,在第一个语句后的指令中EMP的值为7,而在第二个语句后的指令中EMP的值为8。第4章汇编语言语法及其程序格式3.解除定义伪指令PURGE格式:PURGE符号1,符号2,…,符号N功能:解除指定符号的定义,解除符号定义后,可用EQU重新进行定义。【例4-3】Y1EQU7;定义Y1的值为7PURGEY1;解除Y1的定义Y1EQU36;重新定义Y1的值为36第4章汇编语言语法及其程序格式4.2.2定义数据的伪指令这一类伪指令的格式是:[变量]助记符操作数,……,操作数[;注释]功能:为操作数分配存储单元,并用变量与存储单元建立联系。格式中,“变量”字段是可有可无的,它用符号地址表示。“变量”字段的作用与指令语句前的标号相同,但它的后面不跟冒号。如果语句中有变量,则汇编程序使其记为第一个字节的偏移地址。第4章汇编语言语法及其程序格式“注释”字段用来说明该伪指令的功能,它也是可有可无的。“助记符”字段说明伪指令是用于定义数据类型的。常用的有以下几种:DB:用来定义字节,其后的每个操作数都占有一个字节(8位)的存储单元。DW:用来定义字,其后的每个操作数占有一个字(16位,其低位字节在第一个字节地址中,高位字节在第二个字节地址中)。第4章汇编语言语法及其程序格式DD:用来定义双字,其后的每个操作数占有两个字(32位)。DF:用来定义6个字节的字,其后的每个操作数占有48位,可用来存放远地址。这一伪指令只能用于386及其后继机型中。DQ:用来定义4字,其后的每个操作数占有4个字(64位),可用来存放双精度浮点数。DT:用来定义10个字节,其后的每个操作数占有10个字节,形成压缩的BCD码形式。第4章汇编语言语法及其程序格式【例4-4】操作数为常数或表达式的定义数据伪指令举例。DATA_BYTEDB10,4,10HDATA_WORDDW100,100H,-5DATA_DWDD60,0FFFDH汇编程序可以在汇编期间在存储器中存入数据,汇编后的内存分布如图4.1所示。第4章汇编语言语法及其程序格式图4.1例4-4的汇编结果0A041064000001FBFF3C000000FDFF000010D4D10H100D-5D100H60D0FFFDHDATA_BYTEDATA_WORDDATA_DW第4章汇编语言语法及其程序格式【例4-5】操作数是字符串的定义数据伪指令举例。MESSAGEDB'HELLO'存储器存储情况如图4.2(a)所示,而DB'AB'和DW'AB'的存储情况则分别如图4.2(b)和(c)所示。第4章汇编语言语法及其程序格式图4.2例4-5的汇编结果48454C4C4FHELLOMESSAGE4142AB4241BA(a)字符串的存储(b)DBAB′′(c)DWAB′′第4章汇编语言语法及其程序格式【例4-6】操作数?可以保留存储空间,但不存入数据。如ABCDB0,?,?,0DEFDW?,52,?经汇编后的存储情况如图所示。00--00--3400--ABCDEF52d第4章汇编语言语法及其程序格式【例4-7】使用DUP实现重复定义。ARRAY1DB2DUP(0,1,2,?)ARRAY2DB100DUP(?)汇编后的存储情况如图4.4所示。由图可见,例4-7中的第一个语句和语句ARRAY1DB0,1,2,?,0,1,2,?是等价的。第4章汇编语言语法及其程序格式图4.4例4-7的汇编结果000102-000102--ARRAY1100个字节-…ARRAY2第4章汇编语言语法及其程序格式【例4-8】DUP操作可以嵌套,例如:ARRAY3DB100D
本文标题:第4章 汇编语言语法及其程序格式
链接地址:https://www.777doc.com/doc-4026780 .html