版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言程序格式第四章 汇编语言程序格式4.1 汇编语言程序功能1、汇编语言程序的建立及汇编过程、汇编语言程序的建立及汇编过程 用编辑程序建立ASM源程序 用ASM程序把ASM文件转换为OBJ文件 用LINK程序把OBJ文件转换为EXE文件 用DOS命令直接键入文件名就可以执行该程序汇编语言程序格式2、汇编程序的主要功能、汇编程序的主要功能 检查源程序 策出源程序中的语法错误,并给出出错信息 产生源程序的目标程序,并可给出列表文件(同时列出汇编语言和机器语言的文件,称为LST文件) 展开宏命令汇编语言程序格式4.2 4.2 伪伪 操操 作作 汇编语句由指令、伪指令、宏指令构成 指令:每条指令语
2、句都生成机器代码,各对应一种CPU操作,在程序运行时执行。 伪指令:在汇编程序对源程序汇编期间由汇编程序处理的操作,可以完成如数据定义、分配存储区、指示程序结束等功能,不生成目标代码。 宏指令:用户按照宏定义格式编写的一段程序,可以包含指令、伪指令、甚至其他宏指令。伪指令与机器无关,取决于汇编程序的版本,版伪指令与机器无关,取决于汇编程序的版本,版本越高,提供的伪指令数目增加,功能增强;如本越高,提供的伪指令数目增加,功能增强;如MASM6.0提供了提供了.IF/.ENDIF等语句,使汇编语言等语句,使汇编语言程序设计类似高级语言的形式。程序设计类似高级语言的形式。汇编语言程序格式4.2.2
3、段定义伪操作段定义伪操作存储器的物理地址是由段地址和偏移地址组合而成的,汇编程序在把源程序转换为目标程序时,必须确定标号和变量的偏移地址,并且需要把有关信息通过目标模块传送给连接程序,以便连接程序把不同的段和模块连接在一起形成一个可执行程序。为此,需要用段定义伪操作。汇编语言程序格式 段定义伪操作格式格式为:段名 SEGMENT 定位 组合 段字 类别 段名 ENDS 说明说明:段名由用户自己起,要符合汇编语句对名字的要求。SEGMENT定义一个段的开始,ENDS定义该段的结束。删节部分,对于数据段、附加段和堆栈段来说,一般是存储单元的定义、分配等伪操作;对于代码段则是指令及伪操作定位属性:指
4、定逻辑段的起始地址定位属性:指定逻辑段的起始地址BYTE:为下一个可用的字节地址:为下一个可用的字节地址(xxxx xxxxB)WORD:为下一个可用的偶数地址:为下一个可用的偶数地址(xxxx xxx0B)DWORD:下一个可被:下一个可被4整除的地址整除的地址(xxxx xx00B)PARA:下一个可被:下一个可被16整除的地址整除的地址(xxxx 0000B)PAGE:下一个可被:下一个可被256整除的地址整除的地址(0000 0000B)默认的定位属性为默认的定位属性为PARA。简化段定义中,代码段和。简化段定义中,代码段和数据段默认的定位属性为数据段默认的定位属性为WORD,堆栈段为
5、,堆栈段为PARA。组合属性:指定段与段之间的关系。组合属性:指定段与段之间的关系。 通常在多模块设计时使用,单模块下,除堆栈段必须通常在多模块设计时使用,单模块下,除堆栈段必须使用组合属性使用组合属性 STACK 外,其它段使用默认值即可。完整外,其它段使用默认值即可。完整段定义时,默认的组合属性为段定义时,默认的组合属性为PRIVATE,意思是各段相互,意思是各段相互独立,不与其它段合并,各段都有自己的段地址;简化段独立,不与其它段合并,各段都有自己的段地址;简化段定义时,默认的组合属性为定义时,默认的组合属性为PUBLIC,意思是告诉连接程,意思是告诉连接程序把本段与所有同名的其它段相邻
6、地连接在一起,并合并序把本段与所有同名的其它段相邻地连接在一起,并合并为同一个段,共用一个段地址。为同一个段,共用一个段地址。段字属性段字属性(use16use32): MASM5.0以后版本增加。对以后版本增加。对8086使用默认值(使用默认值(16位段),对位段),对32位位CPU默认采用默认采用32位段,当然,也可以设置成位段,当然,也可以设置成16位段。位段。类别属性:类别属性:类别名类别名。类别名相同的段相邻连接但各。类别名相同的段相邻连接但各有各的段地址。通常使用有各的段地址。通常使用code,date和和stack等类等类别名,以保持所有代码和数据的连续。别名,以保持所有代码和数
7、据的连续。1. 完整的段定义伪操作完整的段定义伪操作汇编语言程序格式2. 存储模式与简化段定义伪操作存储模式与简化段定义伪操作 存储模式伪指令存储模式伪指令.model 存储模式,语言类型,系统类型,堆栈选项使用简化段定义格式时,必须使用。必须位于所有段定义语句之前。7种不同的存储模式:tiny,small.medium,compact,large,huge,flat汇编语言程序格式简化段定义标准格式:简化段定义标准格式:.model small.stack.data.code.startup.exit 0end存储模式伪指令存储模式伪指令;子程序代码;子程序代码;程序代码;程序代码;数据定义
8、;数据定义程序开始伪指令程序开始伪指令程序结束伪指令程序结束伪指令汇编结束伪指令汇编结束伪指令.stack 大小大小:创建堆栈段,段名:创建堆栈段,段名:STACK.STACK 512;创建;创建512字节的堆栈段。字节的堆栈段。 .STACK ;创建;创建1024字节(默认)的堆栈段。字节(默认)的堆栈段。.DATA ;创建数据段,段名:;创建数据段,段名:_DATA.DATA ? ;数据段,无初值变量专用(;数据段,无初值变量专用(_BSS).CONST ;只读的常量数据段(;只读的常量数据段(CONST).CODE 段名段名;创建代码段,在;创建代码段,在SMALL模模式下,默认的段名为
9、:式下,默认的段名为:_TEXT没有段定义结束语句,下一个段的开始,就没有段定义结束语句,下一个段的开始,就是本段的结束。是本段的结束。汇编语言程序格式3、段组定义伪指令、段组定义伪指令组名 GROUP 段名,段名将多个同类但不同名的段合并为一个不超过64KB的物理段,并使用组名统一访问它。可理解为组合属性PUBLIC的补充。汇编语言程序格式4.2.3 程序开始和结束伪操作程序开始和结束伪操作 程序的开始可用NAME或TITLE为模块取名字。格式为:NAMEmodule-nameTITLEtext 程序的结束可以用END来表示。格式为:ENDlabel汇编语言程序格式4.2.4 数据定义及存储
10、器分配伪操作数据定义及存储器分配伪操作 格式格式:变量名 助记符 操作数 ;注释 功能功能:为变量分配单元,并为其初始化或者只预留空间。 说明说明:变量名是可有可无的,需要时由用户自己起。变量名用符号地址表示,作用与语句前的标号相同,但它的后边不需要冒号,它也是其中第一个数据项的偏移量。程序通过变量名引用其中的数据。汇编语言程序的语句格式汇编语言程序的语句格式 两类语句:两类语句:1)执行性语句)执行性语句 2)说明性语句)说明性语句1)执行性语句(硬指令、代码段)执行性语句(硬指令、代码段)标号:标号:硬指令助记符硬指令助记符 操作数操作数,操作数,操作数 ;注释;注释2)说明性语句(伪指令
11、、可位于任何段)说明性语句(伪指令、可位于任何段) 名字名字 伪指令助记符伪指令助记符 参数,参数参数,参数;注释;注释汇编语言程序格式助记符是数据类型的符号表示。助记符数据类型 一个数据项字节数DB(BYTE)字节型1DW(WORD)字型2DD(DWORD)双字型4DQ(QWORD)四字型8DF(FWORD)六字节型(386以上机型有效) 6DT(TBYTE)10字节型10汇编语言程序格式v操作数可以是数字常量、数值表达式、字符串常量、地址表达式、?、 DUP(操作数,)形式。数字常量及数值表达式:数字常量及数值表达式:操作数可以是常数、表达式。数字中若出现字母形式,不区分大小写。如下所示:
12、二进制数:以B结尾,有效数字是0、1。 八进制数:以Q或O(字母)结尾,有效数字是07。十进制数:以D结尾,汇编语言中缺省值是十进制数,所以D可以省略不写。有效数字是09。十六进制数:以H结尾,有效数字是09和A(a)F(f)。若第一位数字是字母形式,则必须在前边加上0(数字)。汇编语言程序格式字符串常量字符串常量在汇编语言中字符需要用单引号括起来,其值为字符的ASCII值。因为每个字符占用一个字节,所以最好用DB助记符定义字符串。地址表达式地址表达式操作数可以是地址符号。若只定义符号的偏移量部分,则使用DW助记符。若要定义它的双字长地址指针(既含16位偏移量又含段基址),则使用DD助记符,其
13、中低字中存放偏移量,高字中存放段基址。若要定义它的全地址指针(既含32位偏移量又含段基址),则使用DF助记符,其中低32位存放偏移量,高16位存放段基址。例如,“VAR DW LAB”语句在汇编后VAR中含有LAB的偏移量。汇编语言程序格式 ?在程序中使用操作数?为变量预留空间而不赋初值。n DUPn DUP(操作数,(操作数,)DUP是复制操作符,若要对某些数据重复多次,可以使用这种格式。其功能是把( )中的内容复制n次。DUP操作可以嵌套使用。汇编语言程序格式 例例1. 1. M1M1 DB DB 15,67H,11110000B,15,67H,11110000B,?M2M2 DB DB
14、15,AB$15,AB$M3M3 DW DW 4 4* *5 5M4M4 DD DD 1234H1234HM5M5 DB DB 2 DUP(5,A)2 DUP(5,A)M6M6 DW DW M2M2;M2;M2的偏移量的偏移量M7M7 DD DD M2M2;M2;M2的偏移量、段基址的偏移量、段基址 M8 DB M8 DB ABAB M9 DW M9 DW ABAB设以上数据自设以上数据自1470:00001470:0000开始存放,则为:开始存放,则为: 0F0F 67 F0 0067 F0 00 31 35 41 42 2431 35 41 42 24 14 0014 00 34 12 3
15、4 12 00 0000 00 05 41 05 4105 41 05 41 04 0004 00 04 00 70 1404 00 70 14汇编语言程序格式例2可直接通过变量名引用变量,但要注意类型匹配。例如以下程序片段:MOV AL,M1;(AL) 15MOV BX,M3;(BX) 20ADD M3,6;(M3) 26MOV AL,M2;(AL)131HMOV BL,M2+2;(BL)A41HMOV M1+3,BL;(M13) 41H汇编语言程序格式 PTR属性操作符属性操作符格式:格式:类型名 PTR 变量|标号给变量或标号指定类型属性BYTE、WORD、WORD、 ; NEAR、 F
16、AR;STRUCT、RECORD等类型的定义。例:OPER1 DB 1,2OPER2 DW 1234HMOV AX,WORD PTR OPER1MOV AL,BYTE PTR OPER2汇编语言程序格式 LABELLABEL伪指令伪指令格式格式:名字 LABEL 类型功能:功能:为下一个存储单元起一个名字并定义它的类型说明说明:对于变量,类型可以是BYTE、WORD、DWORD等。对于标号,其类型可以是NEAR、FAR。LABEL伪指令并不为名字分配空间,但它可以为下一个存储单元另起名字而且另定义它的类型,从而可以使同一地址具有不同类型的名字,便于引用。汇编语言程序格式例. REDEW LAB
17、EL WORDDEBYTEDB 25H,32H,56H,42HMOV BL,DEBYTE;(BL)=25HMOV CX,REDEW ;(CX)=3225H以上程序片段执行情况见下图汇编语言程序格式25H25H32H32H56H56H42H42HREDEWREDEWLABELLABEL语句功能示意图语句功能示意图25H25HDEBYTEDEBYTE3225H3225HBLBLCXCX汇编语言程序格式4.2.5 表达式赋值操作EQU 格式格式:符号名 EQU 表达式 功能:功能:用符号名代表表达式或表达式的值。 说明说明:表达式可以是任何有效的操作数格式。例如常数、数值表达式、另一符号名或助记符。
18、 注意注意:用EQU定义的符号在同一个程序中不能再定义。 用途用途:增加程序可读性、缩短程序书写长度、避免因为某些修改而带来的程序不一致性。EQU伪指令经常与配合使用,得到变量分配的字节数。汇编语言程序格式例. MSG DB This is first string. Count equ $msgCR EQU 0DH ;回车符的ASCII值PORT_B EQU 61H;定义PORT_ B端口 B EQU BP6 ; BP6用B表示程序中可以通过符号引用这些值,例如:MOVAL,CR ;等价于 MOV AL, 0DHADDBL,B ;等价于ADD BL,BP6)OUTPORT_B,AL ;输出到
19、61H端口Movcl,count;(CL)MSG的串长21汇编语言程序格式4.2.6 4.2.6 地址计数器与对准伪操作地址计数器与对准伪操作 地址计数器$ 在汇编语言对源程序汇编的过程中,可使用地址计数器来保存当前正在汇编的指令的地址。地址计数器的值可用$来表示。如ORG $+8 JNE $+6 EVEN 功能:使下一个字节地址成为偶数 ORG 表达式使下一个字节的地址成为常数表达式的值 ALIGN n 使它后面的数据或指令从n的整数倍地址开始(可被n整除)。使它后面的数据或指令从偶地址开始使它后面的数据或指令从偶地址开始使地址计数器指向参数表达的偏移地址使使地址计数器指向参数表达的偏移地址
20、使它后面的数据或指令从偶地址开始它后面的数据或指令从偶地址开始n是是2的乘方(的乘方(2,4,8)且小于所在段的定位属性值。)且小于所在段的定位属性值。如如“ALIGN 4”,使下一个地址开始于双字边界。,使下一个地址开始于双字边界。汇编语言程序格式4.2.7 4.2.7 基数控制伪操作基数控制伪操作 汇编程序默认的是十进制数。 二进制数后面有B;十进制数后面有D;十六进制数后面有H;八进制数后面O或Q 字符串可以看成串常数,可以用单引号或双引号把字符串放在其中 RADIX 伪操作:可以把默认的基数改为216范围内的任何基数。 格式为:RADIXexpression汇编语言程序格式4.3.1
21、4.3.1 名字项名字项 源程序中可以用下列字符来表示名字:字母AZ;数字09;专用字符?、-、$ 名字项可以是标号或变量。 标号:标号在代码段中定义,后面跟冒号 标号有三种属性:段、偏移、类型。 变量:在除代码段以外的其他段中定义,不跟冒号,常在数据段中出现4.3 汇编语言程序格式都用来表示本语句的符号地址,可有可无可用LABEL或EQU来定义可用LABEL或EQU来定义;有段、偏移、类型三种属性。汇编语言程序格式4.3.3 4.3.3 操作数项操作数项 操作数项由一个或多个表达式组成,多个操作数项之间用逗号隔开。对于指令,操作数项一般给出操作数地址;对于伪操作或宏指令,则给出他们所要求的参
22、数。 操作数项可以是常数、寄存器、标号、变量或由表达式组成。表达式可以是常数、寄存器、标号、变量与一些操作符相组合的序列。可以有数字表达式和地址表达式两种汇编语言程序格式 算术操作符算术操作符包括、*、和MOD(取模)操作符。算术操作符可以用在数值表达式或地址表达式中,但当用于地址表达式时,要注意只有当其结果有明确的物理意义时才是有效的。经常使用在地址表达式中的算术操作符是和,例如FIRST1是指紧跟FIRST单元之后的单元地址(注意不是FIRST单元的内容加1)。汇编语言程序格式 逻辑操作符逻辑操作符包括AND(逻辑与)、OR(逻辑或)、XOR(逻辑异或)和NOT
23、(逻辑非)。逻辑操作符是按位操作的,它只能用在数值表达式中。虽然这些操作符与逻辑指令助记符的表示方法及操作相同,但它们的执行时间不同,前者在汇编时执行,后者在程序执行时执行。例.PORT EQU 0FH AND DL ,PORT AND 0FEH汇编语言程序格式 关系操作符关系操作符关系操作符包括EQ(等于)、NE(不等于)、LT(小于)、LE(小于等于)、GT(大于)、GE(大于等于)。其操作结果为一个逻辑值,若关系成立结果为真(全1),否则结果为假(0)。其中的操作数必须是数字或同段内的两个存储器地址。例.指令MOV AL,CH LT 20的汇编结果: MOV
24、 AL,0FFH;当CH20时或:MOV AL,0;当CH20时汇编语言程序格式 数值回送操作符数值回送操作符这组操作符可以把一些特征或内存单元地址的组成部分作为数值返回。它们是TYPE、LENGTH、SIZE、SEG、OFFSET和汇编语言程序格式格格 式式功功 能能TYPE TYPE 变量变量TYPE TYPE 标号标号返回变量或者标号的类型代码返回变量或者标号的类型代码11LENGTH LENGTH 变量变量返回由返回由 dup ( dup (操作数操作数,),)格式定义的格式定义的n n值,值,其它情况回送其它情况回送1 1SIZE SIZE 变量变量返回
25、分配给变量的字节数,只对由返回分配给变量的字节数,只对由 dup ( dup (操操作数作数,),)格式定义的变量有实际意义格式定义的变量有实际意义22SEG SEG 变量变量SEG SEG 标号标号返回变量或者标号的段基址返回变量或者标号的段基址OFFSET OFFSET 变量变量OFFSET OFFSET 标号标号返回变量或者标号的偏移量返回变量或者标号的偏移量返回地址计数器的当前值返回地址计数器的当前值 注注11:若使用:若使用TYPE TYPE 变量,则返回一个数据项占用的字节数。例若变量用变量,则返回一个数据项占用的字节数。例若变量用DBDB定义,则返回定义,则返回1 1;用;用DW
26、DW定义定义返回返回22;若用结构定义则返回该结构占用的字节数。若使用;若用结构定义则返回该结构占用的字节数。若使用TYPE TYPE 标号,则标号,则NEARNEAR型标号返回型标号返回1 1,FARFAR型型标号返回标号返回2 2。 注注22:SIZESIZETYPETYPE* *LENGTHLENGTH,只有在变量用,只有在变量用 dup ( dup (操作数操作数,),)时表示该变量占用的字节数。因为时表示该变量占用的字节数。因为LENGTHLENGTH在其它情况下总是回送在其它情况下总是回送1 1,此时,此时SIZESIZE也就失去实际意义。也就失去实际意义。变量:变量: DB DW
27、 DD DQ DT返回值返回值 1 2 4 8 10标号:标号: NEAR FAR 返回值返回值 -1 -2汇编语言程序格式 属性操作符属性操作符1、 PTR操作符 格式:类型 PTR 地址表达式 功能:指定地址表达式的类型。 说明:若是变量的地址表达式,则类型可以是BYTE、WORD、DWORD等。若是标号的地址表达式,则类型可以是FAR、NEAR。PTR经常用在临时改变地址类型或必须明确指出类型的场合。汇编语言程序格式2、段操作符 用来表示一个标量、变量或地址表达式的段属性 可以用段寄存器:地址表达式来表示,也可以用段名:地址表达式或组名:地址表达式来表示汇编
28、语言程序格式3、SHORT操作符用来修饰JMP指令中转向地址的属性,指出转向地址是在下一条指令地址的-128+127字节范围之内。例如:JMP SHORT LAB汇编语言程序格式4、THIS操作符 格式:THIS 类型 功能:为存储器操作数指定类型。该操作数地址与下一个存储单元具有相同的段基址和偏移量。 说明:它并不为该存储器操作数分配空间。与LABEL伪指令的功能有相似之处,但其区别是所出现的位置不同,THIS出现在操作数位置,与EQU伪指令配合定义一个具有类型、段基址和偏移量三属性的表示存储器操作数的符号。而LABEL是一条独立使用的伪指令。汇编语言程序格式5、 HIGH、LOW操作符这两
29、个操作符被称为字节分离操作符,它接收一个数字或地址表达式,HIGH取其高字节,LOW取其低字节。例.COUNTEQU 1234HMOVAL ,LOW COUNT汇编结果为:MOV AL,34H汇编语言程序格式4.3.4 注释项 注释项用来说明一段程序或一条或几条指令的功能,可有可无。汇编语言程序格式 段定义伪操作格式格式为:段名 SEGMENT 定位 组合 段字 类别 段名 ENDS 说明说明:段名由用户自己起,要符合汇编语句对名字的要求。SEGMENT定义一个段的开始,ENDS定义该段的结束。删节部分,对于数据段、附加段和堆栈段来说,一般是存储单元的定义、分配等伪操作;对于代码段则是指令及伪
30、操作定位属性:指定逻辑段的起始地址定位属性:指定逻辑段的起始地址BYTE:为下一个可用的字节地址:为下一个可用的字节地址(xxxx xxxxB)WORD:为下一个可用的偶数地址:为下一个可用的偶数地址(xxxx xxx0B)DWORD:下一个可被:下一个可被4整除的地址整除的地址(xxxx xx00B)PARA:下一个可被:下一个可被16整除的地址整除的地址(xxxx 0000B)PAGE:下一个可被:下一个可被256整除的地址整除的地址(0000 0000B)默认的定位属性为默认的定位属性为PARA。简化段定义中,代码段和。简化段定义中,代码段和数据段默认的定位属性为数据段默认的定位属性为W
31、ORD,堆栈段为,堆栈段为PARA。组合属性:指定段与段之间的关系。组合属性:指定段与段之间的关系。 通常在多模块设计时使用,单模块下,除堆栈段必须通常在多模块设计时使用,单模块下,除堆栈段必须使用组合属性使用组合属性 STACK 外,其它段使用默认值即可。完整外,其它段使用默认值即可。完整段定义时,默认的组合属性为段定义时,默认的组合属性为PRIVATE,意思是各段相互,意思是各段相互独立,不与其它段合并,各段都有自己的段地址;简化段独立,不与其它段合并,各段都有自己的段地址;简化段定义时,默认的组合属性为定义时,默认的组合属性为PUBLIC,意思是告诉连接程,意思是告诉连接程序把本段与所有
32、同名的其它段相邻地连接在一起,并合并序把本段与所有同名的其它段相邻地连接在一起,并合并为同一个段,共用一个段地址。为同一个段,共用一个段地址。段字属性段字属性(use16use32): MASM5.0以后版本增加。对以后版本增加。对8086使用默认值(使用默认值(16位段),对位段),对32位位CPU默认采用默认采用32位段,当然,也可以设置成位段,当然,也可以设置成16位段。位段。类别属性:类别属性:类别名类别名。类别名相同的段相邻连接但各。类别名相同的段相邻连接但各有各的段地址。通常使用有各的段地址。通常使用code,date和和stack等类等类别名,以保持所有代码和数据的连续。别名,以
33、保持所有代码和数据的连续。1. 完整的段定义伪操作完整的段定义伪操作4.4 汇编语言程序的上机过程汇编语言程序格式 ASSUME伪指令格式:格式: ASSUME 段寄存器:段名,段寄存器:段名功能:功能:说明段寄存器和段之间的关系。说明:说明:若一个段寄存器与NOTHING关联,则表示取消前边对该段寄存器的假设,可以省略。ASSUME语句并不给段寄存器赋值,它应放在引用段寄存器之前,通常放在代码段或主过程的第一个语句位置。ASSUME伪操作只是指定某个段分配给哪个段寄存器(CS、DS、SS、ES),并不能把段地址装入段寄存器中,因此在代码段中,还必须把段地址装入相应的段寄存器中。建立段寄存器与
34、段之间的缺省关系,改变这建立段寄存器与段之间的缺省关系,改变这种缺省关系可使用段跨越前缀。种缺省关系可使用段跨越前缀。 如如 ASSUME CS:CODE,DS:DATAASSUME 段寄存器:段寄存器:NOTHING 对指令给出的段寄存器取消已经指对指令给出的段寄存器取消已经指定的缺省关系。定的缺省关系。汇编语言程序格式返回返回DOS的两种方法的两种方法方法一:code segmentmain pro far assumestart: push dsmov ax,0push axretmain endpcode endsend start方法二:code segmentmain pro fa
35、r assumestart: mov ah,4chInt 21hmain endpcode endsend start汇编语言程序格式在Masm for Windows中集成CV(全称CodeView)与DEGUB两种调试工具,默认为用CV调试程序。(1)用CV调试先单击“运行”按钮生成EXE文件,再单击“调试”按钮,出现图1界面。说明:图1是调试求3+5的汇编程序,当连续按F10或连续在命令窗口输入P命令执行到ADD AL,03时,可以看到AL的值为8。 汇编语言程序格式CVCV的功能键的功能键 F2:显示/隐含的寄存器组窗口F3:以不同的显示方式显示当前执行的程序F4:显示程序的输出屏幕F
36、5/F7: 执行到下一个逻辑断点,或到程序尾F6:依次进入当前屏幕所显示的窗口F8:单步执行指令,并进入被调用的子程序F9:在源程序行中设置/取消断点,用鼠标左键双击之也可F10:单步执行指令,但不进入被调用的子程序汇编语言程序格式调试程序调试程序DEBUGDEBUG的使用的使用DEBUG.EXEDEBUG.EXE是是DOSDOS提供的用于调试可执行程序提供的用于调试可执行程序的工具软件,是汇编语言程序设计中常用的调试的工具软件,是汇编语言程序设计中常用的调试工具。在工具。在DEBUGDEBUG环境下,不但可以调试经汇编、环境下,不但可以调试经汇编、连接后生成的可执行程序,也可以编写简单的程连
37、接后生成的可执行程序,也可以编写简单的程序。序。汇编语言程序格式1.启动启动DEBUG程序程序 在在DOS提示符下键入:提示符下键入:DEBUG (表示回车表示回车)Debug执行,屏幕显示提示符执行,屏幕显示提示符“”,说明计算机当前处于,说明计算机当前处于DEBUG的管理之下,可接受、并执行的管理之下,可接受、并执行DEBUG命令。命令。 在在DOS提示符下键入:提示符下键入:DEBUG 路径路径文件名文件名 DEBUG执行,并将指定文件装入内存,供调试。执行,并将指定文件装入内存,供调试。如不指定被调试程序,如不指定被调试程序,DEBUG设置所有段寄存器的值相同,设置所有段寄存器的值相同
38、,并指向最低的、可用的段地址;并指向最低的、可用的段地址;SP指向本段的尾部;指向本段的尾部;IP指指向本段的向本段的0100H单元;其它通用寄存器和所有状态标志清单元;其它通用寄存器和所有状态标志清0。汇编语言程序格式v 如带入的被调试程序扩展名不是如带入的被调试程序扩展名不是.EXE.EXE,则,则BXBX、CXCX包含被调试文件长度(字节数,包含被调试文件长度(字节数,BXBX为高位),其他为高位),其他同上。同上。( (带入带入.COM.COM程序同此程序同此) )v 如带入的被调试程序扩展名是如带入的被调试程序扩展名是.EXE.EXE,则需要重新,则需要重新定位。定位。DS=ESDS
39、=ES指向当前最低的、可用的段地址(指向当前最低的、可用的段地址(PSPPSP的首字节);的首字节);CS:IPCS:IP和和SS:SPSS:SP根据被调试程序确定,根据被调试程序确定,分别指向代码段和堆栈段;分别指向代码段和堆栈段;BX.CXBX.CX为文件长度,其它为文件长度,其它通用寄存器和状态标志清通用寄存器和状态标志清0 0。汇编语言程序格式2 DEBUG命令和参数的格式命令和参数的格式1.命令格式命令格式 命令字母命令字母参数参数v 字母不分大小写;字母不分大小写;v只使用只使用1616进制数,不加进制数,不加H H;v分割符只在两个数值之间是必须的,命令和分割符只在两个数值之间是
40、必须的,命令和参数之间可有可无;参数之间可有可无;v键入回车键执行命令,键入回车键执行命令,Ctrl+BreakCtrl+Break或或Ctrl+CCtrl+C中止命令的执行;中止命令的执行;v如命令不符合如命令不符合DEBUGDEBUG的规则,则提示的规则,则提示“error”error”并使用并使用“”指示错误位置。指示错误位置。汇编语言程序格式2.参数格式参数格式表示地址表示地址(逻辑地址逻辑地址):段地址段地址:偏移地址偏移地址 D0400:2500 0400:2500 D10ac:010ac:0 Dds:04 ds:04 Dcs:100cs:100偏移地址偏移地址 D2505 250
41、5 D100 100 ;DEBUGDEBUG认为输入的是认为输入的是偏移地址,段地址采用默认的段寄存器,不同偏移地址,段地址采用默认的段寄存器,不同的命令默认不同的段寄存器,例如汇编命令默的命令默认不同的段寄存器,例如汇编命令默认认CSCS,显示数据命令默认,显示数据命令默认DSDS。既不送段地址,也不送偏移地址,段地址采用既不送段地址,也不送偏移地址,段地址采用默认的段寄存器,偏移地址采用当前值。默认的段寄存器,偏移地址采用当前值。只送段地址,省略偏移地址,非法。只送段地址,省略偏移地址,非法。如如DDSDS: 或或 D04000400:汇编语言程序格式表示范围表示范围 开始地址开始地址 结
42、束地址结束地址如如“D DS:0 50”,“D2AC0:100 D DS:0 50”,“D2AC0:100 200”,“D100 120”200”,“D100 120”注意:结束地址不能带段地址注意:结束地址不能带段地址 开始地址开始地址 L L 字节长度字节长度如如 “ “D DS:0 L 10”, “D100L20”D DS:0 L 10”, “D100L20”汇编语言程序格式 命命 令令 索索 引引D D命令命令E E命令命令F F命令命令R R命令命令A A命令命令U U命令命令G G命令命令T T命令命令P P命令命令Q Q命令命令N N命令命令L L命令命令W W命令命令C C命令
43、命令H H命令命令S S命令命令I I命令命令O O命令命令M M命令命令汇编语言程序格式3.DEBUG3.DEBUG命令命令1.1.显示命令显示命令D D D D 地址地址 D D 范围范围 ;如不指定范围,一次显示;如不指定范围,一次显示8 8行行1616个字节。个字节。 D ;默认段寄存器为;默认段寄存器为DS,当前偏移地址,当前偏移地址 D DS:100 /D CS:200 D 200:100 D 200;200为偏移地址,默认段寄存器为偏移地址,默认段寄存器DS D DS:100 110/ D 100 L 10汇编语言程序格式2.修改命令修改命令E E 地址地址 ;从指定地址开始,修
44、改(或连续修改)存储;从指定地址开始,修改(或连续修改)存储单元内容。单元内容。DEBUG首先显示指定单元内容,如要修改,首先显示指定单元内容,如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。空格键或减号键;回车键结束命令。 E 地址地址 数据表;从指定的地址开始用数据表给定的数数据表;从指定的地址开始用数据表给定的数据修改存储单元。据修改存储单元。 E DS:100 F3 AB 8D。汇编语言程序格式
45、3.添充命令添充命令FF 范围范围 数据表;数据表; 将数据表写入指定范围的存储单元;数据个数将数据表写入指定范围的存储单元;数据个数 多,忽略多出的数据,个数少,则重复使用数据表。多,忽略多出的数据,个数少,则重复使用数据表。 F DS:0 L5 01,02,03,04,05 F DS:0 L5 01 02 03 04 05(空格分隔)(空格分隔) F DS:0 L5 FF ;5个字节重复使用个字节重复使用FF 注意和注意和E命令的区别:命令的区别: E 地址地址 数据表数据表起始地址,不是范围起始地址,不是范围汇编语言程序格式4.4.显示修改寄存器命令显示修改寄存器命令R R R;显示所有
46、寄存器和标志位状态;显示当前;显示所有寄存器和标志位状态;显示当前CS:IP指向的指令。指向的指令。显示标志时使用的符号:显示标志时使用的符号:标志标志 标志标志=1 标志标志=0 OFOVNV DFDNUP IFEIDI SFNGPL ZFZRNZ AFACNA PFPEPO CFCYNC R 寄存器名;显示并修改指定的寄存器。寄存器名;显示并修改指定的寄存器。RAX ;RIP;RF等等汇编语言程序格式5.5.汇编命令汇编命令A AA 地址地址;从指定的地址开始输入符号指令;如;从指定的地址开始输入符号指令;如省略地址,则接着上一个省略地址,则接着上一个A命令的最后一个单元命令的最后一个单元
47、开始;若第一次使用开始;若第一次使用A命令省略地址,则从当前命令省略地址,则从当前CS:IP开始(通常是开始(通常是CS:100)。)。注释注释:在在DEBUG下编写简单程序即使用下编写简单程序即使用A命令。命令。每条指令后要按回车。每条指令后要按回车。不输入指令按回车,或按不输入指令按回车,或按Ctrl+C结束汇编。结束汇编。支持所有支持所有8086符号硬指令,伪指令只支持符号硬指令,伪指令只支持DB、DW,不支持各类符号名。,不支持各类符号名。汇编语言程序格式6.6.反汇编命令反汇编命令U U U 地址地址;从指定地址开始反汇编;从指定地址开始反汇编32个字节的个字节的机器指令;省略地址时
48、机器指令;省略地址时,则接着上一个则接着上一个U命令的最命令的最后一个单元开始;若第一次使用后一个单元开始;若第一次使用U命令省略地址,命令省略地址,则从当前则从当前CS:IP开始(通常是开始(通常是CS:100)。)。 U 范围;对指定范围的单元进行反汇编。范围;对指定范围的单元进行反汇编。 U U100 U100L10汇编语言程序格式7.7.运行程序命令运行程序命令G G G;从;从CS:IP指向的指令开始执行程序,直到指向的指令开始执行程序,直到程序结束或遇到程序结束或遇到INT 3。 G=地址;从指定地址开始执行程序,直到程地址;从指定地址开始执行程序,直到程序结束或遇到序结束或遇到INT 3。 G 断点断点1,断点,断点2,断点断点10;从;从CS:IP指向指向的指令开始执行程序,直到遇到断点。的指令开始执行程序,直到遇到断点。G=地址地址 断点断点1,断点,断点2,断点断点10 G ;从;从CS:IP指向的指令开始执行程序。指向的指令开始执行程序。 G=100 ;从指定地址开始执行程序。;从指定地址开始执行程序。 G=100 105 110 120注注 释:释:1)最多可设置)最多可设置10个断点。个断点。2)断点必须
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度智能设备制造股权合资合同4篇
- 2025年中国航空食品行业市场全景评估及发展战略规划报告
- 二零二五年度不锈钢户外广告牌设计与安装合同5篇
- 2025年度绿色金融存单质押担保合作协议书3篇
- 2025年货车司机聘用合同(含运输安全保障措施)3篇
- 2025年度幕墙工程设计与施工环保合同4篇
- 2025-2031年中国金融级分布式数据库行业发展全景监测及投资方向研究报告
- 二零二五年度多功能大棚租赁与活动策划合同4篇
- 2025年尼龙束线带项目可行性研究报告
- 2025年遥控工作灯项目投资可行性研究分析报告
- 劳务协议范本模板
- 人教版(2024)数学七年级上册期末测试卷(含答案)
- 2024年国家保密培训
- 2024年公务员职务任命书3篇
- CFM56-3发动机构造课件
- 会议读书交流分享汇报课件-《杀死一只知更鸟》
- 2025届抚州市高一上数学期末综合测试试题含解析
- 公司印章管理登记使用台账表
- 砖厂承包合同签订转让合同
- 思政课国内外研究现状分析
- 2023年公务员多省联考《申论》题(广西B卷)
评论
0/150
提交评论