资源描述:
《第五章 汇编语言程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第五章汇编语言程序设计汇编语言是机器语言的符号表示,是用指令的助记符、符号地址、标号等书写程序的语言。用汇编语言编写的程序,叫汇编语言源程序,或简称源程序。只有将源程序翻译成目标程序,才能在机器上运行,这种把汇编语言程序翻译成机器语言程序的过程称为汇编。计算机完成汇编任务是由汇编程序(MASM-MacroAssembler)这样一个软件工具实现的,汇编程序加工的对象是汇编语言源程序,加工的结果是目标程序。汇编语言的一个实例DATASEGMENTADW123BDW456SUMDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTA
2、RT:MOVAX,DATAMOVDS,AXMOVAX,AADDAX,BMOVSUM,AXMOVAH,4CHINT21HCODEENDSENDSTART5.1汇编语言语法一、汇编语言语语句指令性语句是能产生目标代码,CPU可以执行的能完成特定功能的语句。其格式为:[标号:][前缀]指令助记符操作数[;注释]指示性语句,又叫伪指令是没有对应的机器指令,不能执行,只给汇编程序提供一种信息,用来定义变量,分配存储单元,指示程序开始和结束等。其格式为:[名字]伪指令定义符操作数[;注释]名字是给伪指令取的名称,通常是变量名、段名、过程名、符号名等。两种语句的区别:在形式上:
3、带不带冒号,是否可转向它。在本质上:汇编时能否形成对应的机器码。二、操作数(数据项)汇编语言中使用的操作数可以是常数、寄存器、名字(变量)、标号或表达式1、常数1)数字常量用于伪指令中给变量赋值,或作为指令语句中的立即数、直接地址。2)字符串常量用单引号引起来的字符或字符串也代表常数。例:’A’,’BCDE’,汇编时被翻译成对应的ASCII码41H和42H,43H,44H,45H。3)符号常量PORTEQU20HINAL,PORT2、寄存器80X86的寄存器可以作为指令的操作数。8位AHALBHBLCHCLDHDL16位AXBXCXDXBPSPSIDICSDSSS
4、ES32位EAXEBXECXEDXEBPESPESIEDIDSESSSCSFSGS3、变量变量是内存中的数据,在程序中作为存储器操作数来使用。在除代码段以外的其它段中定义。变量主要有三种属性:①段值—变量定义所在段的段地址②偏移量—变量单元地址与段起始地址之间的位移量。③类型—有字节、字和双字三种。4、标号标号是可执行指令语句所存放单元的符号地址,可作为转移指令的转移地址。标号也有三种属性:段值总是在CS段寄存器中,偏移量概念与变量同,类型分NEAR和FAR两种。NEAR—表示标号所在语句与转移指令或调用指令在同一代码段内,只需改变IP即可。FAR—标号所在语句与
5、转移指令或调用指令不在同一码段内。5、表达式表达式由运算对象及运算符组成,运算对象可以是常数、寄存器、变量或标号。在汇编时由汇编程序对它进行运算,得到的运算结果可以是一个常数,也可以是一个存储器的地址。表达式中的各类运算符如下:有+、-、*、/,以及MOD,其中MOD表示除法运算后得到的余数。例:19/7的商是2,19MOD7则为5(余数)算术运算符可以用于数字表达式,例:MOVAL,2*7汇编时计算表达式形成指令为:MOVAL,0EH算术运算符也可以用于地址表达式,对地址运算的结果应有明确的物理意义,例两个地址的乘或除无意义,而加或减则可以,例:LEASI,SU
6、M+3表示变量SUM的地址加上3得到的和作为新存储器地址。(1)算术运算符逻辑运算符有AND、OR、XOR和NOT,它们只能用于数字表达式中。例:MOVCL,36HAND0FH汇编时形成指令:MOVCL,06H这些逻辑运算符也是8086/8088的指令助记符,但不会造成混乱,前者在汇编时进行,而后者在指令执行时进行的。例:ANDDX,PORTAND0FEH后一个逻辑运算符AND在汇编时进行,若PORT为81H,则汇编后表达式算出为80H。执行前一个指令助记符AND时,将(DX)与80H相与,结果在DX中。(2)逻辑运算符PORTEQU81H共有6个,它们为:EQ(
7、相等),NE(不等),LT(小于),GT(大于),LE(小于或等于),GE(大于或等于)关系运算符的两个操作数必须都是数字或者是同一段内的两个存储器地址。关系为真,结果为0FFH或0FFFFH关系为假,结果为0例:MOVBX,PORTGE5若PORT的值大于等于5,则汇编后为:MOVBX,0FFFFH若PORT的值小于5,则汇编后为:MOVBX,0(3)关系运算符它可以把存储器一些特征作为数值送回。这些操作符有OFFSET,SEG,TYPE,SIZE及LENGTH。OFFSET运算符用来取存储单元的偏移量。例:MOVSI,OFFSETSTRI1;将变量STRI1的
8、地址偏移量