汇编语言程序格式_第1页
汇编语言程序格式_第2页
汇编语言程序格式_第3页
汇编语言程序格式_第4页
汇编语言程序格式_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、汇编语言程序格式汇编语言程序格式汇编语言程序格式汇编语言程序格式汇编语言程序格式汇编语言程序格式一、汇编语句类型和格式一、汇编语句类型和格式1 1语句类型语句类型硬指令语句(指令性语句) 是指能产生目标代码,cpu可以执行的,能完成特定功能的语句,它主要由cpu指令组成伪指令语句(指示性语句) 是一种不产生目标代码的语句,它仅仅在汇编过程中告诉汇编程序应如何汇编宏指令语句 是一个指令序列,汇编时凡有宏指令语句的地方都将用相应的指令序列的目标代码插入汇编语言程序格式汇编语言程序格式2 2语句的格式语句的格式(1 1)执行性语句)执行性语句 标号标号:硬指令助记符硬指令助记符 操作数,操作数操作数

2、,操作数 ;注释;注释(2 2)说明性语句)说明性语句 名字名字 伪指令助记符伪指令助记符 参数,参数参数,参数 ;注释;注释汇编语言程序格式汇编语言程序格式 8086按照逻辑段组织程序,具有代码段、数据段、附加段和堆栈段一个汇编语言源程序可以包括若干个代码段、数据段或堆栈段段与段之间的顺序可以随意排列。逻辑段用汇编语言源程序中的段定义伪指令段定义伪指令来定义汇编语言程序格式汇编语言程序格式 完整段定义伪指令 指定段寄存器伪指令 段寄存器的装入 可执行程序的正常结束汇编语言程序格式汇编语言程序格式1 1完整段定义伪指令(完整段定义伪指令(segmentsegment、endsends)作用:作

3、用:控制汇编程序和连接程序在内存中组织代码和数据的方式。控制汇编程序和连接程序在内存中组织代码和数据的方式。格式:格式: 段名段名 segmentsegment 定位类型定位类型 组合类型组合类型 类别名类别名 段名段名 endsends注意:注意:usegmentsegment和和endsends总是总是成对出现成对出现u中间省略部分称为中间省略部分称为段体段体。对代码段来说,则主要是程序代码;。对代码段来说,则主要是程序代码;对其它段来说,一般用于变量、符号等的定义对其它段来说,一般用于变量、符号等的定义u方括号中的为可选项,当有可选项时方括号中的为可选项,当有可选项时各项顺序不能错各项顺

4、序不能错,可选,可选项之间用空格隔开项之间用空格隔开汇编语言程序格式汇编语言程序格式(1) (1) 段名段名 段名是用户自定义的,但不要与指令助记符或伪指令段名是用户自定义的,但不要与指令助记符或伪指令重名重名 用来用来指示汇编程序为该段分配的存储区的首地址指示汇编程序为该段分配的存储区的首地址 段名有段地址和偏移地址两个属性段名有段地址和偏移地址两个属性 段开始和段结束的段名必须相同段开始和段结束的段名必须相同汇编语言程序格式汇编语言程序格式(2) (2) 定位类型定位类型 说明说明段的起始地址的边界要求段的起始地址的边界要求,指示连接程序按定位类,指示连接程序按定位类型提出的要求,安排各段

5、在内存的型提出的要求,安排各段在内存的相互衔接方式相互衔接方式。它有。它有5 5种可种可选择类型:选择类型: byte byte:段的起始地址可以从任何地址开始段的起始地址可以从任何地址开始。 段起始地址段起始地址(20(20位位) ): b b wordword:段的起始地址必须以:段的起始地址必须以偶地址开始偶地址开始 段起始地址段起始地址(20(20位位) ): 0 b0 b汇编语言程序格式汇编语言程序格式 dword dword:段的起始地址:段的起始地址必须为必须为4 4的倍数的倍数 段起始地址段起始地址(20(20位位) ): 0 0 b0 0 b para para:段的起始地址

6、必须:段的起始地址必须从小段边界开始从小段边界开始 段起始地址段起始地址(20(20位位) ): 0 0 0 0 b 0 0 0 0 b pagepage:段的起始地址:段的起始地址必须从页的边界开始必须从页的边界开始 段起始地址段起始地址(20(20位位) ): 0 0 0 0 0 0 0 0 b 0 0 0 0 0 0 0 0 b如未指定定位类型,则汇编程序默认为如未指定定位类型,则汇编程序默认为parapara。汇编语言程序格式汇编语言程序格式(3) (3) 组合类型组合类型 当程序有多个段时,组合类型用来说明段与段之间是怎样连接和定位的,共有6种组合类型: 不指定或称隐含方式:表示本段

7、与其他模块中的同名段无连接关系,它将作为一个独立的段运行。 public:本段与其他模块中说明为public方式的同名段顺序连接,组成一个大的逻辑段,它们共用同一个段起始地址。 common:本段与其他模块中说明为common方式的同名段从同一地址开始重叠连接,段长是同名段中最长的段的长度。汇编语言程序格式汇编语言程序格式 stack stack:表示:表示该段是堆栈段的一部分。把所有相同该段是堆栈段的一部分。把所有相同 类类别名别名的具有的具有stackstack组合类型的段连接成一个连续段组合类型的段连接成一个连续段,该段,该段长度为各原有段的总和。将长度为各原有段的总和。将连续段首地址送

8、连续段首地址送ssss,段内最大,段内最大偏移地址送偏移地址送spsp(spsp指向栈顶)。当指向栈顶)。当定义了定义了stackstack属性后,在属性后,在主程序中可省略对主程序中可省略对ssss和和spsp的初始化的初始化。 memory memory:与:与publicpublic同义。同义。 汇编语言程序格式汇编语言程序格式(4) (4) 类别名类别名 类别名必须用单引号括起来。连接时对不同模块、类别名必须用单引号括起来。连接时对不同模块、不同名的程序段只要不同名的程序段只要类别名类别名相同相同,则,则放在一个连续放在一个连续的物理空间的物理空间,但每段之间是独立的,不进行组合。,但

