版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机硬件技术基础实验指导书东北大学计算中心二零一零年四月 目录第1章 汇编语言程序设计基础11.1汇编语言程序的语句11.1.1 语句格式11.1.2 数据定义11.2 汇编语言程序的结构21.3 汇编语言常用伪指令3第2章 汇编语言程序调试过程62.1 汇编语言程序的命令行开发调试过程62.1.1 编辑源程序62.1.2 汇编程序82.1.3 连接程序102.1.4 调试程序112.2 汇编语言编程集成开发环境PWB182.2.1 编辑源文件192.2.2 运行程序20第3章 汇编语言程序设计实验293.1 顺序程序设计293.2 分支程序设计313.3 循环程序设计353.4 综合程序设
2、计37第4章 实验报告撰写规范42附录45I ASCII码表45II 指令速查表46III 伪指令表50IV DOS功能调用51V 常用BIOS功能调用56VI 错误码表58第1章 汇编语言程序设计基础1.1 汇编语言程序的语句1.1.1 语句格式汇编与言语句一般是由分隔符分成的四个部分组成,格式如下:名字 助记符 操作数 ;注释其中带方括号的项可以省略。名字项是合法的标识符,包括标号、变量名、过程名、段名或符号名等。其中,标号后要跟冒号(:),用于指令之前,表示指令的起始地址。标识符由字母、数字以及_、$、?和组成,并满足如下要求:(1) 不能以数字开头;(2) 不能单独使用或,它们有专门用
3、途;(3) 不能是系统的保留字,如指令名、寄存器名和伪指令名等。(4) 一个名字的最大有效长度为31,超过31的部分计算机不再识别。为了便于记忆,名字的定义最好能够见名知义,如用BUFFER表示缓冲区,SUB表示累加和等。助记符项可以是指令或伪指令。操作数项包含0个、一个或多个操作数,依赖于具体的指令或伪指令。多个操作数之间以逗号(,)分隔。注释项以分号(;)开始。汇编语言源程序中的每条语句一般占一行,每行不超过132个字符(MASM6.0开始可以是512个字符),汇编语言对大小写是不敏感的。为了使程序具有较好的可读性,应该使各个项对齐。通常将名字项放在第一列,后面的几项依次以一个或多个TAB
4、分隔。1.1.2 数据定义 通过数据定义语句可为数据项分配存储单元,并根据需要设置其初值。还可用符号代表数据项,此时符号就与分配的存储单元相联系。代表数据项的符号本身称为变量名,与之相对应的存储单元用于存放变量,所以常常就把这样的存储单元称为变量。例1.1 定义字节数据COUNTDB100;定义一个字节的存储空间,存放100BUFFDB3+4,5*6;定义两个字节的存储空间,存放7,30例1.2 定义字数据FLAG1DW65530;定义一个字存储空间,存放65530FLAG2DW0F020H;定义一个字存储空间,存放0F020H例1.3 定义没有初值的数据项BUF1DW?,?;定义两个字存储空
5、间,没有定义初值例1.4 定义字符串MESS1DB“HELLO!”;定义一个字符串,内容是HELLO!MESS2DBH,E,L,L,O,!;定义一个字符串,内容是HELLO!例1.5 重复操作符DUPBUF2DB5 DUP(0);定义5个字节的存储空间,初值均为0例1.6 使用EQU定义等值表达式COUNTEQU234;例1.7 使用等号定义COUNT=234;例1.8 使用$定义$是一个特殊的地址表达式,表示当前地址。XDW0,1,2,4,8,4,2,1,0;LENDB$-X;变量LEN的值等于181.2 汇编语言程序的结构汇编语言源程序建立在段结构的基础上,一个段就是一些指令和数据的集合。
6、所以一个汇编语言源程序,根据程序用途被划分成几段,如数据段、堆栈段、附加段和程序段(代码段),用CS、DS、SS、ES段寄存器存放段值。这样就构造了源程序的基本格式:DATASEGMENTDATAENDSEXTRASEGMENTEXTRAENDSSTACK1SEGMENTSTACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATAASSUMESS:STACK1,ES:EXTRASTART:MOVAX,DATAMOVDS,AXCODEENDSENDSTART结合上面的源程序结构格式,需要说明如下:(1) 互相配对的SEGMENT和ENDS前的标号必须一样;(2) ASSU
7、ME语言使汇编程序得知哪一段是数据段(DS),哪一段是堆栈段(SS),哪一段是附加段(ES),哪一段是代码段(CS)。除CS段以外,各个段寄存器的实际值还要用MOV指令来赋予;(3) END START表示源程序结束。下面,我们通过一个简单的汇编语言程序来说明汇编语言的结构DSEGSEGMENT;数据段开始DATA1DB13H,26HDATA2DW0DSEGENDS;数据段结束SSEGSEGMENTSTACK;堆栈段开始SKTOPDB20 DUP(0)SSEGENDS;堆栈段结束CSEGSEGMENT;代码段开始ASSUMECS:CSEG,DS:DSEGASSUMESS:SSEGSTART:M
8、OVAX,DSEG;初始化数据段基址MOVDS,AXMOVAX,SSEG;初始化代码段基址MOVSS,AXMOVSP,LENGTH SKTOP;设置堆栈指针MOVAL,DATA1ADDAL,DATA1+1MOVBYTE PTR DATA2,ALMOVAH,4CHINT21H;返回DOSCSEGENDS;代码段结束ENDSTART;源程序结束说明如下:(1)DSEG是用户自定义的数据段的段名,SEGMENT和ENDS分别为表示段开始和结束的伪指令。(2)SSEG是堆栈段的段名,STACK表示此段是程序运行时使用的堆栈段,连接程序要求定义一个堆栈段,若无此段,连接程序指出“无堆栈段”错误。(3)C
9、SEG是代码段的段名,一般要先用ASSUME语句指定哪一段是数据段,哪一段是堆栈段和代码段,但是段寄存器的实际地址仍需MOV指令赋予。(4)END START说明,START为程序的启动地址,即程序从这里开始执行,而END告诉汇编程序源程序到此结束,对END后面的任何语句都不再进行汇编。1.3 汇编语言常用伪指令一、表达式赋值伪指令1等值定义EQU格式:符号名 EQU 表达式说明:将右侧表达式的值或意义赋给左侧自定义的标识符号。表达式可以是各种常数、数据符号、指令助记符、伪指令助记符、寄存器名字或其它自定义标识符号。在同一个程序中,一个用EQU定义的符号不能被再定义。2等号伪指令=格式:符号名
10、=表达式说明:作用与EQU相同,惟一的区别是等号语句可以多次被定义。二、数据定义伪指令1定义字节变量DB格式:变量名 DB 表达式,表达式说明:DB用于定义字节变量,每个表达式的值占有一个字节。字节的值域对无符号数为0255,对带符号数为128127。初值表中各项数据用逗号隔开,每项数据占一个字节单元。如果处置表中的初值为“?”,则对应单元字节将不赋初值,其内容为不确定值。2定义字变量DW格式:变量名 DW 表达式,表达式说明:DW用于定义字变量。初值表中各项数据为字,占两个字节,并且字单元不仅可以存放数值,还可以存放变量的偏移地址。3定义双字变量DD格式:变量名 DD 表达式,表达式说明:D
11、D用于定义双字变量,每个数据项占四个字节。它可以是表达式、十进制整数、字符串、“?”或是一个变量、标号的段地址和偏移地址。4定义四字变量DQ格式:变量名 DQ 表达式,表达式说明:变量为四字变量,每个元素表达式占八个字节,它可以是表达式、?、十进制实数、实数的十六进制编码及字符串。5定义十字节变量DT格式:变量名 DT 表达式,表达式说明:变量为十字节变量,每个元素表达式占十个字节,它可以是表达式、?、十进制整数、BCD数及字符串。6变量重复定义子句DUP格式:重复次数 DUP(元素值)说明:重复次数取正整数,元素值可为数值表达式或“?”三、段定义伪指令1段首说明伪指令SEGMENT格式:段名
12、 SEGMENT PRMT1PRMT2PRMT3说明:段名是用户自定义的标识符号。这个语句的作用是告诉汇编程序具有这个名字的段由此开始。PRMT分别为定位类型,组合类型,连接期间用于组或段组的名称,为任选参数。2段结束伪指令ENDS格式:段名 ENDS说明:此语句告诉汇编程序这个名字命名的段到此结束。3段假定伪指令ASSUME格式:ASSUME 段寄存器名:段名,段寄存器名:段名说明:ASSUME的作用是告诉汇编程序,把源程序转换为机器代码时,各段寄存器的符号地址,以确定和检查机器指令中操作数所在的段,产生正确的机器指令代码或打印出错误信息。4代码定位伪指令ORG格式:ORG 表达式说明:此语
13、句的作用是确定其后的数据和代码存放在相应段的起始位置。表达式的值是相对于段基址的偏移量。四、过程定义伪指令格式:过程名 PROC 类型 RET 过程名 ENDP说明:伪指令PROC和ENDP必须成对,并给出相同的过程名。过程有两种类型FAR和NEAR,如未指出,则为NEAR。五、其它伪指令1EVEN伪指令格式:EVEN说明:EVEN的作用是将汇编地址计数器调整到偶地址边界,以便随后的数据或代码在偶地址边界上对准。2END伪指令格式:END STRAT说明:START为程序的启动地址。END告诉汇编程序源程序到此结束,对END后面的任何语句不再进行汇编。第2章 汇编语言程序调试过程2.1 汇编语
14、言程序的命令行开发调试过程一般汇编语言的上机过程是首先用某一个文本编辑器形成一个以ASM为扩展名的源程序文件,然后用汇编程序翻译源程序,将ASM文件转换为OBJ模块文件,最后用连接程序将一个或多个目标文件链接成个可执行文件。2.1.1 编辑源程序可用计算机系统中各种能编辑文本文件的编辑器来编辑汇编源程序。常用的编辑器有:EDIT、记事本、UltraEdit、EditPlus等。利用这些文本编辑工具编辑源程序,生成一个汇编语言源程序的纯文本文件。汇编语言源程序文件的扩展名是:.ASM。这里介绍利用EDIT行编辑程序来编辑汇编源程序的过程。运行EDIT程序可以在Windows操作系统的命令提示符,
15、可以有两种方法运行命令提示符,一种是从开始菜单程序附件命令提示符,如下图所示。图2.1另外一种方法是在开始运行对话框里输入cmd后回车,如下图所示。图2.2进入命令提示符界面如下。输入cd命令后改变当前目录到C盘根目录下。输入edit命令就可以进入编辑环境了。图2.3进入edit编辑环境界面如下,在这里可以输入汇编源程序了。汇编语言源程序一行安排一条语句,不采用类似C或者PASCAL等高级语言源程序那样的分层次缩进格式。如下是汇编语言源程序的一般格式。请注意上下行之间的指令助记符及第一个操作数首字符的对齐,利用制表符(TAB键)能较好的实现对齐格式。图2.4输入完程序后,需要保存文件,选择Fi
16、leSave命令,如下图所示。图2.5选择Save命令后出现如下对话框。在File Name:一栏里输入保存的文件名,此处为Hello.asm。输入完后选择OK。图2.6保存成功,标题栏变为刚才所输入的文件名,如下图所示。保存完毕后,选择FileExit命令退出编辑程序,返回到命令行提示符界面。图2.7这样,源程序的编辑过程就完成了。需要注意的是:使用Windows的记事本编辑汇编源程序时,默认的扩展名是.TXT。在保存文件时,需要将文件扩展名修改成.ASM。2.1.2 汇编程序当源程序编写好后,利用汇编器MASM汇编源程序生成目标代码文件。通常目标代码文件的扩展名是.OBJ。汇编器还可以生成
17、列表文件和交叉参考文件。汇编器相当于高级语言程序设计中的编译器。汇编器按汇编语言的语法检查源程序,如果源程序中有语法错误的行,那么汇编器就不生成目标代码文件,汇编程序将显示出错误位置和原因。这种情况下,必须回到第一步,重新编辑源程序,修改语法错误的行。如果源程序没有语法错误,那么,将生成目标文件(.OBJ文件)。当发现源程序中的某些行含可疑成分或不确定因素时,汇编器会给出警告信息,但仍按缺省处理办法生成目标代码文件。这种情况下,可以重新编辑源程序,消除可疑成分或不确定因素。MASM是微软提供的用于对汇编源程序进行编译的程序。可以输入masm /?来查看这个命令的使用方法,如下图所示。图2.8接
18、下来对编辑完毕后的源程序进行汇编,在命令行提示符下输入masm hello.asm命令就可以对汇编源程序编译了,如下图所示。图2.9从编译结果可以看出,在hello.asm的17行有错误,错误类型是符号STRAT没有定义。这时候需要返回edit编辑环境对源程序进行修改。因为hello.asm文件已经存在,我们可以直接在命令行下输入edit hello.asm命令来修改程序。图2.10修改后保存文件,退出编辑环境。重新进行汇编,结果如下。图2.11编译通过以后,可以在hello.asm所在的目录下生成一个hello.obj的文件,这个就是编译得到的目标文件。2.1.3 连接程序当由源文件汇编成功
19、后,即可用连接程序(LINK.EXE)生成其可执行文件。通常DOS平台上的可执行文件的扩展名是.EXE。一般单个模块的连接不会发生连接错误,总可以顺利地生成可执行文件。当多个模块连接,或者与库中的函数连接时,如果在目标代码文件或者库中找不到所需的连接信息,连接器就会发出错误提示信息,而不生成可执行程序文件。这就需要修改源程序,使得汇编器生成的目标代码文件含有连接器需要的信息。这样的修改主要是对伪指令和汇编语言操作符的修改,或者是对名字符号的修改。如果出现这种情况,那么就要回到第一步编辑源程序,还要重新进行第二步汇编源程序。和masm程序一样,可以输入link /?命令来查看link程序的使用方
20、法。输入link hello.obj命令就可以对编译生成的目标文件(hello.obj)进行连接,如下图所示。图2.12这种方法需要确认连接过程中的各种文件名,如果使用文件名的默认值,那么直接按“回车”键即可。在上面四个文件名中,最重要二个文件名是:执行文件名和库文件名。一般情况下,无需更换最终生成的执行文件名;如果在连接过程中需要其它的库文件,则在显示第三行提示时,输入所需要的库文件名。连接成功后,在目标程序所在的目录下生成一个.EXE文件。可以在命令提示符下,直接输入生成的可执行文件的文件名来运行程序,如果程序正确,就可以得到预期的结果,如下图所示。图2.13技巧提示:如果不想每次连接过程
21、中确认各种文件名,可以在文件名后面加上分号“;”,默认使用各类文件的缺省值。例如输入link hello.obj; 后回车。从MASM6.0版本开始,微软提供了一个ML.EXE程序来对汇编源程序编译和连接。其实,ML.EXE的文件名就是MASM.EXE和LINK.EXE的首字符,所以ML程序就是MASM和LINK两个程序的集成。具体使用方法如下图所示。图 调试程序当程序的运行结果不是预期结果时,就需要调试程序,找出错误的语句或逻辑关系。可以使用系统调试程序DEBUG来进行调试。启动DEBUG的一般命令如下:DEBUG 文件名 参数表其中文件名指定被调试的文件,其包括名和后缀,
22、参数表是被调试文件运行时所需要的参数。被调试的文件可以是系统中的任何文件,但通常它们的后缀为.EXE或.COM。当DEBUG启动成功后,将显示连接符“-”,这时,可输入各种DEBUG命令。如下图所示。图2.15DEBUG后可以不带文件名,仅运行DEBUG程序;需要时,再用N和L命令调人被调试程序。DEBUG命令及其含义如下表所示:命令格式功能说明A地址输入汇编指令C范围 起始地址对由“范围”指定的区域与“起始地址”指定的同大小区域进行比较,显示不相同的单元D范围显示指定范围内的内存单元内容E地址 字节值表用值表中的值替换从“地址”开始的内存单元内容F范围 字节值表用指定的字节值表来填充内存区域
23、G=起始地址 断点地址从起点(或当前地点)开始执行,到终点结束H数值1 数值2显示二个十六进制数值之和、差I端口地址从端口输入L地址 驱动器号 扇区 扇区数从磁盘读M范围 地址把“范围”内的字节值传送到从“地址”开始的单元N文件标识符 文件标识符指定文件名,为读/写文件做准备O端口地址 字节值向端口输出P=地址 指令数按执行过程,但不进入子程序调用或软中断Q退出DEBUG,不保存正在调试的文件R寄存器名显示和修改寄存器内容S范围 字节值表在内存区域内搜索指定的字节值表。如果找到,显示起始地址,否则,什么也不显示T=地址 指令数跟踪执行,从起点(或当前地点)执行若干条指令U范围反汇编,显示机器码
24、所对应的汇编指令W地址 驱动器号 扇区 扇区数向磁盘写内容,(BX、CX)为写入字节数关于参数的几点说明:1. 进制:在DEBUG中输入或显示的数据都是十六进制形式;2. 分隔:命令和参数、参数和参数之间要用空格、逗号或制表符等分隔;3. 地址:用“段值:偏移量”的形式来表示地址,也可用段寄存器来代表“段值”。例如:DS:10,ES:200,CS:30等;4. 范围:用来表示地址范围,从哪个地址开始,到哪个地址结束。它有二种表示方式:l 地址 地址前者表示起始地址,要用“段值:偏移量”来表达,后者表示终止地址,只用“偏移量”来表示;l 地址 长度前者表示起始地址,要用“段值:偏移量”来表达,后
25、者表示该区域的大小,用字母L开头的数值来表示;例如:100:50 100 段值为100,偏移量从50到100的内存区域;100:50 L100段值为100,偏移量从50开始的100个字节区域。5. 端口地址:二位十六进制数值;6. 字节值:二位十六进制数值;7. 字节值表:由若干个字节值组成,也可以是用引号括起来的字符串;8. 驱动器号:0驱动器A、1驱动器B、2驱动器C、3驱动器D等;9. 命令是单个字母,命令和参数的大小写可混合输入;10. 可用F1、F2、F3、Ins、Del、左移键、右移键等编辑键来编辑本行命令;11. 当命令出现语法错误时,将在出错位置显示“ Error”;12. 可
26、用Ctrl+C或Ctrl+Break来终止当前命令的执行,还可用Ctrl+S来暂停屏幕显示(当连续不断地显示信息时)。下面对DEBUG命令作具体介绍:1. 内存显示命令D(Dump Command)D命令用来显示内存单元的值,包括下列两种格式:(1) D 显示由指定地址开始的若干内存单元的值。对于80列显示模式,显示128个字节。如果未指定参数,则一个D命令的结束地址开始显示。若前面未用过D命令,则缺省从CS:IP开始显示。(2) D 该命令显示由指定的所有内存单元的值。执行D命令后,屏幕左边显示的是内存地址,中间是从该地址开始的若干字节值(十六进制),右边是每个字节对应得ASCII字符,其中
27、,“.”表示不可打印字符。若只给出偏移地址,则使用DS当前值作为段地址。例如: D 2000:100 ;显示从2000:0100H开始的内存单元的值 D 100 ;显示从DS:100H开始的内存单元的值 D CS:100 ;显示从CS:100H开始的内存单元的值D ;显示从CS:IP开始的内存单元的值2. 内存修改命令E(Enter Command)E命令用来设置指定内存单元的值,包括下列两种格式:(1) E;(2) E。 若只给出偏移地址,则使用DS当前值作为段地址。 第一种格式以交互方式逐个修改连续的内存单元。键入该命令后,DEBUG显示指定地址及相应内存单元的值,等待用户修改。此时,可以
28、采取下列操作:l 输入一个新的值;l 键入空格跳到下一个地址单元;l 键入“-”返回上一个地址单元;l 按回车键结束E命令。第二种格式用来修改从指定地址开始的内存区域。DEBUG将这些值依次写入始于指定地址的连续内存单元。其中,是以空格或逗号分隔的若干十六进制字节或字符串。例如:E 01 123 0A ;将内存单元DS:0DS:4的值设置为01H、31H、32H、33H、0AH注意,E命令后必须指定内存地址。3. 寄存器命令R(Register Command) R命令用来显示和修改寄存器的值,包括下列两种格式。(1) R显示所有寄存器和8个标志位的值,并反汇编CS:IP所指 的命令。(2)
29、R 显示指定寄存器的值,并等待用户键入新的值,按回车键结束R的命令。其中,只能是8086的16位寄存器AX、BX、CX、DX、SP、BP、SI、DI、DS、ES、SS、CS、IP、与F(标志寄存器)。其中,显示的8个标志位的符号对应符号如下表所示。标志名称溢出OF方向DF中断IF负号SF零ZF辅助进位AF奇偶PF进位CF置位状态OVDNEINGZRACPECY复位状态NVUPDIPLNZNAPONC如果想修改标志寄存器的内容,可以输入如下命令。-R F屏幕将显示8个标志位的值,然后等待用户修改。只要输入这些符号就可以设置对应标志位的值,键入符号的个数与顺序可以任意。4. 汇编命令A(Assem
30、ble Command)命令的格式为: A 该命令的功能是将用户输入的汇编语言指令汇编为机器代码,存入指定地址开始的内存单元。若只给出偏移地址,则使用CS当前值作为段地址。若未指定地址,则从一个A命令的最后一个单元开始;若前面未用过A命令,则缺省为CS:IP。当执行A命令时,DEBUG等待用户输入指令序列。输入每条指令后回车,再直接按回车键结束A命令。DEBUG将输入指令序机的机器码存入指定地址开始的内存单元中。使用A命令时,要注意以下几点。l 远返回的助记符为RETF。l 除了汇编语言指令外,还可以使用伪指令DB和DW,将字节或字送入相应的 内存单元。然而,DB和DW后不能使用“?”、表达式
31、或DUP子句等。l 不能使用符号地址。l 为了区分立即数与内存操作数,地址必须放在方括号( )中。例如:MOV AX,1234 ; 立即数送AXMOV AX, 1234 ; 内存单元的值数送AXl 段超越前缀要在相关指令前或单独一行输入。例如,指令MOV AX,ES:100H在DEBUG中的正确形式为 ES:MOV AX,100或者 ES: MOV AX,1005. 反汇编命令U(Unassemble Command)U命令用来将二进制代码反汇编为汇编语言的符号指令,包括下列两种格式。(1) U从指令地址开始,反汇编若干字节。对于80列显示模式,反汇编32个字节(为了保证最后一条指令的完整性,
32、可能会多于32个字节)。若未指定地址,则从上一个U命令的最后一个单元开始;若前面未用过U命令,则缺省为CS:IP。(2)U 对指定范围的内存区进行反汇编。若只给出偏移地址,则使用CS当前值作为段地址。 执行U命令后,屏幕左边显示的内存地址,中间是机器代码,右边是对应的汇编语言指令。6. 运行命令G(GO Command)G命令的格式为: G= 其中,等号“=”后的指出程序执行的起始地址,如未指定,则缺省为CS:IP。指定的段点最多为10 个,也可以没有。若只给出偏移地址,则使用CS当前值作为段地址。G命令从指定地址开始执行内存中的程序,直到内存结束或遇到指定的任意断点时停止执行。若遇到断点,则
33、显示所有内存器和标志位的当前值以及要执行的下一条命令;若程序正常结束,则显示“Program terminated normally”。说明:l 断点地址的次序是任意的。设置多个断点的好处在于当被调试程序有多条可 能的执行路径时 ,使其不管沿哪个路径执行,都有可能在断点处停下来,以便检查程序的执行情况。l 断点一经设定,DEBUG用一条INT3指令取代断点处指令的操作码。当程序执行到一个断点地址时,立即停止,然后恢复所有断点处的指令,并取消全部断点,返回DEBUG 。如果设置的断点在G命令的执行过程中均未遇到,则程序执行完毕,不会恢复断点处的指令。l 一旦程序执行完毕,若想再次执行,必须重新装
34、入。l 对于G以及下面要介绍的T与P命令,等号“=”后的所有单元,必须是有效的8086指令代码,否则,会产生预想不到的结果。7. 继续命令P(Proceed Command)命令的格式为: P = P命令类似于T命令,但将CALL、INT或带重复前缀(如REP)指令的执行当前一步,不会跟踪进入相应过程或中断服务程序内部。8. 跟踪命令T(Trace Command) T命令的格式为: T = 其中,等号“=”后的指出程序执行的开始地址,如未指定,则缺省为CS:IP。若只给出偏移地址,则使用CS当前值作为段地址。 T命令从指定地址开始单步执行,执行的指令数由 决定。每条指令执行后,都要显示所有寄
35、存器和标志位的值以及下一条指令。若未给出,则缺省为1 。 T命令执行时,若遇到CALL或INT指令,会跟踪进入相应过程或中断服务程序内部。对于带重复前缀(如REP)的指令,每次重复执行算一步。9. 退出命令Q(Quit Command) Q命令的格式为: Q 使用此命令可退出DEBUG。10. 内存比较命令C(Compare Command ) C 命令用来比较两个内存块的值,格式如下: C 其中, 指出第一个内存块,指出第二个内存块的开始地址。比较的字节数由确定。若只给出偏移地址,则使用DS当前值作为段地址。 C命令依次比较两个内存块的每个字节。若两块相等,则不输出任何信息;若发现有不相等的
36、字节,则显示出它们的地址和值。屏幕从左到右显示的依次是:第一个内存块地址与相应的值、第二个内存块的值及其 地址。例如: C2000: ;比较内存块2000:0H2000:100H与DS:80HDS:180H C2000:0L:0 ;比较内存块2000:0H2000:1FH与3000:0H3000:1FH11. 内存填充命令F(Fill Command) F命令的格式为: F 用此命令可将 中的字节写入 所指定的内存区域。 若只给出偏移地址,则使用DS当前值作为段地址。 若 中的字节数超过的字节数,则忽略多余的字节;若中的字节数少,则重复使用这些数据,直到填满指定的为止。例如: F2000:07
37、0 ;将2000:0000H 2000:0007H的8个字节均置为0 F0 7 1 2 3 ;将DS:0000H DS:0007H的8个字节依次设置为1、2、3、1、2、3、1、212. 内存传送命令M(Move Command ) M命令用来将一个内存区的数据(或代码)复制到另一个内存区。格式如下:M 其中,指出要复制的源内存块,作为目的内存块的起始地址,复制的字节数由确定。若只给出偏移地址,则使用DS当前值作为段地址。 例如:M2000: ;复制内存块2000:0H2000:100H的值到DS:80HDS:180HM 2000:0L:0 ;复制内存块2000:0H2000:1FH的值到30
38、00:0H3000:1FH 如果源块与目的块重叠,DEBUG也能正确处理。 13. 搜索命令S(Search Command )S命令用来在指定的内存区域内搜索特定字节串。 格式如下: S 若只给出偏移地址 ,则使用DS当前值作为段地址。 若未找到所需的字节串,则不显示任何信息,否则,显示其每次出现的地址。14. 十六进制数计算命令H(Hex Command)H命令的格式为: H 计算两个十六进制数(16位)的和与差。15. 文件命名命令N(Name Command )N 命令的格式为: N 此命令将指定的文件路径名存入DEBUG的文件控制块FCB中,以便后面用L或W命令把文件装入或存盘。给出
39、可执行文件运行时的命令行参数。 例如,下列命令DEBUG ; 启动 DEBUGN FilenameL相当于DEBUG Filename16. 装入命令L(Load Command )L命令用来将一个文件或磁盘指定扇区的内容装入内存,包括下列;两种格式。(1) L 将已用N命令命名的文件转入到指定内存单元,并将BX:CX设置为装入文件的字节数。对于可执行文件.EXE或.COM,通常不指定装入地址,由分配,装入后自动设置:IP,一般IP为0(.文件)或(文件)。若指定地址,则可执行文件的装入地址必须是:。 ()地址驱动器号起始逻辑扇区号扇区数将磁盘的若干扇区(最多)装入到指定的内存地址。若只给出偏
40、移地址,则使用当前值作为段地址。其中,表示盘,表示盘,表示盘,依此类推。例如,将盘引导扇区(逻辑扇区号为)的内容装入到内存地址:,然后查看,可用下列命令:L 0 2 0 1 D CS:017. 端口输入命令I( Input Command ) I 命令的格为: I端口地址此命令从指定的I/O端口读入一个字节并显示。18. 端口输出命令O(Output Command)O命令的格式为: O 用于输出一个字节到指定的I/O端口。19. 写盘命令W(Write Command) W 命令包括两种格式。 (1)W 将指定地址开始的BX:CX个字节写入已由N命令命名的文件中。 若只给出偏移地址,则使用C
41、S当前值作为段地址。 若未指定地址,则缺省为CS:100H。 注意,在执行W命令前,必须正确设置BX和CX的值。 另外,不能写入.EXE文件,因此.EXE 文件必须以特定的格式才能写入,DEBUG不支持这种写入方式。 (2) W 将指定内存地址的数据写入磁盘的若干扇区(最多80H个) 中。若只给出偏移地址,则使用CS当前值作为段地址。各参数的含义同L命令。 第二种格式的W命令直接将数据写入指定扇区,使用时一定要小心,否则会破坏磁盘上的文件系统乃至引导扇区。2.2 汇编语言编程集成开发环境PWBPWB(Programmers WorkBench)是MASM 6.11提供的编程集成环境,在此环境下
42、,程序员可直接编写源程序、汇编、连接和运行。u 在汇编源程序时,如果有错误,系统将列举出所有出错位置和出错原因。还可用Shife+F3和Shife+F4来定位前一个错误和后一个错误;u 在连接时,可指定堆栈的大小、附加的库文件、符号跟踪等选项;u 在运行时,可设置命令行参数、直接运行、按调试方式运行、用DOS命令来运行等。例1.8:查看PWB的启动方式pwb /?Usage: PWB /DS|T|A.Disable CURRENT.STS, TOOLS.INI, Autoload/PP|F Set PWB or Foreign Program List/PLSet Last Program L
43、ist/E Execute commands/M Start at mark/RRead-only mode/T .(Temporary) file to open通常情况下,在PWB后面跟一个将要编辑的源文件名。假如要编辑源文件TEST.ASM,那么,可直接输入下面命令:pwb test.asm2.2.1 编辑源文件PWB的编辑功能与许多编辑器的功能类似,有:建立新文件、保存文件、另存为、光标移动功能、块操作、插入/删除操作、恢复操作、查找/替换操作、设置编辑器的功能键和各类颜色等。要想了解更全面的编辑功能,可查看菜单:File、Edit、Search和Options的前四个菜单项。在图2.
44、16(Options菜单中的“Colors”)中,可选择各类窗口、菜单和文本等对象的背景色和前景色。比如:当要改变源程序的显示颜色时,可先在左边的列表框中选择“Text”列表项,然后再选择其背景色和前景色。汇编和连接文件图2.16 设置编辑器各类颜色的画面在集成环境下,源程序的汇编和连接是一次性完成的。当汇编任务结束,并且没有产生错误信息时,连接程序立即开始连接工作。但如果源文件有错,则显示所有错误位置和原因,连接程序不会被执行。在浏览错误信息时,可用Shife+F3和Shife+F4来定位前一个错误和后一个错误。在连接时,如果需要某个库文件,那么,可选用Options菜单中的“Link Op
45、tions”菜单项来设置,该菜单项的显示画面如图2.17所示图2.17 连接选项的部分设置画面在该画面上还可为程序设置一个缺省的堆栈段,其大小也可由用户自行决定。当生成执行文件需要多个模块连接时,就需要建立一个工程文件(.MAK)。建立工程文件的步骤和画面如下:(1)、输入工程文件名,其默认的后缀为.MAK。输入画面如图2.45所示在图2.18中还可选择工程目标文件的类型,该类型有:EXE、COM、LIB、Windows的EXE或DLL等二十几种。当然,对每种类型又有一些不同的要求,在此不在进一步展开叙述了。通常情况下,不必选择目标文件类型,其缺省类型就是DOS EXE。图2.18 建立工程文
46、件名的画面(2)、工程文件的编辑在图2.18中输入工程文件名,并且按“OK”按钮时,系统将进入图2.19,在该画面中可向当前工程中添加源程序,也可把某源程序从当前工程中删除。图2.19 编辑工程文件的画面当输入的文件名不在工程文件中,则把该源文件添加到工程文件中,否则,将其从工程文件中删除。当所有源文件都添加到工程文件中时,可按“Save List”来保存该工程文件。此后就可用打开工程文件的方式来连接该工程中的文件。如果需要修改工程文件的话,则可先用Project菜单中的“Open Project”菜单项打开工程文件,再用“Edit Project”菜单项来激活图2.19进行编辑。2.2.2
47、运行程序在运行程序时,可设置命令行参数、直接运行、按调试方式运行、用DOS命令来运行等。通常情况下,在编写程序的初期,一般都用“调试方式”来运行程序。当选用这种方式时,系统会自动进入CV(CodeView)的调试环境。有关CV的使用参见“调试工具”中CodeView的介绍。符号调试的设置步骤编写程序很难做到:编辑、汇编、连接、运行一次完成,除非程序的功能非常简单。当运行的结果不符合要求时,就需要跟踪程序的运行。一般来说,跟踪程序执行的工作又称为调试程序,即找出程序中不正常的逻辑关系和语句。常用的调试手段有二种:执行代码的调试和符号调试。前者是在没有任何源程序信息的情况下进行的调试,其工作难度大
48、、效率低,后者是源程序一级上进行的调试,其目标代码的执行过程就象是源程序的执行,这种调试手段效率高、调试难度低,也是目前最流行的调试手段(在各种编程环境下都有类似的调试工具)。为了能进行符号调试,需要告诉汇编程序和连接程序保留源程序中的各种符号信息。为此,可通过下面三步来设置一些命令选项。(1)、设置生成选项选择Options菜单中的“Build Options”菜单项,显示出图2.20,并选择其中的“Use Debug Options”选项。图2.20 设置生成选项的画面(2)、设置汇编命令的选项选择Options菜单中的“Project Templates”“Customize Proje
49、ct Template”菜单项,显示出图2.21。图2.21 修改汇编命令选项的画面在该画面的“Build Rule List”列表框中选择“macro AFLAGS_D “”,并把它修改为“macro AFLAGS_D “/Zi /Zd”。(3)、设置连接命令的选项选择Options菜单中的“Link Options”菜单项,与图2.17所对应的是同一个画面,在此所要的部分画面如图2.22所示,并选择“CodeView”选项。图2.22连接过程选项的部分设置画面经过上面三步设置后,在PWB环境下,用Run菜单中的“Debug”菜单项就可进行符号调试了。CodeViewCodeView是一个简
50、单、直观的全屏幕调试工具,它可调试多种语言的源程序所生成的执行代码。CodeView的调试窗口如图2.23所示。画面的左上窗口是调试器的主窗口,其显示被调试的源程序或执行代码,左下窗口是命令窗口,用户可输入各种DEBUG命令,右窗口是显示寄存器窗口,它可显示16位和32位寄存器的内容。当然还有其它窗口,如:内存窗口、查看内容窗口(Watch)和程序输出窗口(View)等。图2.23 CodeView调试器的显示画面1、功能键F2:显示/隐含的寄存器组窗口F3:以不同的显示方式显示当前执行的程序F4:显示程序的输出屏幕F5:执行到下一个逻辑断点,或到程序尾F6:依次进入当前屏幕所显示的窗口F7:
51、与F5功能相同F8:单步执行指令,并进入被调用的子程序F9:在源程序行中设置/取消断点,用鼠标左键双击之也可F10:单步执行指令,但不进入被调用的子程序2、命令窗口在该窗口中,可输入前面介绍的DEBUG命令。3、寄存器组窗口可以直接在寄存器组窗口内修改各寄存器的内容和各标志位,还可以用Options菜单中的“32-Bit Registers”菜单项来切换16位和32位寄存器。2.3 8086模拟器-EMU8086Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机)于一身它能够编译源代码,并在模拟器上一步一步的执行。其可视化界面使得汇编程序的编写调试变得非常简单,可以在执行程序的同时观察寄存器,标志位和内存、算术和逻辑运算单元(ALU)显示中央处理器内部的工作情况。这个模拟器是在一台“虚拟”的电脑上运行程序的,它拥有自己独立的“硬件”,这样程序就同诸如硬盘与内存这样的实际硬件完全隔离开,动态调试(DEBUG)时非常方便。2.3.1 EMU8086软件使用简介EMU8086安装好之后,可在桌面找到其快捷方式或从开始菜单进入打开软件。软件初始界面如图2.24所示。图2.24 E
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阳光心态迎接每一天(五年级主题班会课件)
- 小小书法家:书写汉字的魅力小学主题班会课件
- 库存不足紧急采购需求通知(7篇范文)
- 内科护理学跨学科合作
- 公共场所人员拥堵紧急处理场所管理者预案
- 传媒行业编辑部内容质量绩效考核表
- PBL内科护理查房中的护理评估工具应用
- 学校体育教育活动安全防范指导书
- 2026青海省地方教育局招聘教师30人考试备考试题及答案详解
- 修订2026年IT服务合同的催办函(5篇)范文
- 2026年人教鄂教版(新教材)小学科学三年级下册期末学情测试卷及答案(2套)
- 黑龙江省龙东地区2025年初中学业水平考试地理真题(含答案)
- 2026人教版小学四年级下册语文全单元课文易错考点梳理讲义
- 2026春小学信息技术三年级下册期末练习卷(清华版贵州)附参考答案
- 2026年人教版(新教材)初中信息科技七年级全一册第二学期期末综合测试卷及答案
- 新教材人教版七年级数学下学期期末模拟卷
- 管理经济学第8版
- 2026内蒙古医药行业市场现状供需分析及投资评估规划分析研究报告
- 中投顾问:2026年中国未来产业深度分析报告
- 《煤矿重大事故隐患判定标准》(2026版)解读
- 2026年高中历史学业水平合格性考试知识点总结(复习必背)
评论
0/150
提交评论