《汇编语言程序设计》第4章市公开课金奖市赛课一等奖课件_第1页
《汇编语言程序设计》第4章市公开课金奖市赛课一等奖课件_第2页
《汇编语言程序设计》第4章市公开课金奖市赛课一等奖课件_第3页
《汇编语言程序设计》第4章市公开课金奖市赛课一等奖课件_第4页
《汇编语言程序设计》第4章市公开课金奖市赛课一等奖课件_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章汇编语言与源程序结构

◆汇编语言源程序与汇编程序

◆汇编语言语句种类及其格式

◆汇编语言数据与运算符

◆伪指令

◆源程序结构模式

第1页

4.1汇编语言源程序与汇编程序

1、汇编语言源程序汇编语言源程序是用汇编语言编写程序,简称汇编语言程序。汇编语言程序经过编辑程序在计算机中建立汇编语言源程序文件(ASM文件)。2、汇编程序将汇编语言源程序编译成目标程序加工程序称为汇编程序。这一加工过程称为汇编。汇编程序作用就是把源程序文件(ASM文件)转换成用二进制代码表示目标程序文件(OBJ文件)。汇编程序主要功效有:①

检验源程序。②测出源程序语法错误,并给犯错误。③

产生目标程序,并可给出列表文件④

展开宏指令。

返回第2页

4.2汇编语言语句种类及其格式

语句是汇编语言源程序基本组成单位。一个汇编语言源程序中有3种基本语句:指令语句、伪指令语句和宏指令语句。前两种是最常见、最基本语句。指令语句和伪指令语句不但在程序中功效不一样,而且实现其功效方法和时间也是不一样。1、指令语句指令语句就是计算机中指令系统各条指令,每条指令语句在汇编时都产生一个供CPU执行机器目标代码,所以这种语句又称为可执行语句。计算机中每条指令语句表示一个基本功效,这些基本功效是在程序运行期间由计算机硬件来实现。一条指令语句由四个字段组成,其普通格式以下:[标号:]指令助记符[操作数][;注释]

第3页

(1)标号标号是指令语句符号地址,它代表指令代码存放地址第一个字节地址。标号是指令语句可选项,通常在一个程序段或子程序入口指令语句选取标号,当程序需要转入这个程序段或调用子程序时,就可直接引用这标号。标号通常在代码段中定义,后面跟冒号“:”,它经常在转移指令或CALL指令中引用,用以表示转向地址,引用时标号后不跟冒号。(2)指令助记符指令助记符为指令语句关键,是不可省略主要部分,如MOV、ADD、XOR、RCL等等,它表示指令语句要求CPU完成详细操作。第4页(3)操作数操作数表示指令助记符操作对象,不一样指令所带操作数不一样,有一个操作数指令(如INC、NOT等),有二个操作数指令(如ADD、XOR等),无操作数指令(如CLC、STD等)。若需要操作数,则每一个操作数要依据寻址方式来表示。操作数能够是常数、存放器、标号、变量和表示式。(4)注释注释是用来说明一段程序或一条或多条指令功效,它是可选项,注释均以分号“;”开始,它可占一行或多行。注释还通惯用于调试程序。注释是语句非执行部分,所以,它不出现在机器目标代码中,也不影响指令语句功效。第5页

2、伪指令语句伪指令语句指示汇编程序在汇编源程序时完成一些工作,比如完成数据定义、分配存放区、指示程序结束等。伪指令属于汇编控制命令,它所指示操作是由汇编程序在汇编源程序时完成,在汇编时,它不产生目标代码,在将源程序汇编成目标程序后,它就不复存在了。总而言之可知,伪指令语句与指令语句主要区分是:伪指令语句经汇编后不产生机器目标代码,而指令语句经汇编后将产生对应机器目标代码;伪指令语句所指示操作是在程序汇编时完成,而指令语句操作必须在程序运行时才能完成。一条伪指令语句也由四个字段组成,其普通格式以下:[符号名]伪指令符操作数[;注释]第6页

