第4章汇编语言_第1页
第4章汇编语言_第2页
第4章汇编语言_第3页
第4章汇编语言_第4页
第4章汇编语言_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

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

文档简介

第四章汇编语言1第四章汇编语言1、汇编语言基础2、PC机汇编语言的基本结构3、汇编语言的伪指令4、汇编语言程序设计基本技术5、汇编程序设计举例21、汇编语言基础计算机设计语言机器语言汇编语言高级语言面向机器的语言机器语言汇编语言高级语言31、汇编语言基础汇编语言汇编语言是面向机器的程序设计语言。因计算机而异汇编语言的一条可执行语句对应机器语言的一条指令。汇编语言比机器语言更易阅读、编写和修改。是面向编程人员的最低级语言。汇编语言能全面地反映计算机硬件的功能与特点。汇编语言编写的程序的优点是,运行速度快、能充分利用硬件资源、占用存储空间少。汇编语言广泛用于计算机系统的硬件操作程序和核心系统软件,是一切高级语言编译程序的开发工具。

汇编语言程序开发周期长,对人员素质要求高。4汇编语言源程序用助记符编写源程序的编译程序汇编程序汇编语言源程序机器语言目标程序1、汇编语言基础汇编语言与机器语言51、汇编语言基础高级语言脱离了(微)处理器硬件,更符合人们的习惯。与(微)处理器硬件无关,具有很好的通用性和可移植性。采用高级语言编程,具有比用汇编语言编程高得多的程序设计效率。高级语言是面向应用的语言。容易学习和使用。61、汇编语言基础汇编程序的功能汇编语言:用指令的助记符、符号地址、标号等符号书写程序的一种计算机语言。一般情况下,汇编语言程序的一条语句就是计算机的一条指令。汇编语言源程序:用汇编语言编写的程序(简称源程序)。.asm汇编:把源程序翻译成机器语言程序(目的程序)的过程。.obj汇编程序(assembler):汇编程序的主要功能是将由汇编语言(助记符)编写的源程序翻译成用机器语言(二进制代码)编写的目标程序。下图可用以说明这个功能。连接(LINK):将程序的各个组成部分结合成一整体的程序。.exe71、汇编语言基础汇编程序的功能(1)输入汇编语言的源文件。其扩展名为:.asm。(2)用汇编程序把.asm源文件汇编成目标文件,其扩展名为.obj,(3)用连接程序(LINK)把目标文件.Obj,及所用到的库文件或其它目标文件转换成可执行文件.EXE。81、汇编语言基础连接程序(LINK)把目标文件.obj,及所用到的库文件或其它目标文件转换成可执行文件,.exe文件(IBMPC).exe文件为可执行文件,在DOS操作系统下,直接键入该文件名即开始执行。库文件:独立的函数过程等文件。集成环境WAVE6000:将汇编,连接、调试、运行等集成在一个系统中。91、汇编语言基础基本汇编和宏汇编(MacroASseMbler)汇编程序是将汇编语言源程序翻译成机器语言的程序。

按用户要求自动分配存储区(包括程序区、数据区、堆栈区等);数制转换;计算常数表达式的值;对源程序进行语法检查,给出错误信息等功能。基本汇编程序。宏汇编(MacroASseMbler):在基本汇编程序的基础上,允许将一组汇编语言语句序列定义为一条宏指令的汇编程序。

101、汇编语言基础宏指令或宏命令将一组汇编语言语句序列定义为一个功能块,并赋予一个名字,其表示形式尤如一条计算机指令,并且在随后的汇编语言源程序中,可以象CPU的其它指令一样使用。宏指令或宏命令简称为“宏”MACRO。宏可以用与原来的计算机指令一样的符号。111、汇编语言基础宏汇编的主要功能

1)检查和编排源程序,

2)对源程序中的宏指令进行展开,

3)检查源程序中的语法错误,并给出出错信息,

4)把源程序翻译成目标程序.obj,并产生源程序列表文件。.lst122、PC机汇编语言的基本结构一般汇编程序结构datasegmenta1db12h……dataendsexdatasegmente1dd1234h……exdataendsstacksegment'stack'stdw100hspointequ200hstackendscodesegmentassumecs:code,ds:data,es:exdata,ss:stackstart:movax,datamovds,axmovax,exdatamoves,axmovax,stackmovss,axmovsp,spoint

