收藏 分销(赏)

汇编语言程序格式.ppt

上传人:精**** 文档编号:1683991 上传时间:2024-05-07 格式:PPT 页数:31 大小:203KB 下载积分:12 金币
下载 相关 举报
汇编语言程序格式.ppt_第1页
第1页 / 共31页
汇编语言程序格式.ppt_第2页
第2页 / 共31页


点击查看更多>>
资源描述
汇编语言程序格式汇编语言程序格式一、汇编语句类型和格式一、汇编语句类型和格式l1 1语句类型语句类型硬指令语句(指令性语句)是指能产生目标代码,CPU可以执行的,能完成特定功能的语句,它主要由CPU指令组成伪指令语句(指示性语句)是一种不产生目标代码的语句,它仅仅在汇编过程中告诉汇编程序应如何汇编宏指令语句 是一个指令序列,汇编时凡有宏指令语句的地方都将用相应的指令序列的目标代码插入l2 2语句的格式语句的格式l(1 1)执行性语句)执行性语句 标号标号:硬指令助记符硬指令助记符 操作数,操作数操作数,操作数 ;注释;注释l(2 2)说明性语句)说明性语句 名字名字 伪指令助记符伪指令助记符 参数,参数参数,参数 ;注释;注释二、完整段定义格式二、完整段定义格式 8086按照逻辑段组织程序,具有代码段、数据段、附加段和堆栈段一个汇编语言源程序可以包括若干个代码段、数据段或堆栈段段与段之间的顺序可以随意排列。逻辑段用汇编语言源程序中的段定义伪指令段定义伪指令来定义二、完整段定义格式二、完整段定义格式 完整段定义伪指令 指定段寄存器伪指令 段寄存器的装入 可执行程序的正常结束l1 1完整段定义伪指令(完整段定义伪指令(SEGMENTSEGMENT、ENDSENDS)作用:作用:控制汇编程序和连接程序在内存中组织代码和数据的方式。控制汇编程序和连接程序在内存中组织代码和数据的方式。格式:格式:段名段名 SEGMENTSEGMENT 定位类型定位类型 组合类型组合类型 类别名类别名 段名段名 ENDSENDS注意:注意:uSEGMENTSEGMENT和和ENDSENDS总是总是成对出现成对出现u中间省略部分称为中间省略部分称为段体段体。对代码段来说,则主要是程序代码;。对代码段来说,则主要是程序代码;对其它段来说,一般用于变量、符号等的定义对其它段来说,一般用于变量、符号等的定义u方括号中的为可选项,当有可选项时方括号中的为可选项,当有可选项时各项顺序不能错各项顺序不能错,可选,可选项之间用空格隔开项之间用空格隔开l(1)(1)段名段名 段名是用户自定义的,但不要与指令助记符或段名是用户自定义的,但不要与指令助记符或伪指令重名伪指令重名 用来用来指示汇编程序为该段分配的存储区的首地指示汇编程序为该段分配的存储区的首地址址 段名有段地址和偏移地址两个属性段名有段地址和偏移地址两个属性 段开始和段结束的段名必须相同段开始和段结束的段名必须相同l(2)(2)定位类型定位类型l 说明说明段的起始地址的边界要求段的起始地址的边界要求,指示连接程序,指示连接程序按定位类型提出的要求,安排各段在内存的按定位类型提出的要求,安排各段在内存的相互衔相互衔接方式接方式。它有。它有5 5种可选择类型:种可选择类型:l BYTEBYTE:段的起始地址可以从任何地址开始段的起始地址可以从任何地址开始。l 段起始地址段起始地址(20(20位位):l B Bl WORD WORD:段的起始地址必须以:段的起始地址必须以偶地址开始偶地址开始l 段起始地址段起始地址(20(20位位):l 0 B0 Bl DWORD DWORD:段的起始地址:段的起始地址必须为必须为4 4的倍数的倍数l 段起始地址段起始地址(20(20位位):l 0 0 B0 0 Bl PARA PARA:段的起始地址必须:段的起始地址必须从小段边界开始从小段边界开始l 段起始地址段起始地址(20(20位位):l 0 0 0 0 B 0 0 0 0 Bl PAGEPAGE:段的起始地址:段的起始地址必须从页的边界开始必须从页的边界开始l 段起始地址段起始地址(20(20位位):l 0 0 0 0 0 0 0 0 B 0 0 0 0 0 0 0 0 Bl如未指定定位类型,则汇编程序默认为如未指定定位类型,则汇编程序默认为PARAPARA。l(3)(3)组合类型组合类型l 当程序有多个段时,组合类型用来说明段与段之间是怎样连接和定位的,共有6种组合类型:l 不指定或称隐含方式:表示本段与其他模块中的同名段无连接关系,它将作为一个独立的段运行。l PUBLIC:本段与其他模块中说明为PUBLIC方式的同名段顺序连接,组成一个大的逻辑段,它们共用同一个段起始地址。l COMMON:本段与其他模块中说明为COMMON方式的同名段从同一地址开始重叠连接,段长是同名段中最长的段的长度。l STACK STACK:表示:表示该段是堆栈段的一部分。把所有该段是堆栈段的一部分。把所有相同相同 类别名类别名的具有的具有STACKSTACK组合类型的段连接成组合类型的段连接成一个连续段一个连续段,该段长度为各原有段的总和。将,该段长度为各原有段的总和。将连续连续段首地址送段首地址送SSSS,段内最大偏移地址送,段内最大偏移地址送SPSP(SPSP指向栈指向栈顶)。当顶)。当定义了定义了STACKSTACK属性后,在主程序中可省略属性后,在主程序中可省略对对SSSS和和SPSP的初始化的初始化。l MEMORYMEMORY:与:与PUBLICPUBLIC同义。同义。l(4)(4)类别名类别名l 类别名必须用单引号括起来。连接时对不类别名必须用单引号括起来。连接时对不同模块、不同名的程序段只要同模块、不同名的程序段只要类别名类别名相同相同,则则放在一个连续的物理空间放在一个连续的物理空间,但每段之间是独立,但每段之间是独立的,不进行组合。的,不进行组合。l2 2指定段寄存器伪指令(指定段寄存器伪指令(ASSUMEASSUME)作用:作用:明确段和段寄存器之间的关系明确段和段寄存器之间的关系,即,即告诉汇编告诉汇编程序,在运行期间通过哪个段才能找到所要的指令程序,在运行期间通过哪个段才能找到所要的指令和数据和数据 格式:格式:ASSUMEASSUME 段寄存器名:段名段寄存器名:段名,段寄存器名:段名段寄存器名:段名 l 例如:例如:ASSUME CSASSUME CS:CODECODE,DSDS:DATADATA,SSSS:STACKSTACKl3 3段寄存器的装入段寄存器的装入l ASSUME伪指令只是指出各段和段寄存器之间的关系,但并未真正将段基地址装入相应的段寄存器中,所以在程序的代码段开始处就应该先进行段基址的装入l 数据段DS、附加段ES和堆栈段SS的段基址由用户程序代码装入l 代码段CS在加载程序后由系统自动装入l(1)DS(1)DS、ESES的装入的装入l MOV AXMOV AX,DATA DATA ;数据段段基地址送;数据段段基地址送AXAX寄存器寄存器l MOV DSMOV DS,AX AX ;AXAX寄存器的内容送数据段寄存器寄存器的内容送数据段寄存器DSDSl或或l MOV AXMOV AX,SEG X SEG X ;变量;变量X X所在数据段的段基址送所在数据段的段基址送AXAX寄存寄存器器l MOV DSMOV DS,AXAXl(2)CS(2)CS的装入的装入l 对对CSCS和和IPIP的装入方法是利用的装入方法是利用ENDEND后的后的标号来标号来完成的。完成的。如:如:l STARTSTART:l l END END STARTSTARTl 系统自动将系统自动将STARTSTART所在段的段地址送所在段的段地址送CSCS寄存寄存器,将器,将STARTSTART所在所在段内的偏移地址段内的偏移地址送送IPIP寄存器寄存器。l(3)SS(3)SS的装入的装入l方法方法1 1:由系统自动装填。由系统自动装填。要求在要求在定义堆栈段时,定义堆栈段时,必须把参数写全。必须把参数写全。这时,将程序装入内存,系统这时,将程序装入内存,系统会自动地把堆栈段地址和堆栈指针置入会自动地把堆栈段地址和堆栈指针置入SSSS和和SPSP中,中,因而可以不在代码段中装入因而可以不在代码段中装入SSSS和和SPSP的值。的值。STACK1 SEGMENT STACK1 SEGMENT PARA STACK PARA STACK STACKSTACKDB 50H DUP(?)DB 50H DUP(?)STACK1 ENDSSTACK1 ENDSl方法方法2 2:手动装填手动装填lSTACK1 SEGMENT PARASTACK1 SEGMENT PARAlDW 50H DUP(?)DW 50H DUP(?)lTOP LABEL WORDTOP LABEL WORD;TOPTOP属性为属性为WORDWORDlSTACK1 ENDSSTACK1 ENDSlCODE SEGMENTCODE SEGMENTlASSUME CSASSUME CS:CODECODE,SSSS:STACK1STACK1lSTARTSTART:l MOV AXMOV AX,STACK1STACK1lMOV SSMOV SS,AXAX ;堆栈段的段地址送;堆栈段的段地址送SSSSlMOV SPMOV SP,OFFSET TOPOFFSET TOP;堆栈段的栈顶地址送;堆栈段的栈顶地址送SPSPllTOPTOP是该堆栈的初始栈顶部地址。是该堆栈的初始栈顶部地址。l4 4操作系统下操作系统下可执行程序的正常结束可执行程序的正常结束l方法方法1(1(非标准方法非标准方法):):l 在在CODE ENDSCODE ENDS之前增加如下语句:之前增加如下语句:l MOV AXMOV AX,4C00H4C00Hl INT 21H INT 21Hl方法方法2(2(标准方法标准方法):):lMAIN PROC FARMAIN PROC FARlPUSH DSPUSH DS ;保存原来的;保存原来的PSPPSP段地址段地址lMOV AXMOV AX,0H0H ;0 0送送AX AX lPUSH AXPUSH AX ;0 0压栈压栈llRETRET ;返回;返回DOSDOSlMAIN ENDPMAIN ENDPl完整段定义的源程序格式完整段定义的源程序格式l DATA SEGMENTDATA SEGMENT;定义数据段;定义数据段DATADATAl STRING STRING DB DB HelloHello,Everybody Everybody!,0DH0DH,0AH0AH,$l DATA ENDSDATA ENDS;数据段结束;数据段结束l CODE SEGMENTCODE SEGMENT ;定义代码段;定义代码段CODE CODE l ASSUME CSASSUME CS:CODECODE,DSDS:DATADATAl ;确定;确定CSCS、DSDS、SSSS指向的逻辑段指向的逻辑段l STARTSTART:MOV AXMOV AX,DATADATA ;设置数据段的段地址;设置数据段的段地址DSDSl MOV DSMOV DS,AXAXl MOV DX MOV DX,OFFSET STRINGOFFSET STRING;利用功能调用显示信息;利用功能调用显示信息l MOV AHMOV AH,9 9l INT 21H INT 21Hl MOV AH MOV AH,4CH 4CH ;利用系统功能调用返回;利用系统功能调用返回DOSDOSl INT 21H INT 21Hl CODE ENDS CODE ENDS ;代码段结束;代码段结束l END START END START ;汇编结束;汇编结束三、简化段定义格式三、简化段定义格式l 简化的段定义简化的段定义书写简单书写简单,有利于有利于实现汇编语实现汇编语言程序模块与高级语言程序模块的言程序模块与高级语言程序模块的连接连接,它可以由,它可以由操作系统自动安排段序,自动保证名字定义的一致操作系统自动安排段序,自动保证名字定义的一致性。性。l1 1存储模式选择伪操作存储模式选择伪操作(MODEL)(MODEL)格式:格式:MODEL MODEL MODEL MODEL 模式类型模式类型模式类型模式类型 功能:功能:l 本语句本语句一般放在段定义之前一般放在段定义之前,用来,用来说明在说明在存储器中是如何安放各个段存储器中是如何安放各个段的。的。l 模式类型说明代码段、数据段在程序中如模式类型说明代码段、数据段在程序中如何安排;代码、数据的寻址是近还是远。何安排;代码、数据的寻址是近还是远。l 根据它们的不同组合,模式类型可以有如根据它们的不同组合,模式类型可以有如下下5 5种种。l Tiny Tiny模式:也叫微模式,模式:也叫微模式,所有数据及代码放所有数据及代码放入同一个物理段内入同一个物理段内,该模式用于编写较小的源程序,该模式用于编写较小的源程序,这种模式的源程序最终可以形成这种模式的源程序最终可以形成COMCOM文件文件。l SmallSmall:也叫小模式,:也叫小模式,所有数据放入一个所有数据放入一个 64KB64KB的段中,所有代码放入另一个的段中,所有代码放入另一个64KB64KB的段中的段中,即,即程序中只有一个数据段和一个代码段这是一般应用程序中只有一个数据段和一个代码段这是一般应用程序最常用的一种模式。程序最常用的一种模式。l Medium Medium:也叫中模式:也叫中模式:所有数据放入一个所有数据放入一个 64KB64KB的段中,代码可以放入多于一个的段中的段中,代码可以放入多于一个的段中,即,即程序中可以有多个代码段程序中可以有多个代码段。l CompactCompact:也叫压缩模式,所有代码放入一也叫压缩模式,所有代码放入一个个64KB64KB的段中;数据可以放入多于一个的段中的段中;数据可以放入多于一个的段中,即程序中即程序中可以有多个数据段可以有多个数据段。l LargeLarge:也叫大模式,代码和数据都可以分:也叫大模式,代码和数据都可以分别放入多于一个的段中,即程序中别放入多于一个的段中,即程序中可以有多个代可以有多个代码段和多个数据段码段和多个数据段。l2 2数据段定义伪指令数据段定义伪指令(.DATA)(.DATA)格式:格式:.DATA .DATA 名字名字 定义一个数据段,如果定义一个数据段,如果有多个数据段,则用名字来区有多个数据段,则用名字来区别:别:只有一个数据段时,只有一个数据段时,隐含段名为隐含段名为DATADATA。l3 3堆栈段定义伪指令堆栈段定义伪指令(.STACK)(.STACK)格式:格式:.STACK .STACK 长度长度 定义一个堆栈段,并形成定义一个堆栈段,并形成SSSS及及SPSP的初值,的初值,SPSP的默认值的默认值为为10241024,隐含段名为,隐含段名为STACKSTACK。可选的长度参数指定堆栈可选的长度参数指定堆栈段所占存储区的字节数,默认大小是段所占存储区的字节数,默认大小是1KB1KB。l4 4代码段定义伪指令代码段定义伪指令(.CODE)(.CODE)格式:格式:.CODE .CODE 名字名字 定义一个代码段,如果有定义一个代码段,如果有多个代码段,则用名字来多个代码段,则用名字来 区区别别:只有一个代码段时,:只有一个代码段时,隐含段名为隐含段名为CODECODE。l5 5程序开始伪指令程序开始伪指令(.STARTUP)(.STARTUP)格式:格式:.STARTUP.STARTUPl 产生程序开始执行的代码产生程序开始执行的代码,同时还,同时还指定了程指定了程序开始执行的起点。序开始执行的起点。l 在在小小模模式式下下,可可以以省省略略将将数数据据段段基基址址装装入入DSDS的语句的语句。l6 6程序返回伪指令程序返回伪指令(.EXIT)(.EXIT)格式:格式:.EXIT .EXIT 参数参数 功能:功能:.EXIT.EXIT产生终止程序执行返回操作系统的产生终止程序执行返回操作系统的指令代码。可选参数是一个返回的数码,指令代码。可选参数是一个返回的数码,通常用通常用0 0代表没有错误代表没有错误l 例如:例如:.EXIT 0.EXIT 0对应的代码是:对应的代码是:l MOV AXMOV AX,4C00H4C00Hl INT 21H INT 21Hl简化段定义的源程序格式简化段定义的源程序格式lMODELMODELSMALLSMALL ;定义程序的存储模式;定义程序的存储模式lSTACKSTACK;定义堆栈段;定义堆栈段lDATADATA ;定义数据段;定义数据段l STRING DB STRING DB HelloHello,Everybody!Everybody!,0DH0DH,0AH0AH,$l ;在数据段定义要显示的字符串;在数据段定义要显示的字符串lCODECODE ;定义代码段;定义代码段lSTARTUPSTARTUP ;说明程序起始位置,并建立;说明程序起始位置,并建立DSDS、SSSS内容内容l MOV DXMOV DX,OFFSET STRINGOFFSET STRING;指定字符串在数据段的偏移地址;指定字符串在数据段的偏移地址l MOV AHMOV AH,9 9l INT 21H INT 21H ;利用;利用DOSDOS功能调用显示信息功能调用显示信息lEXIT 0EXIT 0 ;程序结束点,返回;程序结束点,返回DOSDOSl ENDEND ;汇编结束;汇编结束l简化段定义的源程序格式简化段定义的源程序格式lMODELMODELSMALLSMALL ;定义程序的存储模式;定义程序的存储模式lSTACKSTACK;定义堆栈段;定义堆栈段lDATADATA ;定义数据段;定义数据段l STRING DB STRING DB HelloHello,Everybody!Everybody!,0DH0DH,0AH0AH,$l ;在数据段定义要显示的字符串;在数据段定义要显示的字符串lCODECODE ;定义代码段;定义代码段lStart:Start:l MOV AX,DATA MOV AX,DATAl MOV DS,A MOV DS,A ;说明程序起始位置,并建立;说明程序起始位置,并建立DSDS、SSSS内容内容l MOV DXMOV DX,OFFSET STRINGOFFSET STRING ;指定字符串在数据段的偏移地址;指定字符串在数据段的偏移地址l MOV AHMOV AH,9 9l INT 21H INT 21H ;利用;利用DOSDOS功能调用显示信息功能调用显示信息l MOV AH,4cHMOV AH,4cHl INT 21H INT 21H ;程序结束点,返回;程序结束点,返回DOSDOSl END startEND start ;汇编结束;汇编结束综合练习综合练习l在数据段定义一字节变量,存储一个在数据段定义一字节变量,存储一个0-90-9之间之间的十进制数的十进制数l(1 1)编写汇编语言源程序,将该十进制数显)编写汇编语言源程序,将该十进制数显示到屏幕上示到屏幕上l(2 2)用)用debugdebug将汇编生成的可执行文件调入内将汇编生成的可执行文件调入内存,查看数据段的内容存,查看数据段的内容l(3 3)在内存中修改数据段中定义的十进制数,)在内存中修改数据段中定义的十进制数,用用t t或或g g命令显示运行结果命令显示运行结果l思考:思考:l(1)(1)如何在屏幕上显示一个两位的十六进制数如何在屏幕上显示一个两位的十六进制数l(2)(2)如何在屏幕上显示一个两位的十进制数如何在屏幕上显示一个两位的十进制数l DATA SEGMENT DATA SEGMENTl A DB 6 A DB 6l DATA ENDS DATA ENDSl CODE SEGMENT CODE SEGMENT l ASSUME CS ASSUME CS:CODECODE,DSDS:DATADATAl START START:MOV AXMOV AX,DATADATAl MOV DS MOV DS,AXAXl MOV DL,6 MOV DL,6l ADD DL,30H ADD DL,30Hl MOV AH,2 MOV AH,2l INT 21H INT 21Hl MOV AH MOV AH,4CH4CHl INT 21H INT 21Hl CODE ENDS CODE ENDSl END START END START
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服