(1)符号名符号名在伪指令语句中是一个可选项,符号名后面没有冒号,符号名能够是常量名、变量名、过程名等。(2)伪指令符伪指令符指定汇编程序要完成详细操作,它是伪指令语句关键部分,如数据定义伪指令DB、DW、DD,段定义伪指令SEGMENT,定义过程伪指令PROC等等。(3)操作数伪指令中操作数能够是常数、字符串、变量、表示式,其个数由详细伪指令决定,各个操作数之间用“,”分隔。(4)注释伪指令语句注释也是可选项,需要时必须以“;”开始。

第7页

3、标识符指令语句中标号和伪指令语句中符号名统称为标识符。它们由若干字符组成,标识符组成规则以下:(1)一个标识符由1--3个字符组成。(2)组成标识符字符能够是字母(A--Z或a--z)、数字(0--9)、专用字符(“?”、“·”、“@”、“$”、“下划线_”)。(3)除数字外,上述其余字符均可作为标识符首字符,“·”只能作为标识符首字符。(4)不能使用属于系统专用保留字。返回第8页

4.3汇编语言数据与运算符

汇编语言指令语句和伪指令语句操作数普通为常量、变量、标号、表示式。

1、常量常量是没有任何属性纯数值,它值在汇编期间已能完全确定,且在程序运行中也不会发生改变。常量分为数值常量、字符串常量和符号常量,它主要用于指令语句中马上数或伪指令语句中给变量赋初值等。(1)数值常量数值常量分为整数和实数。比如:11100011B,45693,0FF2AH,356703Q都是正确整数形式,又如:543.567,﹣45.23,1.2E﹣2,﹣45.4E﹢9都是正确实数形式。

第9页

(2)字符串常量字符串常量是用单引号括起来一个字符或多个字符。字符串常量以单引号中各字符ASCII码形式存放在内存中,如‘H’,在内存中就是41H,‘12’就是31H,32H。使用时可在单引号内直接写字符序列,如‘12AB’,也可写字符ASCII码,ASCII码之间用逗号分隔(此时不需要用单引号),如31H,32H,41H,42H表示字符串‘12AB’。

(3)符号常量符号常量是指用EQU伪指令或赋值语句“=”定义过符号名,可作操作数项或在表示式中使用。

第10页

2、变量在汇编语言中,变量是一个数据存放单元名称,即数据存放地址符号表示。它代表存放在一些存放单元数据,这些数据在程序运行期间随时能够改变。为方便访问变量,在程序中经过变量名来使用变量。(1)变量定义变量通常在数据段或附加段中使用数据定义伪指令来定义,定义变量就是给数据分配存放单元,有时为存放单元赋予一个变量名,并可同时为这些存放单元预置初值。数据定义伪指令格式为:[变量名]DB(DW、DD、DQ、DT)表示式1,表示式2,…第11页

其中:变量名是可选项,它仅代表所定义数据存放区第一个单元地址;DB、DW、DD、DQ和DT是伪指令符,详细一条数据定义伪指令取5种之一。DB定义是字节类型变量,每个表示式被分配1个字节单元。DW定义是字类型变量,每一个表示式被分配1个字单元(2个字节)。DD定义是双字类型变量,每一个表示式被分配2个字单元(4个字节)。DQ定义是四字类型变量,每一个表示式被分配4个字单元(8个字节)。DT定义是十字节类型变量,每一个表示式被分配10个字节单元。

第12页表达式1,表达式2……是给变量或指定存放单元赋予初值,它们有以下几个形式:(a)数值表达式数据定义伪指令可认为一个或连续存放单元设置数值初值。(b)字符串表达式对于DB伪指令,字符串长度允许超过2个字符,但不能超过255个字符,字符串必须用单引号括起来,它可为字符串中每个字符分配1字节单元,字符串从左至右以字符ASCII码形式按地址递增次序依次存放。