movah,04chjmp$int21codeendsendstart132、PC机汇编语言的基本结构一般汇编程序结构关于程序结束的说明:

……MOVAH,4CH;DOS功能调用

INT21H;返回DOS操作系统在DOS操作系统下运行程序的过程:输入运行程序名(.exe)文件,按返回键,开始运行。运行到程序结束时执行上面指令后,DOS重新获得控制权。实验系统没有DOS操作系统,为了防止系统崩溃,程序的最后一条为:

JMP$;等待142、PC机汇编语言的基本结构汇编语言的语句类型指令性语句指示性语句CPU执行的语句,能够生成目标代码CPU不执行,而由汇编程序执行的语句,不生成目标代码152、PC机汇编语言的基本结构汇编语言的语句类型指令性语句:[标号:][前缀]助记符[操作数],[操作数][;注释]指令的符号地址,标号后要有冒号操作码注释前加分号指示性语句格式:[名字]伪指令助记符操作数[,操作数,…][;注释]变量的符号地址,其后不加冒号指示性语句中至少有一个操作数162、PC机汇编语言的基本结构汇编语言的语句类型标号后有冒号,在指令性语句前;名字后不加冒号,在指示性语句前。英文字母、数字及专用字符组成,最大长度不能超过31个,且不能由数字打头,不能用保留字(如寄存器名,指令助记符,伪指令)。 区分标号和名字1718数据项和表达式寄存器存储器单元常量变量或标号表达式操作数2、PC机汇编语言的基本结构汇编语言的语句类型19常量数字常量:没有任何属性的纯数值。在汇编期间,它的值已能完全确定,且在程序运行中,它也不会发生变化。字符串常量:用引号引起的字符或字符串‘A’,’ABCD’汇编时被译成对应的ASCII码41H,42H,43H,44H2、PC机汇编语言的基本结构汇编语言的语句类型20常数的应用

在程序中,常数主要出现在:

1)指令语句源操作数中做立即数,它应与目的操作数的位数相一致,可以是8位或16位的。

2)在指令语句中的基址加变址的寻址方式中作位移量。

3)在数据定义伪指令中。

例:

MOVAX,1234HMOVBX,[SI+32H]DB12H

;定义一个字节数据2、PC机汇编语言的基本结构汇编语言的语句类型21变量

变量是代表存放在某些存储单元的数据,这些数据在程序运行期间随时可以修改。为了便于对变量的访问,它常常以变量名的形式出现程序中,它可以认为是存放在数据存储单元的符号地址。(1)变量的定义与预置(2)数据定义伪指令2、PC机汇编语言的基本结构汇编语言的语句类型2、PC机汇编语言的基本结构汇编语言的语句类型操作码指令码命令CPU要完成的操作伪指令助记符指示汇编程序要完成的操作用来定义变量,分配存储单元指示程序开始和结束等注释用分号作为注释的开始用于说明程序或语句的功能,以便于阅读和理解223、

汇编语言的伪指令由汇编程序执行的“指令系统”。伪指令没有对应的机器指令,它不是由8086/8088CPU来执行,而是由MASM-86识别,并完成相应的功能。用于定义变量、分配存储区、定义逻辑段、指示程序开始和结束等伪指令23

标号名伪指令操作数注释这是一个任选字段。标号名后面不能用冒号“:”,这是它与指令语句的突出区别。不同的伪指令,标号名可以是常量名、变量名、过程名、结构名、记录名等。它们可以作为伪指令语句和指令语句的操作数,这时,标号名就表示一个常量或存储器地址。

这是伪指令语句不可省略的主要成分。伪指令种类很多,如定义数据伪指令DB,DW,DD;段定义伪指令SEGMENT;定义过程伪指令PROC等。它们是伪指令语句要求汇编程序完成的具体操作命令。本字段是否需要,需要几个,需要什么样的操作数等都由伪指令字段中伪指令来确定。操作数可以是一个常数、字符串、常量名、变量名、标号、一些专用的符号等。这是一个任选字段,它必须以分号为开始,它的作用与指令语句的注释字段相同。3、