9、每段之间是独立的,不进行组合。汇编语言程序格式汇编语言程序格式2 2指定段寄存器伪指令(指定段寄存器伪指令(assumeassume) 作用:作用:明确段和段寄存器之间的关系明确段和段寄存器之间的关系,即,即告诉汇编程序,告诉汇编程序,在运行期间通过哪个段才能找到所要的指令和数据在运行期间通过哪个段才能找到所要的指令和数据 格式:格式:assumeassume 段寄存器名:段名段寄存器名:段名 ,段寄存器名:段名段寄存器名:段名 例如:例如:assume csassume cs:codecode,dsds:datadata,ssss:stackstack汇编语言程序格式汇编语言程序格式3 3段

10、寄存器的装入段寄存器的装入 assume伪指令只是指出各段和段寄存器之间的关系,但并未真正将段基地址装入相应的段寄存器中,所以在程序的代码段开始处就应该先进行段基址的装入 数据段ds、附加段es和堆栈段ss的段基址由用户程序代码装入 代码段cs在加载程序后由系统自动装入汇编语言程序格式汇编语言程序格式(1) ds(1) ds、eses的装入的装入 mov axmov ax,data data ;数据段段基地址送;数据段段基地址送axax寄存器寄存器 mov dsmov ds,ax ax ;axax寄存器的内容送数据段寄存器寄存器的内容送数据段寄存器dsds或或 mov axmov ax,seg

11、 x seg x ;变量;变量x x所在数据段的段基址送所在数据段的段基址送axax寄存器寄存器 mov dsmov ds,axax汇编语言程序格式汇编语言程序格式(2) cs(2) cs的装入的装入 对对cscs和和ipip的装入方法是利用的装入方法是利用endend后的后的标号来完成的。标号来完成的。如:如: startstart: end end startstart 系统自动将系统自动将startstart所在段的段地址送所在段的段地址送cscs寄存器,将寄存器,将startstart所在所在段内的偏移地址段内的偏移地址送送ipip寄存器寄存器。 汇编语言程序格式汇编语言程序格式(3)

12、 ss(3) ss的装入的装入方法方法1 1:由系统自动装填。由系统自动装填。要求在要求在定义堆栈段时,必须把定义堆栈段时,必须把参数写全。参数写全。这时,将程序装入内存,系统会自动地把堆这时,将程序装入内存,系统会自动地把堆栈段地址和堆栈指针置入栈段地址和堆栈指针置入ssss和和spsp中,因而可以不在代码中,因而可以不在代码段中装入段中装入ssss和和spsp的值。的值。stack1 segment stack1 segment para stack stackpara stack stackdb 50h dup(?)db 50h dup(?)stack1 endsstack1 ends汇

13、编语言程序格式汇编语言程序格式方法方法2 2:手动装填手动装填stack1 segment parastack1 segment paradw 50h dup(?)dw 50h dup(?)top label wordtop label word;toptop属性为属性为wordwordstack1 endsstack1 endscode segmentcode segmentassume csassume cs:codecode,ssss:stack1stack1startstart: mov axmov ax,stack1stack1mov ssmov ss,axax ;堆栈段的段地址送;

14、堆栈段的段地址送ssssmov spmov sp,offset topoffset top;堆栈段的栈顶地址送;堆栈段的栈顶地址送spsptoptop是该堆栈的初始栈顶部地址。是该堆栈的初始栈顶部地址。汇编语言程序格式汇编语言程序格式4 4操作系统下操作系统下可执行程序的正常结束可执行程序的正常结束方法方法1(1(非标准方法非标准方法):): 在在code endscode ends之前增加如下语句:之前增加如下语句: mov axmov ax,4c00h4c00h int 21h int 21h方法方法2 (2 (标准方法标准方法):): main proc farmain proc far

15、push dspush ds ;保存原来的;保存原来的psppsp段地址段地址mov axmov ax,0h0h ;0 0送送ax ax push axpush ax ;0 0压栈压栈retret ;返回;返回dosdosmain endpmain endp汇编语言程序格式汇编语言程序格式完整段定义的源程序格式完整段定义的源程序格式 data segmentdata segment;定义数据段;定义数据段datadata string stringdb hellodb hello,everybody everybody !,0dh0dh,0ah0ah,$ data endsdata ends;

16、数据段结束;数据段结束 code segmentcode segment ;定义代码段;定义代码段code code assume csassume cs:codecode,dsds:datadata ;确定;确定cscs、dsds、ssss指向的逻辑段指向的逻辑段 startstart:mov axmov ax,datadata ;设置数据段的段地址;设置数据段的段地址dsds mov dsmov ds,axax mov dx mov dx,offset stringoffset string;利用功能调用显示信息;利用功能调用显示信息 mov ahmov ah,9 9 int 21h in

17、t 21h mov ah mov ah,4ch 4ch ;利用系统功能调用返回;利用系统功能调用返回dosdos int 21h int 21h code ends code ends ;代码段结束;代码段结束 end start end start ;汇编结束;汇编结束汇编语言程序格式汇编语言程序格式 简化的段定义简化的段定义书写简单书写简单,有利于有利于实现汇编语言程序模块实现汇编语言程序模块与高级语言程序模块的与高级语言程序模块的连接连接,它可以由操作系统自动安排段,它可以由操作系统自动安排段序,自动保证名字定义的一致性。序,自动保证名字定义的一致性。汇编语言程序格式汇编语言程序格式1

18、1存储模式选择伪操作存储模式选择伪操作( (model)model) 格式:格式: 功能:功能: 本语句本语句一般放在段定义之前一般放在段定义之前,用来,用来说明在存储器中说明在存储器中是如何安放各个段是如何安放各个段的。的。 模式类型说明代码段、数据段在程序中如何安排;模式类型说明代码段、数据段在程序中如何安排;代码、数据的寻址是近还是远。代码、数据的寻址是近还是远。 根据它们的不同组合,模式类型可以有如下根据它们的不同组合,模式类型可以有如下5 5种种。汇编语言程序格式汇编语言程序格式 tiny tiny模式:也叫微模式,模式:也叫微模式,所有数据及代码放入同一个物所有数据及代码放入同一个

19、物理段内理段内,该模式用于编写较小的源程序,这种模式的源程,该模式用于编写较小的源程序,这种模式的源程序最终可以形成序最终可以形成comcom文件文件。 small small:也叫小模式,:也叫小模式,所有数据放入一个所有数据放入一个 64kb64kb的段中,的段中,所有代码放入另一个所有代码放入另一个64kb64kb的段中的段中,即程序中只有一个数据,即程序中只有一个数据段和一个代码段这是一般应用程序最常用的一种模式。段和一个代码段这是一般应用程序最常用的一种模式。汇编语言程序格式汇编语言程序格式 medium medium:也叫中模式:也叫中模式:所有数据放入一个所有数据放入一个 64k

20、b64kb的段的段中,代码可以放入多于一个的段中中,代码可以放入多于一个的段中,即,即程序中可以有多程序中可以有多个代码段个代码段。 compact compact:也叫压缩模式,所有代码放入一个也叫压缩模式,所有代码放入一个64kb64kb的的段中;数据可以放入多于一个的段中段中;数据可以放入多于一个的段中,即程序中,即程序中可以有可以有多个数据段多个数据段。 large large:也叫大模式,代码和数据都可以分别放入多:也叫大模式,代码和数据都可以分别放入多于一个的段中,即程序中于一个的段中,即程序中可以有多个代码段和多个数据可以有多个代码段和多个数据段段。汇编语言程序格式汇编语言程序格

21、式2 2数据段定义伪指令数据段定义伪指令(.data)(.data) 格式:格式:.data .data 名字名字 定义一个数据段,如果定义一个数据段,如果有多个数据段,则用名字来区有多个数据段,则用名字来区别:别:只有一个数据段时,只有一个数据段时,隐含段名为隐含段名为datadata。3 3堆栈段定义伪指令堆栈段定义伪指令(.stack)(.stack) 格式:格式:.stack .stack 长度长度 定义一个堆栈段,并形成定义一个堆栈段,并形成ssss及及spsp的初值,的初值,spsp的默认值的默认值为为10241024,隐含段名为,隐含段名为stackstack。可选的长度参数指定

22、堆栈可选的长度参数指定堆栈段所占存储区的字节数,默认大小是段所占存储区的字节数,默认大小是1kb1kb。汇编语言程序格式汇编语言程序格式4 4代码段定义伪指令代码段定义伪指令(.code)(.code)格式:格式:.code .code 名字名字 定义一个代码段,如果有定义一个代码段,如果有多个代码段,则用名字来多个代码段,则用名字来 区区别别:只有一个代码段时,:只有一个代码段时,隐含段名为隐含段名为codecode。5 5程序开始伪指令程序开始伪指令(.startup)(.startup)格式:格式:.startup.startup 产生程序开始执行的代码产生程序开始执行的代码,同时还,同

23、时还指定了程序开始执指定了程序开始执行的起点。行的起点。 在小模式下,在小模式下,可以省略将数据段基址装入可以省略将数据段基址装入dsds的语句的语句。汇编语言程序格式汇编语言程序格式6 6程序返回伪指令程序返回伪指令(.exit)(.exit) 格式:格式:.exit .exit 参数参数 功能:功能:.exit.exit产生终止程序执行返回操作系统的指令代产生终止程序执行返回操作系统的指令代码。可选参数是一个返回的数码,通常用码。可选参数是一个返回的数码,通常用0 0代表代表没有错误没有错误 例如:例如:.exit 0.exit 0对应的代码是:对应的代码是: mov axmov ax,4

24、c00h4c00h int 21h int 21h汇编语言程序格式汇编语言程序格式简化段定义的源程序格式简化段定义的源程序格式modelmodel smallsmall ;定义程序的存储模式;定义程序的存储模式stackstack;定义堆栈段;定义堆栈段datadata ;定义数据段;定义数据段 string db hellostring db hello,everybody !everybody !,0dh0dh,0ah0ah,$ ;在数据段定义要显示的字符串;在数据段定义要显示的字符串codecode ;定义代码段;定义代码段startupstartup ;说明程序起始位置,并建立;说明程

25、序起始位置,并建立dsds、ssss内容内容 mov dxmov dx,offset stringoffset string;指定字符串在数据段的偏移地址;指定字符串在数据段的偏移地址 mov ahmov ah,9 9 int 21h int 21h ;利用;利用dosdos功能调用显示信息功能调用显示信息exit 0exit 0 ;程序结束点,返回;程序结束点,返回dosdos endend ;汇编结束;汇编结束汇编语言程序格式汇编语言程序格式简化段定义的源程序格式简化段定义的源程序格式modelmodel smallsmall ;定义程序的存储模式;定义程序的存储模式stackstack;

26、定义堆栈段;定义堆栈段datadata ;定义数据段;定义数据段 string db hellostring db hello,everybody !everybody !,0dh0dh,0ah0ah,$ ;在数据段定义要显示的字符串;在数据段定义要显示的字符串codecode ;定义代码段;定义代码段start:start: mov ax,data mov ax,data mov ds,a mov ds,a ;说明程序起始位置,并建立;说明程序起始位置,并建立dsds、ssss内容内容 mov dxmov dx,offset stringoffset string ;指定字符串在数据段的偏移地址

温馨提示

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

评论

0/150

提交评论