第13页

(c)?表示式不带引号?,用于为变量预留内存单元,暂时不存入数据,即表示所定义变量无确定初值。比如:ADW?,?为变量A预留2个字单元。(d)地址表示式操作数为地址表示式时,只适合用于DW和DD这两种数据定义伪指令。假如地址表示式为一变量(标号)名,用DW伪指令则是取它偏移地址来初始化变量;用DD伪指令则是取它段首地址和偏移地址来初始化变量。(e)带DUP表示式格式为:nDUP(表示式),其中n为重复因子,只能取正整数,它表示定义了n个数据存放单元。第14页

(2)变量属性

因为存放器是分段使用,因而源程序定义变量含有3个属性:(a)段属性(SEG)变量段属性是指定义变量时它所在段段首地址。(b)偏移属性(OFFSET)变量偏移属性是指所在段段首地址到定义该变量位置之间字节数(即偏移地址)。上述段属性和偏移属性值就组成了一个变量逻辑地址。(c)类型属性(TYPE)变量类型属性表示存放变量时所占存放单元字节个数。第15页

(3)变量使用定义后变量,在程序中引用有两种情况:(a)在指令语句中,采取存放器操作数几个寻址方式,除存放器间接寻址方式不使用变量名外,其余各种寻址方式均可使用变量名。比如,某数据段已定义一变量ARRAY:ARRAYDW5000H,4000H(b)在数据定义伪指令DW和DD中,操作数字段可直接引用已定义过变量名。如:ADB50H,40HBDWACDDB第16页

3、标号标号是一条指令语句符号地址,在汇编源程序中,只有在需要转向一条指令语句时,才为该指令语句设置标号,方便在控制转移指令中直接引用这个标号。标号普通在代码段中定义和引用。因为标号代表了指令符号地址,所以标号也有3个属性:(a)段属性(SEG)。标号段属性是指标号定义所在段段首地址。(b)偏移属性(OFFSET)。标号偏移属性是指标号所在段段首地址到该标号字节距离。(c)类型属性(TYPE)。标号类型属性表示了它转移特征,即该标号是作为段内还是段间转移(或调用)指令目标地址。标号类型属性有2种:NEAR类型和FAR类型。第17页

4、表示式和运算符汇编语言指令语句和伪指令语句中,表示式是操作数项常见形式,表示式是由常量、变量、标号用运算符连接而成有意义式子。表示式分为数值表示式和地址表示式,任一表示式值只计算一次,表示式计算是在源程序汇编过程中进行,而不是在程序运行中进行,汇编程序将表示式计算后得到一个数值或一个地址。在8086汇编语言中,运算符分为:算术运算符、逻辑运算符、关系运算符、数值返回运算符、属性运算符和字节分离运算符。第18页

(1)数值表示式数值表示式是由常量与算术运算符、逻辑运算符或关系运算符组成有意义式子。数值表示式在汇编期间进行运算,运算结果为一数值常量,它只有大小而没有属性。(2)地址表示式地址表示式是由常量、变量、标号、存放器(BX、BP、SI、DI)内容(用存放器名加方括号表示)和运算符组成有意义式子。单个变量、标号、存放器内容是地址表示式特例。地址表示式中能够使用算术运算符中“+”、“-”运算符和关系运算符。在地址表示式中,惯用形式是:变量±常量。

第19页

地址表示式除使用数值表示式运算符外,还能够使用特殊算符。(a)属性运算符属性运算符主要用于暂时修改变量、标号或某个内存单元中操作数类型属性。①段超越前缀“:”。其格式为:段存放器名:地址表示式或段名:地址表示式②类型运算符PTR。其使用格式为:类型PTR地址表示式依据地址表示式不一样值,类型能够是BYTE、WORD、DWORD、NEAR、FAR等。③定义类型运算符THIS。其格式为:标识符EQUTHIS类型第20页