汇编语言的伪指令伪指令243、

汇编语言的伪指令伪指令MASM-86识别的伪指令可分成以下几类:

(1)符号定义伪指令(8)定位伪指令

(2)内存数据定义伪指令(9)列表伪指令

(3)段定义伪指令

(10)系统隐含进位制伪指令

(4)段寄存器说明伪指令(11)连接伪指令

(5)子程序定义伪指令(12)记录伪指令(6)模块开始伪指令(13)结构伪指令(7)模块结束伪指令(14)块注释伪指令

(15)宏命令伪指令253、

汇编语言的伪指令符号定义伪指令格式:

(1)符号名

EQU

表达式

(2)符号名

=

表达式

作用:把表达式的值赋给符号名。区别:在同一程序中,用EQU语句赋值的符号名不能被重新赋值,但用“=”号赋值的符号名可以被重新赋值。表达式可以是常数、数值表达式、地址表达式、变量、标号名或助记符等。符号名以字母开头,可以包括字母、数字、下划线等。汇编语言中有一些保留的关键词,不能用作符号名。等值语句最简单的用法是定义常数。263、

汇编语言的伪指令符号定义伪指令datasegmenta1db12hb1equa1c1equ12h+34one=1close=0night=1d1=c1VAR1EQU[BP-10]dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovbp,14movax,var1nopcodeendsendstart273、

汇编语言的伪指令内存数据定义伪指令用于定义数据区中变量的类型此指令主要有以下五大类:字节定义伪指令DB定义的变量为字节型字定义伪指令DW定义的变量为字类型四字节定义伪指令DD定义的变量为双字型八字节定义伪指令DQ定义的变量为4字型十字节定义伪指令DT定义的变量为10字节型283、

汇编语言的伪指令内存数据定义伪指令29字节定义伪指令格式:[名字]DB〈表达式或数据项表〉

表达式值或项表中的每一项是一个字节数,它们从符号名地址开始按字节连续存放,直到表中数据项结束(地址递增方向)。方括号[]表示该项可以缺省。字定义伪指令格式:[名字]DW〈表达式或数据项〉

除表达式值或项表中的每一项是两个字节数之外,其它与DB伪指令相同。3、

汇编语言的伪指令30

格式:[名字]DD〈表达式或数据项〉

表达式值或项表的每一项是四个字节数。八字节定义伪指令格式:[名字]DQ〈表达式或数据项表〉

表达式值或数据项表的每一项是八字节数,各项从小地址一端连续存放,允许浮点数形式,与DD伪指令相同。高四个字节填0。内存数据定义伪指令四字节定义伪指令3、

汇编语言的伪指令31内存数据定义伪指令格式:[名字]DT〈表达式或数据项表〉表达式值或数据项表的每一项是10个字节数,允许浮点数形式,与DQ伪指令相同,若项表中的数据项是十进制整数书写的,汇编程序按组合的BCD码格式存放,最低字节在高地址一端存放,数据的最高字节的最高位是符号位,“0”表示正,“1”表示负。十字节定义伪指令3、

汇编语言的伪指令32内存数据定义伪指令该伪指令主要为数据项分配存储单元并预初值。该伪指令构成的语句格式是:

DB

变量名+DW+表达式1,表达式2,…DD

其中表达式1,表达式2,…是给变量赋予的初值。表达式可以有如下几种情况:

(1)数值表达式(2)?表达式(3)字符串表达式(4)带DUP表达式3、

汇编语言的伪指令33内存数据定义伪指令带DUP表达式DUP是定义重复数据操作符。使用DUP操作符格式是:

DB

变量名+DW+表达式1DUP(表达式2)

DD

其中表达式1是重复的次数,表达式2是重复的内容

BB1DB12HDUP(’ABCD’)

BB2DW10HDUP(4)3、

汇编语言的伪指令34ARRAY1DB2DUP(0,1,2,?)ARRAY2DB100DUP(0,2DUP(1,2),0,3)内存数据定义伪指令带DUP表达式3、

汇编语言的伪指令35内存数据定义伪指令datasegmentadb10h,2dup(0EEH),2dup(?)db2dup(30h,0afh)strdb'abcde','hello'wdw0abcdh,2345h,2dup(8765h)qqdq012345678httdt1000000000066778899aahdataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axnopnopcodeendsendstart3、

