8086汇编语言语句的类型和格式

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第5章汇编语言程序设计5.2.2汇编语言语句的类型和格式1.语句的类型汇编语言源程序中的语句可以分为两种类型:指令语句,伪指令语句,宏指令语句。(1)指令语句:它是能产生目标代码,CPU可以执行的能完成特定功能的语句。(2)伪指令语句:它是一种不产生目标代码的语句,它仅仅在汇编过程中告诉汇编程序应如何汇编。例如,告诉汇编程序已写出的汇编语言源程序有几个段,段的名字是什么;定义变量,定义过程,给变量分配存储单元,给数字或表达式命名等。显然,伪指令语句是汇编程序在汇编时使用的。第5章汇编语言程序设计(3)宏指令语句是以一个宏名定义的一段指令序列,在汇编中凡是出现宏指令语句的地方,都会有相应的指令语句序列的目标代码插入。2.语句的格式指令语句与伪指令语句的格式是类似的。一般情况下,汇编语言的语句可以由1~4部分构成:[名字]助记符[操作数][;注释]其中带方括号的部分表示任选项,既可以有,也可以没有。例5.1中有如下语句:LOOPER:MOVAL,DATA2[SI];取一个字节加数DATA1DB0F8H,60H,0ACH,74H,3BH;被加数第一条语句是指令语句,其中“LOOPER:”是名字,“MOV”是指令助记符,“AL,DATA2[SI]”是操作数,“;”后面是注释部分;第二条语句是伪指令语句,其中“DATA1”是名字,“DB”是伪指令定义符,“0F8H,60H,0ACH,74H,3BH”是操作数,“;”后面是注释部分。第5章汇编语言程序设计1)名字汇编语言语句的第一个组成部分是名字(Name)。在指令语句中,这个名字是一个标号。指令语句中的标号实质上是指“:”后面指令所在的存储地址(逻辑地址)。供JMP、CALL和LOOP等指令作操作数使用,以寻找转移目标地址。并非每条指令语句必须有标号,但如果一条指令前面有一标号,则程序中其它地方就可以引用这个标号。在例5.1中,START、LOOPER就是标号。标号后面有一个冒号。标号有三种属性:段、偏移量和类型。①标号的段属性是定义标号在程序段的段地址,当程序中引用一个标号时,该标号的段值应在CS寄存器中。②标号的偏移量属性表示标号所在段的起始地址到定义该标号的地址之间的字节数。偏移量是一个16位无符号数。③标号的类型属性有两种:NEAR和FAR。前一种标号可以在段内被引用;后一种标号可以在其它段被引用。如果定义一个标号时后跟冒号,则汇编程序确认其类型为NEAR。第5章汇编语言程序设计伪指令语句中的名字可以是变量名、段名、过程名。与指令语句中的标号不同,这些伪指令语句中的名字并不总是任选的,有些伪指令规定前面必须有名字,有些则不允许有名字,也有一些伪指令的名字是任选的。即不同的伪指令对于是否有名字有不同的规定。伪指令语句的名字后面通常不跟冒号,这是它和标号的一个明显区别。很多情况下伪指令语句中的名字是变量名,变量名代表存储器中一个数据区的名字,例如例5.1中的DATA1、DATA2就是变量名。第5章汇编语言程序设计变量也有三种属性:段、偏移量和类型。①变量的段属性是变量所代表的数据区所在段的段地址。由于数据区一般在存储器的数据段中,因此变量的段地址常常在DS和ES寄存器中。②变量的偏移量属性是该变量所在段的起始地址与变量的地址之间的字节数。③变量的类型属性有BYTE(字节)、WORD(字)、DWORD(双字)、QWORD(四字)、TBYTE(十字)等,表示数据区中存取操作对象的大小。第5章汇编语言程序设计•例1编写一个两字相加的程序。–DSEGSEGMENT;定义数据段–DATA1DW1234H;定义被加数–DATA2DW5678H;定义加数–DSEGENDS;数据段结束–ESEGSEGMENT;定义附加段–SUMDW2DUP(?);定义存放结果区–ESEGENDS;附加段结束–CSEGSEGMENT;定义代码段–;下面的语句说明程序中定义的各段分别用哪个段寄存器寻址–ASSUMECS:CSEG,DS:DSEG,ES:ESEG–START:MOVAX,DSEG;START为程序开始执行的启动标号–MOVDS,AX;初始化DS–MOVAX,ESEG–MOVES,AX;初始化ES–LEASI,SUM;存放结果的偏移地址送SI–MOVAX,DATA1;取被加数–ADDAX,DATA2;两数相加–MOVES:[SI],AX;和送附加段的SUM单元中–HLT–CSEGENDS;代码段结束–ENDSTART;源程序结束第5章汇编语言程序设计DATASEGMENTDA1DB12H;定义一个字节数据DA2DD0FEDCBA90H;定义一个双字数据DA3DW5678H;定义一个字数据DATAENDS第5章汇编语言程序设计2)助记符汇编语言语句中的第二个组成部分是助记符(Memonic)。在指令语句中的第二部分是CPU指令系统中指令的助记符,例如:MOVADC等等。助记符约有90多种,在第四章中已经进行了详细的讨论。在伪指令语句中的第二部分是伪指令的定义符,例如:DB、SEGMENT、ENDS、END等都是伪指令定义符。它们在程序中的作用是定义变量的类型、定义段以及告诉汇编程序结束汇编等。第5章汇编语言程序设计3)操作数汇编语言语句中的第三个组成部分是操作数。在指令语句中是指令的操作数,可能有单操作数或双操作数,也可能无操作数;而在伪指令中可能有更多个操作数。当操作数不止一个时,相互之间应该用逗号隔开。可以作为操作数的有:常数、寄存器、标号、变量和表达式等。第5章汇编语言程序设计(1)常数。常数就是指令中出现的那些固定值,可以分为数值常数和字符串常数两类。例如,立即数寻址时所有的立即数、直接寻址时所有的地址、ASCII字符串等都是常数。常数是除了自身的值以外,没有其他属性的数值。在源程序中,数值常数按其基数的不同,可有二进制数、八进制数、十进制数、十六进制数等几种不同表示形式。汇编语言用不同的后缀加以区别。第5章汇编语言程序设计(2)寄存器8086/8088CPU的寄存器可以作为指令的操作数。(3)标号由于标号代表一条指令的符号地址,因此可以作为转移(无条件转移或条件转移)、过程调用CALL以及循环控制LOOP指令的操作数。(4)变量因为变量是存储器中某个数据区的名字,因此在指令中可以作为存储器操作数。(5)表达式汇编语言语句中的表达式,按其性质可分为两种:数值表达式和地址表达式。数值表达式产生一个数值结果,只有大小,没有属性。地址表达式的结果不是一个单纯的数值,而是一个表示存储器地址的变量或标号,它有三种属性:段、偏移量和类型。第5章汇编语言程序设计表达式是由操作数和运算符组成。即用一个运算符可以对一个或几个操作数进行运算,构成一个表达式。表达式中常用的运算符有以下几种:⑴算术运算符:+、-、*、/和取模运算MOD。⑵逻辑运算符:AND、OR、NOT和XOR。⑶关系运算符:EQ、NE、LT、GT、LE、GE。结果只有两个全1或全0。⑷分析运算符:利用分析运算符可以把一个存储单元地址分解为段地址和偏移地址等。分析运算符有SEG、OFFSET、TYPE、SIZE和LENGTH等。第5章汇编语言程序设计分析运算符表达式注意:SIZE=LENGTH*TYPE取去出变量的长度LENGTH变量名取出变量的大小SIZE变量名取出变量或标号的类型TYPE变量名或标号取出变量或标号所在段的段地址SEG变量名或标号取出变量名或标号所在段的偏移地址OFFSET变量名或标号表达式的意义带分析运算符的表达式第5章汇编语言程序设计•例2逻辑运算符的应用–MOVAL,NOT10101010B;(AL)←01010101B–MOVAL,11110000BAND10111101B;(AL)←10110000B–MOVAL,10100000BOR00000101B;(AL)←10100101B•例3关系运算符的应用–MOVAX,5EQ101B;(AX)←0FFFFH–MOVBH,10HGT16;(BH)←0第5章汇编语言程序设计•例4数值返回运算符的应用–K1DB30H,31H,32H–K2DW4041H,4043H–K3DW20HDUP(0)–K4DD50515253H–MOVAL,TYPEK1;等效于MOVAL,1–MOVAH,TYPEK2;等效于MOVAH,2–MOVAL,LENGTHK3;(AL)←20H,返回DUP前面的数值–MOVCL,LENGTHK4;(CL)←01H–MOVBL,SIZEK3;(BL)←40H–MOVDL,SIZEK4;(DL)←04H第5章汇编语言程序设计⑸合成运算符:可以用来建立或临时改变变量或标号的类型或存储器操作数的存储单元类型。合成运算符有PTR、THIS等。第5章汇编语言程序设计•例5PTR运算符的应用–N1DB3,6,9–MOVAX,WORDPTRN1;临时指定N1为字类型,(AX)←0603H•例6THIS运算符的应用–ABCEQUTHISBYTE;从本语句开始变量ABC的类型属性指定为字节,不管它原来的类型是什么•例7HIGH和LOW运算符的应用–NUMEQU2456H–MOVAL,HIGHNUM;等效于MOVAL,34H–MOVBL,LOWNUM;等效于MOVBL,56H•例8段属性运算符的应用–MOVAX,ES:[BX];用附加段ES取代默认的数据段DS–MOVBL,DS:[BP];用数据段DS取代默认的堆栈段SS第5章汇编语言程序设计5.3伪指令语句宏汇编程序MASM提供了约几十种伪指令,其中有一些伪指令小汇编ASM不支持,例如宏处理伪指令等。根据伪指令的功能,大致可以分为以下几类:⒈方式伪指令⑴.8086。汇编程序将在8086/8088方式下操作。⑵.386。汇编程序将在80386方式下操作。2.符号定义伪指令⑴EQU(赋值伪指令)名字EQU表达式第5章汇编语言程序设计⑵=(等号伪指令)名字=表达式⑶LABLE(类型定义伪指令)名字LABLE类型利用LABLE伪指令的用途可以使同一个数据区兼有BYTE和WORD两种属性.第5章汇编语言程序设计–1.等值语句•例4-10等值语句•CREQU0DH;常量•TENEQU0AH;常量•AAEQUASCII_TABLE;变量•VAREQUTEN*2+1024;数值表达式•ADREQUES:[BP+DI+5];地址表达式•GOTOEQUJMP;指令助记符–2.等号语句•例4-11等号语句•NUM=488;定义NUM等于488•NUM=NUM+1;定义NUM等于489第5章汇编语言程序设计3.数据定义伪指令数据定义伪指令的一般格式为:[变量名]伪操作符操作数[,操作数…]⑴DB定义变量的类型为BYTE,给变量分配字节或字节串操作数。第5章汇编语言程序设计⑵DW定义变量的类型为WORD,给变量分配字操作数。⑶DD定义变量的类型为DWORD,给变量分配双字操作数。除了常数、表达式和字符串外,问号“?”也可以作为数据定义伪指令的操作数,此时仅给变量保留相应的存储单元,而不赋与变量某个确定的初值。当同样的操作数重复多次时,可用重复操作符“DUP”表示,其形式为:nDUP(初值[,初值…0])第5章汇编语言程序设计•例9–DATADB11H,33H;定义包含两个元素的字节变量DATA–NUMDW100*5+88;定义一个字类型变量NUM,其初值为表达式的值–SUMDQ0011223344556677;将4个字存入变量SUM。•例10–STR1DB‘COMPUTER’;定义一个字符串,字符串的首地址为STR1–STR2DW‘AA’,‘BC’,‘DE’;给两个字符组成的字符串分配两个字节存储单元–DATADW?,?,?;为DATA预留6个存储单元•例11–DATA1DB20DUP(?);为变量DATA1分配20个字节的空间,初值为任意值–DATA2DW?;为变量DATA2分配2个字节的空间,初值为任意值–DATA3DB20DUP(30H);为变量DATA3分配20个字节的空间,初值均为30H第5章汇编语言程序设计4.段定义伪指令段定

1 / 29
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功