(b)数值返回运算符数值返回运算符有5种,这些运算符运算对象必须是变量或标号,其功效是分离出变量或标号段、偏移地址及类型属性值,运算结果为一数值常量。①SEG运算符格式:SEG变量或标号功效:分离出其后变量或标号所在段段首地址。②OFFSET运算符格式:OFFSET变量或标号功效:分离出其后变量或标号偏移地址。③TYPE运算符格式:TYPE变量或标号功效:分离出其后变量或标号类型值。

第21页

④LENGTH运算符格式:LENGTH变量功效:取出变量所含数据存放单元个数。该运算符只对变量起作用,它取值依据定义该变量时数据定义伪指令后面第一个表示式形式而定。假如第一个表示式为重复子句“nDUP(表示式)”形式,则取值为前面重复因子n。假如为其它形式表示式,则取值均为1。⑤SIZE运算符格式:SIZE变量功效:取出变量所含数据存放区总字节数。其返回值为该变量LENGTH值和TYPE值乘积,即:LENGTH变量*YTPE变量。

第22页

(c)分离运算符①分离高字节运算符HIGH。格式:HIGH常量或地址表示式功效:用来分离出其后16位常量或地址表示式偏移地址高字节。②分离低字节运算符LOW。格式:LOW常量或地址表示式功效:用来分离出其后16位常量或地址表示式偏移地址低字节。(d)其它运算符SHORT运算符:用于说明其后标号在短距离(-128--27之间)内。()运算符用于改变运算优先级别。[]运算符用于表示间接寻址。返回第23页

4.4

伪指令

伪指令又称为伪操作,伪指令是汇编语言程序设计一个主要部分,因为汇编程序在汇编过程中无法区分源程序中分段情况,哪些是数据,哪些是指令,也无法识别数据类型,以及源程序在哪结束,所以,80X86宏汇编语言提供了各种伪指令,它主要告诉汇编程序怎样正确地将汇编源程序汇编成目标程序。

1、数据定义伪指令惯用数据定义伪指令有DB、DW、DD、DQ、DT。格式:[变量]数据定义伪指令表示式[,表示式,…]功效:定义数据存放区,类型由数据定义伪指令确定,初值由表示式给定。

第24页

2、符号定义伪指令符号定义伪指令用于为程序中屡次出现同一个常量或表示式定义为一个标识符,方便在源程序中以标识符来代替对应常量或表示式。符号定义伪指令有以下两种。(1)等价伪指令EQU格式:符号名EQU表示式功效:为常量或表示式及其它各种符号定义一个等价符号名,但它不申请分配存放单元。

说明:①表示式能够是常量或数值表示式;地址表示式;变量、标号或指令助记符。②符号名不占存放单元,没有段、偏移和类型3种属性③在同一源程序中,使用EQU定义符号不能与本程序中其它符号名同名;另外,同一符号不能用EQU伪指令重新定义。第25页

EQU伪指令主要有以下3方面应用:①定义符号常量。用符号名表示常量、数值表示式。

②EQU与属性运算符PTR或THIS连用,能够给变量或标号定义新类型属性并重新命名。但其段属性和偏移属性不变。③利用EQU能够用一个符号名替换一个复杂地址表示式和其它一些符号,如指令助记符、变量名、标号、段名、存放器名、宏定义名等。

(2)等号伪指令格式:符号名=表示式功效:该语句功效与EQU语句类似,不一样是等号伪指令能对所定义符号名屡次重新定义,且以最终一次定义值为准。第26页