汇编语言的伪指令段定义伪指令36一个完整的汇编语言源程序,通常有三个部分组成,即代码部分,数据部分和堆栈部分。8086/8088的数据部分还可进一步分为(基本)数据部分(DS)和扩展数据部分(ES)。段定义伪指令用于对它们进行定义。汇编时,按段生成浮动目标代码;连接时,将各模块中同名段进行组合。

8088/8086中有四个段寄存器:CS,DS,ES,SS。3、

汇编语言的伪指令37段定义伪指令存储器在逻辑上是分段的,各段的定义由伪指令实现格式:

〈段名〉SEGMENT[定位类型][组合类型][类别名]

…………

〈段名〉ENDS

段定义伪指令为程序的汇编和连接说明了段名、分段的各种属性以及分段的开始和结束。段名是自定义符,开始的段名与结束的段名必须相同。段的长度不超过64KB(字节)。SEGMENT后面的参数是可选项。383、

汇编语言的伪指令段定义伪指令段定位类型Byte:本段可以从任意一个字节边界起始。Word:本段必须从字的边界起始。Para:段基址的最低4位的二进制数值必须为全0。隐含为该类型。Page:段基址的最低8位的二进制数值必须为全0。393、

汇编语言的伪指令组合类型段定义伪指令public:与其它同名段连接在一起,形成一个新的逻辑段common:与其它的同名段具有相同的起始地址,重叠,按最大的分配空间。None:与其它段没有关系atexpression:本段的起始地址为由atexpression计算出来的值。它不能用来指定代码段的段基址。stack:产生堆栈段,并把所有同名段连成一个新的逻辑段。Memory:表示本段应被放置在所有其它段的前面(最高地址处)。第一个段作为memory段,其他段都作为common段403、

汇编语言的伪指令段定义伪指令代码段定义伪指令codesegmentpublic‘code’;定义一个代码段

assumecs:code……Start:……codeendsendstart413、

汇编语言的伪指令段定义伪指令数据段定义伪指令DATASEGMENNTMDB2DUP(0,0);定义两个两字节的单元,并赋初值0,0XDB2DUP(30H,2DUP(4))

;定义两个以字节为单元的空间,每个空间又定义为,1个字节单元,并赋初值3;和两次重复的2个字节单元,赋初值4。因此共定义了6个字节的存储空间。

YDW100DUP(?);定义100个字的单元。

DATAENDS423、

汇编语言的伪指令段定义伪指令堆栈段定义伪指令stacksegment‘stack’;定义一个堆栈段

dw100dup(?)stackends定义一个堆栈段,并赋100字(200个字节)空间的。433、

汇编语言的伪指令段定义伪指令关于堆栈段堆栈也是一个存储区,但它不按存储单元编号使用。堆栈组成:段地址:SS

堆栈指针:SP指向当前栈顶。堆栈操作:减二,再压栈。8088先压栈顶,再压下一个字节。443、

汇编语言的伪指令段寄存器说明伪指令assume段寄存器名:段名[,段寄存器名:段名……]8088/8086中,段寄存器名必须是CS,DS,ES或SS之一。段名必须是用segment/ends伪指令定义过的段名。本伪指令的功能是将定义的段与段寄存器关联起来。在assume语句中,对于CS段寄存器,它不仅把相应的段分配给CS寄存器,还由操作系统直接将段基址装入到CS寄存器中。对于其它段寄存器(DS,ES,SS),则是指定把某个段分配给哪一个寄存器,而没有将段基址装入到相应的段基址中,因此,要在程序中对DS,ES,SS赋值。程序中不必也不能对CS寄存器赋值

段定义伪指令453、

汇编语言的伪指令程序结束标志伪指令:END段定义伪指令END[标号]END表示程序结束。其中,标号用来告诉操作系统,本程序开始执行的起始地址。若有多个程序模块,连接时,只有主模块的END要带标号。其它仅用END,不带标号。汇编程序应尽量按照程序规定的格式编写。

463、

汇编语言的伪指令段定义伪指令DATA1SEGMENT ;数据段

