汇编第4章 8086汇编语言程序设计

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

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

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

资源描述

第4章8086汇编语言程序设计第4章8086汇编语言程序设计本章主要内容汇编语言基础知识1汇编语言的伪指令2系统功能调用3汇编语言程序设计4汇编语言程序的上机过程5第4章8086汇编语言程序设计4.1汇编语言基础知识4.1.1概述4.1.2汇编源程序的结构4.1.3汇编语言的语句4.1.4汇编语言的数据4.1.5汇编语言的操作符与表达式第4章8086汇编语言程序设计4.1.1概述汇编语言(AssemblyLanguage)是介于机器语言和高级语言之间的计算机语言,是一种用符号表示的面向机器的程序设计语言。它比机器语言易于阅读、编写和修改,又比高级语言运行速度快,能充分利用计算机的硬件资源,占用内存空间少。汇编语言常用于计算机控制系统的开发和高级语言编译程序的编制等应用场合。采用不同CPU的计算机有不同的汇编语言。第4章8086汇编语言程序设计用汇编语言编写的程序称为汇编语言程序或源程序(SourceProgram)。汇编语言源程序不能直接在计算机上运行,需要将它翻译成机器语言程序(也称目标代码程序,ObjectProgram)。这个翻译过程为汇编。完成汇编任务的程序(软件)称为汇编程序。第4章8086汇编语言程序设计汇编程序完成以下几个任务:将汇编语言源程序翻译成目标代码程序;按指令要求自动分配存储区(包括程序区、数据区等);自动把源程序中以各种进制表示的数据都转换成二进制形式的数据;计算表达式的值;对汇编语言源程序进行语法检查,并给出语法出错的提示信息。第4章8086汇编语言程序设计4.1.2汇编源程序的结构汇编语言程序由若干个段组成。按照各段功能的不同,分别有代码段、数据段、堆栈段和附加段。其中代码段是必须要定义的。第4章8086汇编语言程序设计【例4-1】编写汇编程序,计算2010H+2011H,并把和存入RESULT单元。DATASEGMENT;定义数据段XDW2010H;定义被加数YDW2011H;定义加数RESULTDW?;分配和数存放单元DATAENDS;数据段定义结束第4章8086汇编语言程序设计CODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AX第4章8086汇编语言程序设计MOVAX,XADDAX,YMOVRESULT,AXRETMAINENDPCODEENDSENDSTART第4章8086汇编语言程序设计汇编语言源程序的特点采用段式结构汇编源程序通常包含若干个段,上例的程序有数据段和代码段这两个段,DATA、CODE分别为两个段的名字。每一段有明显的起始语句SEGMENT与结束语句ENDS,这些语句称为“段定义”语句。每一段由若干汇编语句构成汇编源程序每一段包含若干汇编语句。汇编语句的主体是汇编指令。一条语句写一行,为了清晰,书写语句时,注意语句的各部分要尽量对齐。第4章8086汇编语言程序设计汇编语言源程序的特点(续)每个汇编源程序需要一个启动标号汇编语言源程序需要一个启动标号作为程序开始执行时目标代码的入口地址。启动标号可以按照汇编语言的标号命名规则由程序员自己定义。常用的启动标号有START、BEGIN等。加入适当注释,可以提高程序的可读性为了提高程序的可读性,可以在汇编语句后以分号“;”为起始标志,加入注释。第4章8086汇编语言程序设计汇编语言和操作系统(DOS)的接口计算机一旦启动成功,由DOS掌握CPU的控制权。应用程序只是作为DOS的子程序,应用程序执行完,必须返回DOS。上述程序的第7行、第9行~第11行、第17行和第18行就是为了完成此功能而设计的。第4章8086汇编语言程序设计(1)返回DOS的标准方法例4-1采用了此方法。具体程序设计方法如下:①将应用程序的主程序定义成一个FAR过程(见上述程序的第7行和第18行),该过程的最后一条指令为RET(见上述程序的第17行);②在代码段的主程序的开始部分用3条指令,把INT20H指令的段地址(CS=DS=ES)及偏移地址(0)压入堆栈(见上述程序的第9行~第11行)。这样,程序执行到主程序的最后一条指令RET时,由于过程具有FAR属性,故堆栈内的两个字分别弹出到IP及CS,便执行INT20H指令,返回到DOS。第4章8086汇编语言程序设计(2)用DOS功能调用4CH返回在用户程序中不定义过程段,删除上述程序的第7行、第9行~第11行和第18行指令,把原第17行的RET指令换成下面两条指令:MOVAH,4CHINT21HINT21H指令是DOS向用户提供服务程序的窗口。第4章8086汇编语言程序设计4.1.3汇编语言的语句汇编语言的语句可以分为:指令语句伪指令语句宏指令语句第4章8086汇编语言程序设计1.指令语句指令语句是可执行语句,汇编后将产生目标代码,CPU根据这些目标代码执行并完成特定操作。每一条指令语句表达了计算机具有的一个基本能力,这种能力在目标程序执行时反映出来。指令语句的格式为:[标号:]指令助记符[操作数][;注释]第4章8086汇编语言程序设计2.伪指令语句伪指令语句,也称指示性语句,是不可执行语句,汇编后不产生目标代码,它仅仅在汇编过程中告诉汇编程序如何汇编源程序。伪指令语句可以告诉汇编程序哪些语句是属于一个段、是什么类型的段、各段存入内存应如何组装、给变量分配多少存储单元、给数字或表达式命名等。伪指令语句的功能是由汇编程序汇编源程序时完成的,不是由CPU执行目标代码时实现的。第4章8086汇编语言程序设计伪指令语句的格式为:[符号名]伪指令助记符[操作数][;注释]第4章8086汇编语言程序设计3.宏指令语句宏是一个以宏名定义的指令序列。一旦把某程序段定义成宏,则可以用宏名代替那段程序。在汇编时,要对宏进行宏展开,即把以宏名表示的地方替换为该宏对应的指令序列的目标代码。宏指令可以看成指令语句的扩展,相当于多条指令语句的集合。宏指令格式为:[宏名]宏指令助记符[操作数][;注释]第4章8086汇编语言程序设计4.汇编语句格式说明(1)关于格式的几个组成部分汇编语句的格式中带中括号的部分是可选项。各部分之间必须用空格(SPACE)或水平制表符(TAB)隔开。操作数项由一个或多个表达式组成,它为执行语句所要求的操作提供需要的信息。第4章8086汇编语言程序设计4.汇编语句格式说明(续)注释项用来说明程序或语句的功能,注释项在汇编时不会产生目标代码。注释项可以跟在语句的后面。分号“;”是注释项的开始。当分号“;”作为一行的第一个字符时,表示注释占据一整行,常用来说明下面一段程序的功能。第4章8086汇编语言程序设计4.汇编语句格式说明(续)(2)关于标号与符号名标号与符号名都称为名字。标号是可选项,一般设置在程序的入口处或程序跳转点处,表示一条指令的符号地址,在代码段中定义,后面必须跟上冒号“:”。符号名也是一个可选项,可以是常量、变量、段名、过程名、宏名,后面不能跟冒号。第4章8086汇编语言程序设计4.汇编语句格式说明(续)(3)名字的命名规则①合法符号:字母(不分大小写)、数字及特殊符号(“?”,“@”,“_”,“$”,“•”)。②名字可以用除数字外所有的合法符号开头。但如果是用到符号“·”,那么这个符号必须是第一个字符。③名字的有效长度不超过31个英文字符。④不能把保留字(如CPU的寄存器名、指令助记符等)用作名字。第4章8086汇编语言程序设计4.汇编语句格式说明(续)(4)注释项注释项用来说明一段程序、一条或几条指令的功能,此项是可有可无的。但是,对于汇编语言源程序来说,注释项可以使程序易于被读懂;而对编写程序的人来讲,注释项可以是一种“备忘录”。第4章8086汇编语言程序设计注释编写举例例如,一般在循环程序的开始都有初始化程序,置有关工作单元的初值:MOVCX,100;将100送入CXMOVSI,0100H;将0100H送入SIMOVDI,0200H;将0200H送入DIMOVCX,100;循环计数器CX置初值MOVSI,0100H;源数据区指针SI置初值MOVDI,0200H;目标数据区指针DI置初值第4章8086汇编语言程序设计4.1.4汇编语言的数据数据是汇编语言语句的重要组成部分。汇编语言能识别的数据有:常量变量标号第4章8086汇编语言程序设计1.常量常量是没有任何属性的纯数值数据,它的值在汇编期间和程序运行过程中不能改变。汇编语言程序中的常量有:数值常量字符常量符号常量第4章8086汇编语言程序设计(1)数值常量在汇编程序中,数值常量可以用不同进制形式表示。二进制常量表示为以字母B(或b)结尾的由数字0和1组成的序列,例如,01100101B。八进制常量表示为以字母Q(或q)或O(或o)结尾的由数字0~7组成的序列,例如,145Q。第4章8086汇编语言程序设计(1)数值常量(续)十六进制常量表示为以字母H(或h)结尾的由数字0~9、字母A~F(或a~f)组成的序列,例如,653AH。十进制常量表示为以字母D(或d)结尾的由数字0~9组成的序列。汇编语句中的数据默认采用十进制表示形式,所以,采用十进制数时,也可省略结尾的字母。例如,101D或100。第4章8086汇编语言程序设计1.常量(续)(2)字符常量字符常量是用单引号括起来的单个字符,如'a'、'1'等。字符常量在操作中体现出的值是其ASCII码值。第4章8086汇编语言程序设计1.常量(续)(3)符号常量符号常量是用名字来标识的常量。以符号常量代替常量,可以增加程序的可读性及通用性。第4章8086汇编语言程序设计2.变量变量是存储单元的符号地址,这类存储单元的内容可以在程序运行期间被修改。变量以变量名的形式出现在程序中。同一个汇编程序中,变量只能定义一次。变量具有以下3种属性。段属性:变量所在段的段地址。偏移属性:变量所在段的段内偏移地址。类型属性:变量占用存储单元的字节数,如表5-1所示。第4章8086汇编语言程序设计3.标号标号是指令的符号地址,可用作控制转移指令的操作数。标号具有以下3种属性。段属性:标号所在段的段地址。偏移属性:标号所在段的段内偏移地址。类型属性:也叫距离属性,表示标号可作为段内或段间的转移特性第4章8086汇编语言程序设计变量的类型值变量类型类型值占用存储单元的字节数说明BYTE11字节型WORD22字型DWORD44双字型QWORD88四字型TBYTE1010五字型标号NEAR-1近标号(段内调用)FAR-2远标号(段间调用)第4章8086汇编语言程序设计4.1.5汇编语言的操作符与表达式操作项是汇编语句中的一个重要组成部分,它可以由常量(常数)、寄存器、标号、变量或表达式组成。表达式是常量、寄存器、标号、变量与一些操作符相组合的序列,分为数值表达式和地址表达式两种。汇编程序在汇编时按照一定的规则对表达式进行计算后可以得到一个数值或地址值。第4章8086汇编语言程序设计1.算术操作符算术操作符有:加(+)、减(-)、乘(*)、除(/)和取余(MOD)。参加运算的数和运算的结果都是整数。除法运算的结果是商的整数部分。取余操作的结果是两个整数相除后得到的余数。第4章8086汇编语言程序设计算术操作符可以用于数值表达式或地址表达式。当它用于地址表达式时,仅当其结果有明确的物理意义时,才是有效的结果。例如,将两个地址相乘或相除都是没有意义的。加、减操作可以用于地址表达式,但也要注意其物理意义。例如,将两个地址相加或相减也是没有意义的。有意义的用法是地址值与一个偏移量相加或相减,可以得到一个新的地址值。第4章8086汇编语言程序设计例如:MOVAX,2+3*5;汇编后,表达式2+3*5被数值17代替MOVBL,NUM+1;表达式NUM+1是汇编时由汇编程序计算的,不是由CP

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

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

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

×
保存成功