3、段结构伪指令编制一个80X86汇编语言源程序,段是基础,这有两方面含义:一是必须按段来结构程序,二是在程序执行时,要凭借四个段存放器对各个段存放单元进行访问。段结构伪指令主要有两条语句,即段定义伪指令和假定伪指令。(1)段定义伪指令SEGMENT/ENDS格式:段名SEGMENT[定位类型][组合类型][‘类别’]┇段体段名ENDS功效:定义一个逻辑段,指定段名字和范围,段在内存中起始位置、段与段之间连接关系。说明:①段名由用户指定,开始与结束段名须一致。②SEGMENT/ENDS伪指令把程序分成若干逻辑段。

删节号为段体,段体内为指令和伪指令序列。

第27页

(2)假定伪指令ASSUME假定伪指令主要用于指示汇编程序哪些段是当前段以及这些段与段存放器之间对应关系。格式:ASSUME段存放器名:段名[,段存放器名:段名,…]其中,段名是指用SEGMENT/ENDS语句已定义段名,也能够是表示式“SEG变量或标号”,或者是关键字NOTHING;段存放器名可为CS、DS、SS、ES四者之一。功效:该语句普通出现在代码段中,用来设定段存放器与段之间对应关系,方便汇编程序知道段结构和在执行各种指令时知道应访问哪个段;也可用来取消段存放器与段之间对应关系(使用NOTHING时)。说明:①ASSUME伪指令设置在代码段内,第一个ASSUME语句普通放在段定义语句之后,是说明性语句。

第28页

②在一个代码段中,假如没有另外ASSUME伪指令重新设置,原有ASSUME语句设置一直有效。③不在当前段中变量和数据存放单元均是不可访问,不然,会在汇编时产生错误或运行时造成混乱,产生逻辑上错误,得犯错误结果。④ASSUME伪指令不产生任何目标代码,它仅仅是告诉汇编程序,哪些段是当前段,而且它们分别由哪个段存放器指向。⑤汇编程序不能检验在程序运行期间段存放器内容是否与上述ASSUME语句设置一致。假如在程序中间用ASSUME语句重建了DS或ES与某段关系时,就一定要紧跟着将这个新段首地址送入DS或ES中,不然,会因段存放器内容未更改而使得后面数据读写仍在原来数据段中进行,这么错误,系统是检验不出来,即出现逻辑错误。

第29页

4、源程序开始和结束伪指令(1)源程序开始伪指令在源程序开始处能够用NAME或TITLE为模块取名字。①NAME伪指令格式:NAME模块名汇编程序将以给出“模块名”作为模块名字。②TITLE伪指令假如程序中没有NAME伪指令,则也可使用TITLE伪指令。格式:TITLEtextTITLE伪指令可指定每一页上打印标题。同时,若程序中没有NAME伪指令,则汇编程序将用text中前6个字符作为模块名。text最多可有60个字符。若程序中既无NAME又无TITLE伪指令,则将用源程序名作为模块名。所以NAME及TITLE伪指令并不是必要,但普通常使用TITLE,方便在列表文件中能打印出标题来。

第30页(2)源程序结束伪指令格式:END[地址表示式]功效:该语句为源程序最终一个语句,用以标志整个程序结束,即告诉汇编程序汇编工作到此结束。其中,地址表示式为可选项,若选取地址表示式,则表示此程序是主程序,它能够单独执行,其地址表示式为该程序开启地址,即程序开始运行第一条指令地址,比如,“ENDSTART”,此START是第一条指令标号;若不选取表示式,则说明此程序为一子程序,不能单独运行,只能被其它程序调用。

第31页

5、定位伪指令ORG与汇编地址计数器($)汇编程序在汇编源程序时,每碰到一新段,就为该段设置一个初值为0汇编地址计数器,汇编程序使用汇编地址计数器记载正在汇编数据或指令目标代码在当前段内偏移地址。当前汇编地址计数器值可用符号$表示,用户可在程序中直接使用$,表示引用当前汇编地址计数器值。比如:

ARRAYDW4000H,5000H,6000HCOUNTEQU($-ARRAY)/2汇编地址计数器值能够用定位伪指令ORG设置。ORG伪指令格式:ORG数值

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论