XDB05H YDB04H ZDB?DATA1ENDS

CODE1SEGMENT ;代码段

ASSUMECS:CODE,DS:DATASTART:

MOVAX,DATA ;数据段基址→AXMOVDS,AX ;AX→DS MOVAL,X ;内存单元X的数据→AL ADDAL,Y ;内存单元Y的数据+AL→AL,即X+Y→AL MOVZ,AL;AL→内存单元Z,即求和结果送回Z

MOVAH,4CH ;送功能号

INT21H ;系统功能调用,返回操作系统

CODE1ENDS

ENDSTART473、

汇编语言的伪指令子程序定义伪指令专门的程序块称为过程,也称为子程序。在需要的时候通过调用指令(CALL)调用。在汇编语言中,过程用过程定义伪指令来定义和实现。定义格式:〈过程名〉PROC[NEAR](或[FAR])…………

RET

〈过程名〉ENDP

过程名是自定义符。定义过程是为实现子程序调用而设的。调用格式为:

CALL〈过程名〉

过程由RET指令返回,它可以不是最后一条指令,它在过程中可以设多点返回。并且过程起始名和终止名必须相同。483、

汇编语言的伪指令子程序定义伪指令CODE_SEG SEGMENT

BEGINPROC FAR…CALLNEAR

A…CALL

FARB…

BEGINENDPA PROCNEAR

RETA ENDPCODE_SEG ENDSCODE_SEG1SEGMENTB PROC FAR

…RETB ENDPCODE_SEG1ENDS

493、

汇编语言的伪指令定位伪指令格式:

ORG〈表达式〉

该伪指令把以下语句定义的内存数据或程序,从表达式指定的起点(偏移地址)开始连续存放,直至遇到新的ORG指令。表达式的值是一个无符号数。DATASEGMENT

ORG0100HD1DB11H,22H,33HDATAENDS112233DS:0100计算值为非负常数503、

汇编语言的伪指令对准伪指令格式:

EVEN使下一个字节地址成为偶数DATASEGMENTD1DB56H(EVEN)D2DW7890HDATAENDS513、

汇编语言的伪指令取值运算符用于分析存储器操作数的属性OFFSET取得其后变量或标号的偏移地址SEG取得其后变量或标号的段地址TYPE取变量的类型LENGTH取所定义存储区的长度SIZE取所定义存储区的字节数523、

汇编语言的伪指令取值运算符取值运算符的格式:(1)SEG

求段基址格式:SEG〈符号名〉

(2)OFFSET

求偏移地址格式:OFFSET〈符号名〉

(3)TYPE

求符号名类型值格式:TYPE〈符号名〉类型1字节2字节4字节8字节10字节近程远程类型值124810-1-2533、

汇编语言的伪指令取值运算符

(4)SIZE

求为符号名分配的字节数格式:SIZE〈符号名〉

(5)LENGTH

求为符号名分配的项数格式:LENGTH〈符号名〉

注意:SIZE和LENGTH要求为符号名定义的数据项必须是用重复格式DUP()定义的。54若BUFFER存储区是用如下伪指令定义:

BUFFERDW200DUP(0)

则:

TYPE BUFFER

等于2

LENGTHBUFFER

等于200

SIZEBUFFER

等于400注意:SIZE=TYPE*LENGTH3、

汇编语言的伪指令取值运算符举例553、

汇编语言的伪指令属性运算符属性运算符PTR

用于指定其后存储器操作数的类型

格式:(类型)PTR(符号名)例1:MOVBYTEPTR[BX],12H

例2:已知内存变量D1是字节属性,要把它的两个字节内容送到AX中。

MOVAX,WORDPTRD156系统功能调用MS-DOS系统中提供了DOS和BIOS两套系统服务软件,它们可以完成键盘输入、信息显示、存储管理和文件操作等多种服务。BIOS是一组低级软件程序,驻留在系统的ROM内存区。而DOS提供了更加容易使用和方便移植的功能服务,是操作系统提供的。系统功能调用即为调用系统提供的中断服务程序,完成相应服务。57系统功能调用DOS中断系统内部中断:如掉电、运算溢出、奇偶错硬件中断:由中断控制器引入的外部硬件中断软件中断ROM-BIOS中断DOS中断584、汇编语言程序设计基本技术

程序是为了完成特定任务的一系列指令的有序集合。一个好的程序,除能正常运行,实现要求的功能外,还应具有结构清晰、可读性强、执行速度快、占用内存少等特点。

汇编语言程序中,最常见的程序形式有顺序程序、分支程序、循环程序和子程序。这几种程序的设计方法是汇编程序设计的基础。此外宏汇编程序中还有“宏”定义。594、汇编语言程序设计基本技术汇编程序基本设计技术顺序程序设计分支程序设计循环程序设计子程序设计宏命令程序设计60顺序程序设计4、汇编语言程序设计基本技术

顺序程序是最简单的程序,它的执行顺序和程序中指令的排列顺序完全一致。也就是从程序的第一条指令开始,依次执行,直到程序的最后一条指令,执行完成,退出。

Add:popaxpopbxaddax,bxpushax……jmp$例:求Y=3X4+5X3+6X2+4X+2的值计算过程:Y=3*X+5Y=Y*X+6Y=Y*X+4Y=Y*X+261顺序程序设计4、汇编语言程序设计基本技术DSEGSEGMENT;数据段定义

XDB5H;假定X=5HYDW0DSEGENDSCODESEGMENTASSUMECS:CODE,DS:DSEGBEGIN:

MOVAX,DSEGMOVDS,AXMOVAX,0MOVAL,3MOVBH,0MOVBL,X;BL=X

MULBXADDAX,5;AX=3*X+5MULBXADDAX,6;AX=……MULBXADDAX,4MULBXADDAX,2MOVY,AX;保留结果

MOVAH,4CHINT21H;返回DOSjmp$CODEENDSENDBEGIN

源程序如下:62分支程序设计4、汇编语言程序设计基本技术根据程序运行的结果采取不同的处理,这时,就需要分支程序来实现。分支程序有两个分支和多个分支两种。两分支结构是根据二值判断条件,转入其中的一支执行。

采用条件转移指令实现分支程序。对分支程序,尽量在分支运行结束再汇合到一处,继续执行。也就是说,一个功能段只有一个入口与一个出口。popaxandax,0ffffhjs,negativepositive:……jmpfinishnegative:……finish:……634、汇编语言程序设计基本技术分支程序设计644、汇编语言程序设计基本技术分支程序设计

CODESEGMENTASSUMECS:CODEBEGIN:

MOVAH,01H

;读键盘输入

INT21HTESTAL,1JZEVN

jnzoddodd:MOVAL,31HJMPDISPEVN:

MOVAL,30HDISP:

PUSHAXMOVAH,01HMOVDL,0AH;换行

INT21HMOVDL,0DH;回车

INT21HPOPAXMOVDL,AL;显示

INT21HMOVAH,4CHINT21HCODEENDSENDBEGIN

654、汇编语言程序设计基本技术循环程序设计重复执行某一计算过程

循环程序由初始化部分、主循环体(工作部分)、循环修改部分、循环控制部分和结束处理部分组成。

循环控制的方法有计数控制法和条件控制法。LOOP指令,DEC+JZ(JNZ)DeccxinccxjnexxxJnzxxxcmpcx,xx循环程序设计要注意循环层次,循环寄存器的使用。CX为LOOP指令指定的寄存器,当需要多重循环时,其它的循环次数不能用CX。如何解决多重循环?664、汇编语言程序设计基本技术循环程序设计674、汇编语言程序设计基本技术子程序设计子程序是一种相对独立的程序段,它实现某一特定的功能,比如求sin(X)等。子程序是用过程定义伪指令PROC/ENDP定义的程序段。

主程序和子程序是相对的,子程序也可以通过CALL指令调用子程序,称为子程序嵌套调用。子程序通过RET指令返回调用它的主程序。参数的传递一般有三种方式,寄存器传递参数、堆栈传递参数和存储器传递参数。堆栈传递参数如何处理?子程序嵌套调用的层数只受堆栈深度的影响。684、汇编语言程序设计基本技术子程序定义子程序是用过程定义伪指令PROC/ENDP定义的程序段。定义时要注意类型属性的选择,一般原则为在伪指令中已介绍过:(1)主程序和子程序在同一代码段,可定义为NEAR属性或FAR属性。(2)主程序和子程序在不同代码段,定义为FAR属性。(3)主程序一般定义为FAR属性。PC机上的应用程序(.exe文件)看作是DOS调用的一个子程序,而DOS对应用程序的调用和返回都是FAR属性的。694、汇编语言程序设计基本技术子程序调用和工作过程用CALL指令调用子程序,将IP(CS)内容压入堆栈,此时IP(CS)内容是什么?将调用的子程序的第一条指令起始的地址送IP(CS)执行子程序所有子程序最后一条执行指令必须为RET当执行到RET指令时将保留的(CS)IP从堆栈中弹出,从紧随调用指令的下一条指令继续执行。实验:设计子程序,并分析执行时序704、汇编语言程序设计基本技术子程序调用和工作过程子程序保护执行时所使用的寄存器的内容(作为主程序和子程序传递参数的寄存器除外)在返回主程序之前再恢复这些寄存器的内容。一般,子程序用PUSH指令将寄存器的内容保存在系统堆栈中,在返回前用指令POP指令将保护内容弹出堆栈,恢复寄存器的内容。注意堆栈的先进后出的特点,最先压进堆栈的数据最后弹出。714、汇编语言程序设计基本技术子程序调用和工作过程子程序还可以调用其它子程序,称为子程序的嵌套调用,有些子程序还能调用自身,这种调用称为递归调用。子程序嵌套调用的的层数不受限制,只要堆栈空间允许。但递归调用要注意递归的出口条件,防止发生死循环和陷入无限嵌套。724、汇编语言程序设计基本技术子程序库子程序是完成某个特定功能的程序。如三角函数计算,如浮点-定点转换等可以事先设计和调试好,并将它们集中组织成为子程序库,供应用程序中调用。如C库函数。734、汇编语言程序设计基本技术宏指令宏指令是另一种具有独立功能的程序段。宏指令也称宏命令(宏功能,简称“宏”)它与子程序的功能与组成十分相似,但是两个完全不同的程序技术,并且一般它们的应用领域也不同。

宏基本上用于核心功能程序的开发。744、汇编语言程序设计基本技术宏指令的定义格式:

宏名MACRO[形式参数1,形式参数2,…]

ENDM功能:宏命令伪指令为指令序列定义一个宏名,称为宏指令,宏名可以像指令一样在程序中引用。

...…宏体(指令序列)754、汇编语言程序设计基本技术宏指令的定义当代换指令中的符号时,在其前面需加一个宏代换符&

例如:AD1MACROY,XMOVCL,XRO&YAX,CLENDM宏调用:经宏代换语句定义的宏名,在应用时可直接引用,这个过程称为宏调用。例如:AD1R,5

注意:宏调用时,形式参数要用实在的参数取代,顺序也应与形式参数顺序相同。764、汇编语言程序设计基本技术宏指令的定义举例CODESEGMENTSHIFTMACROA,B,C;宏定义

MOVCL,CS&AB,CL;形参为指令助记符的一部分,加前缀&ENDMMAIN:NOPMOVBX,0FFHSHIFTHL,BX,3;宏调用,实现左移功能

NOP;无作用,为两次显示宏扩展进行隔离

NOPMOVAX,055HSHIFTHR,AX,2;宏调用,实现右移功能NOPCODEENDSENDMAIN774、汇编语言程序设计基本技术宏指令的使用宏指令的使用步骤:

(1)宏定义:对各个宏指令进行定义,并分别起一个名字;

(2)宏调用:在需要使用的地方,通过宏指令名来调用它;

(3)宏扩展:由宏汇编程序用宏定义中的指令来代替宏调用中的宏指令名。784、汇编语言程序设计基本技术宏调用和宏扩展宏指令名在源程序中的出现称为宏调用。宏调用的格式宏指令名[实参量,实参,……]宏指令名必须与宏定义中的宏指令名一致,其后的实参可以是数字、字符串、符号名或尖括号括起来的带间隔符的字符串。实参在顺序、属性、类型上要同形参保持一致,个数与形参应相等。用实参代

温馨提示

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

评论

0/150

提交评论