2012级计算机应用技术实验指导书(共20页).doc
精选优质文档-倾情为你奉上计算机应用技术实验指导书(通信工程专业)吉林大学珠海学院电子信息系DEBUG调试工具1.打开机器 单击 开始 2.单击 运行 弹出运行窗口 输入 cmd 单击确定,则进入:窗口Microsoft Windows XP 版本 5.1.2600(C) 版权所有 1985-2001 Microsoft Corp.C:Documents and SettingsAdministrator>光标闪烁 输入字母DEBUG 回车 进入调试工具 DEBUGDEBUG调试程序DEBUG.COM是MS DOS(Microsoft Operating System)磁盘操作系统提供的实用程序。该程序可编辑、汇编、反汇编,调试和运行简单的8086汇编语言程序。一、DEBUG命令特征1-为进入DEBUG的提示符,其后可输入命令。2提示符后命令为单一字符,它的后面可跟一个或多个参数。命令与参数可用大写,小写或大小写混合方式输入。3命令与参数可用分隔号(空格或逗号)隔开,2个连续的十六进制值之间必须用分隔号隔开。下列命令等效:-D CS:100 110-D,CS:100 1104中断命令时,可按Ctrl+Break键。5每一个命令,在按回车键之后有效。6对于产生大量输出命令,可按Ctrl+Numlock,使显示停止向上卷动,以便阅读。再按任意键即可继续显示输出。7各种控制键及各种DOS编辑键,在DEBUG中都可使用。8若输入某行发生语法错误,则显示这一行,指出错误所在。如:-D CS:100 CS:110Error这时可重新输入。9DEBUG命令中使用地址格式<段地址>: <偏移地址>其中段地址可以是段寄存器名,也可以是十六进制值,也可以缺省。系统默认十六进制值,其后不用加H。如:-D CS:100-D 92F:100-D 100 (使用约定段)命令地址范围的格式:<段地址>:<始偏移地址> <末偏移地址>或<段地址>:<始偏移地址> L<表长>如:-D CS:100 110-D 92F:100 L10二、DEBUG命令使用规则1所有输入的数字值,全为十六进制数,可输入14个十六进制数字字符。2重复前缀、LOCK前缀助记符在相关指令之前输入,也可置于不同的行。3可以使用段超越助记符,如CS:,DS:,ES:,SS:。4串操作助记符,必须说明是字节还是字操作。5跨段返回时的助记符为RETF。6DEBUG能自动汇编短,近和远的转移和调用。可用NEAR和FAR前缀。如:0100:0500 JMP 502 ; 2字节短转移指令0100:0600 JMP NEAR 608 ; 3字节近转移指令0100:0800 JMP FAR 70A ; 5字节远转移指令7可用BYTE PTR(或缩写BY)前缀表示字节存储单元,WORD PTR(或缩写WO)前缀表示字存储单元,说明操作数类型。如:ADD BYTE PTR128, 10DEC WORD PTRSI8操作数若为立即数,可直接写出,对直接寻址的存储单元加方括号。如:MOV AX, 1A87 ; AK1A87HMOV BX, 1000 ; BX1000H9可使用DB或DW直接把字节或字数据送入相应存储单元。如:DB 1, 3, 5, 'THIS IS AN EXAMPLE'DW 1000, 5000, 'BACH'10支持各种形式寄存器间接寻址命令。如:ADD BX, 34BXSI-1POP BP+DI三、DEBUG启动和初始化1启动命令C:>DEBUG 驱动器名: 路径 文件名 .扩展名 参数如:A:>DEBUG prt.exe-XXXX:01002初始化DEBUG程序启动后,初始化各寄存器和标志位的内容和状态。(1)段寄存器(CS,DS,ES和SS)置于自由存储空间的底部即DEBUG程序结束后第一个段。(2)指令指针IP置为0100。(3AX,BX,CX,DX,BP,SI,DI置为0。如果调用DEBUG时包含一个要调试的文件标识符,则文件长度包含在BX和CX中(高位部分在BX中)。(4除IF外其它标志位置0。当DEBUG调用*.EXE文件,则把段寄存器,堆栈栈顶指针SP置为文件所规定的值。四、DEBUG命令1汇编命令格式:-A 地址功能:由指定地址开始,输入汇编语言语句,A命令把它们汇编成机器码后,从指定地址单元开始连续存放。若在命令中没指定地址,前面用过汇编命令,则接着上一汇编指令的最后一个单元开始存放。A命令用无命令Enter或CTRL+C退出。如:A:>DEBUG-AXXXX:0100 MOV AL, 400102 MOV CH, 200104 JMP 10F0106 DB 'DATA$'010B DW 010F MOV AH, 010111 INT 200113 C ; 按Ctrl+C键退出。上例中XXXX表示开始的段地址,随使用DOS版本及内存大小不同而不同。下图以P111第16题为例,说明其编辑、运行的过程。2磁盘文件命名命令格式:-N <文件标识符> <文件标识符>功能:用于设置文件名以供读写。若指定一个文件标识符,则把文件标识符(Filespec)在文件控制块中格式化。3存盘命令格式:-W 地址或-W <地址> <驱动器号> <扇区号> <扇区数>功能:用于把输入或调试的程序写入磁盘中。如执行:-W 地址此命令把指定内存区域中的数据,写入到CS:5C处文件控制块所规定的文件中若命令中未指定地址,则由内存CS:100处开始。使用W命令之前,先用-N命令在CS:5C处指定格式化文件标识,根据程序在内存中使用的字节数,修改BX和CX使之与字节数相同然后执行W命令。如:用A命令自CS:100开始输入一段程序,程序长度为30H字节,要把这段程序存盘。操作如下:其中文件名为P111.16(111页16题),-r bx和-r cx两句分别指出所使用的空间,一般bx为0,cx指出程序所占的内存空间,本例中是30H(写入时该值初始值为0),-W命令写入。本写入命令不支持写入具有扩展名为.EXE或.HEX文件。否则显示出错信息。若修改.EXE或.HEX文件,可用DOS命令REN把文件改名,再DEBUG调入内存修改。修改后,用W命令存盘。本命令可把一段可执行程序写成扩展名为.COM的文件。该文件可在DOS下直接执行。EXE文件转换为COM文件:C:EXE2BIN 文件名 文件名.COM缺省目标文件扩展名为.BIN,可用RENAME命令更名为.COM文件。4装入命令若DEBUG程序调用时,未指定文件标识符,则必须先用N命令把要调用的文件标识符格式化到CS:5C控制块中,这时才能用LOAD命令调入内存调试。格式:-L (地址)或-L <地址> <驱动器号> <扇区号> <扇区数>(用法略)功能:用于磁盘上的文件或磁盘上指定区域(指定驱动器和指定扇区范围)的内容装入到内存的指定区域中。如:执行-L 地址若没指定地址,则文件装入CS:100开始的内存区域中。若指定地址,则装入指定地址开始的内存中。对于扩展名为.COM和.EXE文件,L命令只能指定地址CS:100或不指定地址。在这种情况下,L命令不得指定其他地址,否则出现错误。BX、CX包含所读入文件的字节数。BX存放高位字节数,CX存放低位字节数。如:-N B:SEARCH.EXE-L-R BXBX 0000-R CXCX 014A ; 文件长度014AH字节,即330个字节。5反汇编命令格式:-U 地址或-U 地址范围功能:已知内存某一区域中,有某一程序的目标码。为了解此程序的内容,把目标程序反汇编为源程序。若命令没指定地址,则由上一个U命令的最后一条指令的地址下一单元作起始地址。若没有输入过U命令,则由DEBUG初始化段寄存器的值作段地址,以指令指针IP作为地址偏移量。若命令由指定地址开始,反汇编十六个字节(40列显示方式)或32个字节(80列显示方式)。若命令对指定范围的内存单元反汇编,地址范围由始地址,末地址规定(末地址只给出地址偏移量),也可由始地址及长度来规定。如:C>DEBUG B:SEARCH.EXE-U0C1C: 0000 1E PUSH DS0001 B80000 MOV AX, 0000一次显示不完,可用U命令继续。其中第一列用“:”分隔的是当前代码段基址和偏移量,第二列是机器码,第三列是指令。6显示内存单元内容命令格式:-D 地址或-D 地址范围功能:用于显示指定存储单元的内容。显示可分成三部分,左边表示每一行第一个字节对应的段地址及偏移地址,中间部分8个字节(40列显示方式)或十六个字节(80列显示方式)表示每个单元中十六进制码,右边对应的是相应ASCII码显示。若命令中只包括起始地址偏移量,默认段地址在DS中。7修改内存命令格式:-E <地址> <内容表>或-E <地址>功能:此命令用于修改内存单元的内容。若给定地址及内容表,则表示该命令用指定内容去代替指定地址开始内存单元的内容。若只给定地址,则修改每个字节数据后用空格确认,再修改下一字节,按Enter修改结束。如:-E DS:100 F3 XYZ8D表示由DS:100地址开始,用F3,X,Y,Z和8D代替DS:100到DS:104这5个单元的内容。内容表中的十六进制字节数必须用空格或逗号隔开,字符必须用单或双括号括起。8显示和修改寄存器的内容显示和修改寄存器的格式:-R或-R 寄存器功能:若只输入R,则显示CPU内所有寄存器内容和全部标志状态(下例第一条指令)。若输入R及寄存器名,则显示该寄存器内容,并可修改(下例第二条指令将AX的值从0000修改为1234H)。图中,前两行显示了CPU所有寄存器内容和标志寄存器状态。第三行显示当前CS:IP所指的指令机器码和反汇编符号,这是下一条即将执行的指令。标志寄存器标志对照表标志名OFDFIFSFZFAFPFCF置位(1)OVDNEINGZRACPECY复位(0)NVUPDIPLNZNAPONC若显示或修改标志寄存器内容,输入:-RF其中第一条命令使FR的值置位,第二条命令使FR的值复位,第三条命令不修改FR值。9跟踪命令格式:-T或-T =地址或-T =地址 值功能:跟踪程序,了解程序执行情况。若-T未指定地址,则从CS:IP开始,执行一条指令,就停下来,显示全部寄存器状态及下一条要执行的指令。若执行-T =地址,则在指定地址停下来,显示全部寄存器状态及下一条要执行的指令。若执行-T =地址 值,表示从给定地址开始执行,后面的值表示要执行几条指令。每条指令执行完显示全部寄存器状态及下一条要执行的指令。10运行程序命令格式:-G =起始地址 断点11查找命令格式:-S <地址范围> <内容表>功能:用于查找指定范围内,符合内容表所指定的内容的地址。若找到,则显示出它们的地址,否则退回DEBUG状态。地址范围若只输入偏移地址,则缺省段地址在DS中。若为其它段,应使用对应段寄存器表示段址。如:在DS:100DS:120地址范围内查找内容为06H的存储单元。-S 100 120 0608FF:0101表示指定范围内,08FF:0101单元内容为06H。又如:在CS:000CS:100地址范围内查找4个字节字符串41”XYZ”。-S CS:000 100 41 XYZ-表示指定范围内找不到要查找的字符串。12比较命令格式:-C <源地址范围> <目的地址>功能:用于比较两块内存区域的内容,比较区域的范围由源地址范围决定。比较后,若对应地址内容不同,则显示出二者的地址和内容。显示的次序是:源地址及内容在前,目的地址及内容在后(先内容,后地址)。如:-C CS:100 10F 20008FF:0105 OO 06 08FF:0205若源地址的起始地址只有偏移量,则C命令认为在DS段中。13填充命令格式:-F <地址范围> <内容表>功能:把内容表中字节填入指定地址范围内的存储单元中。若内容表中字节数小于地址范围,则内容表被重复使用,直到指定地址范围填满为止。若内容表中的字节数大于地址范围,则多余的内容被忽略。如:-F 04BA:100 L5 F3 XYZ8D即指定5个字节内容填入4BA:1004BA:104 5个内存单元。其中字符XYZ用ASCII码填入。100104内容为:F3,58,59,5A,8D。14移动命令格式:-M <源地址范围> <目的地址>功能:把源地址范围的内容转移到目的地址开始的内存区。-M CS:100 110 500把CS:100CS:110 17个字节内容存放到CS:500开始的存储区。15退出命令格式:-Q功能:退出DEBUG,返回DOS状态。 实验内容实验一 算术运算实验一、实验目的1掌握汇编调试程序DEBUG的常用命令和功能。2掌握算术运算程序的编写方法。3学会DEBUG环境下调试程序的方法。二、实验内容注:以下题目中数据按低地址存放低位数据,高地址存放高位数据。题目1:两个无符号数相加,将结果数存入指定地址单元。被加数,加数及和存放地址及数据如下:地址数据被加数2000:00009FH 2000:00016BH加数2000:00025CH 2000:000342H和 2000:0004 2000:0006题目2:两个无符号数相减,将差存入指定地址单元。被减数,减数及差的存放地址及数据如下:地址数据被减数2000:01008CH 2000:010142H减数2000:010292H 2000:01035AH差2000:0104 2000:0105题目3:两个无符号数相乘,将积存入指定地址单元。被乘数,乘数及积存放的地址及数据如下:地址数据被乘数2000:100056H 2000:10012CH乘数2000:10023AH 2000:10031CH积2000:1004 2000:1007题目4:两个无符号数相除,将商及余数存入指定的地址单元。被除数,除数,商及余数存放的地址及数据如下:地址数据被除数2000:02002AH 2000:02013BH 2000:02024CH 2000:02035DH除数2000:02047CH 2000:02055DH商2000:0206 2000:0207余数2000:0208 2000:0209三、实验报告1实验用源程序。2实验方法及结果分析。3实验心得体会。实验二 BCD码运算实验一、实验目的1进一步掌握DEBUG使用方法。2掌握BCD码运算程序编写方法。二、实验内容计算二不等长压缩BCD码之和。其地址和数据为(低位低地址,高位高地址)。地址数据被加数2000:000046H 2000:000178H加数2000:000294H和2000:00032000:0005三、实验报告1实验用源程序。2实验方法及结果分析。3实验心得体会。实验三 显示字符串实验一、实验目的1掌握宏汇编语言程序编辑方法。2掌握宏汇编程序MASM.EXE将宏汇编语言程序汇编成目标程序,连接程序LINK.EXE将目标程序连接成DOS下可执行文件的方法。3掌握调用DOS及BIOS软中断功能显示字符串的方法。二、实验内容题目1:按宏汇编语言程序程序的格式,采用INT 21H的2号功能调用显示:I like computer very much.题目2:按宏汇编语言程序程序的格式,采用INT 21H的9号功能调用显示一串汉字字符串:我的计算机工作正常.注:汉字字符串按DB定义数据。题目3:按宏汇编语言程序程序的格式,采用INT 21H 0A号功能调用显示一字符串:I hope you work hard.三、实验方法1利用编辑程序来编辑宏汇编语言源程序。源程序的文件的扩展名为.ASM。2利用MASM.EXE宏汇编程序程序将源程序汇编成目标文件:A>MASM 盘号:文件名.ASM 盘号:文件名.OBJ。若汇编产生严重错误(Severe Error),利用编辑程序修改源程序,直至无此种错误为止。对于警告错误,可不进行修改而继续下一步。3利用连接程序LINK.EXE将目标程序转换成DOS下可执行文件.EXE。4在DOS环境下执行生成的可执行文件:A>文件名四、实验报告1实验用源程序。2实验方法及结果分析。3实验心得体会。实验四 人机对话实验一、实验目的1进一步掌握字符串显示方法。2掌握键盘输入字符处理及分析方法。3熟悉交互式程序编写特点及方法。二、实验内容题目1:屏幕显示计算机提问:Do you like this book ?若用户回答N,计算机回答:You may go to the next store.若用户回答Y,计算机回答:I think you will buy it.题目2:屏幕显示计算机提问:Would you like tea or coffee?用户用键盘输入回答,并显示出来。三、实验报告1实验用源程序。2实验方法及结果分析。3实验心得体会。实验五 数制转换实验一、实验目的1进一步掌握DEBUG和汇编程序编写调试方法。2学会调试循环程序和子程序的方法。二、实验内容将8位BCD码 35 26 38 74(高位数据存放低地址,低位数据存放高地址),转换成十六进制数,存放在指定存储单元中。地址数据BCD码2000:000035H2000:000126H2000:000238H2000:000374H十六进制码2000:0004 2000:0007三、实验报告1实验用源程序。2实验方法及结果分析。3实验心得体会。实验六 数据排序实验一、实验目的1掌握比较数据大小的方法。2掌握数据排序,插入数据的方法。3掌握显示某一数据区数据的方法。二、实验内容题目1:键盘输入十个十六进制字节数据,存入给定的存储单元中,用冒泡排序法将数据按从大到小的顺序排列好,在屏幕上显示出来。题目2:已知数据为:41H, 70H, 03H, 53H, 88H, 16H, 8EH, 3FH用冒泡排序法将数据按从小到大的顺序排列好,再由键盘键入75H,将它插入这组数据中,并保持从小到大的顺序不变。将插入数据后的数组在屏幕上显示出来。三、实验报告内容1实验用源程序。2实验方法及结果分析。3实验心得体会。附录:二、实验内容注:以下题目中数据按低地址存放低位数据,高地址存放高位数据。题目1:两个无符号数相加,将结果数存入指定地址单元。被加数,加数及和存放地址及数据如下:地址数据被加数2000:00009FH 2000:00016BH加数2000:00025CH 2000:000342H和 2000:0004 2000:0006题目2:两个无符号数相减,将差存入指定地址单元。被减数,减数及差的存放地址及数据如下:地址数据被减数2000:01008CH 2000:010142H减数2000:010292H 2000:01035AH差2000:0104 2000:0105题目3:两个无符号数相乘,将积存入指定地址单元。被乘数,乘数及积存放的地址及数据如下:地址数据被乘数2000:100056H 2000:10012CH乘数2000:10023AH 2000:10031CH积2000:1004 2000:1007题目4:两个无符号数相除,将商及余数存入指定的地址单元。被除数,除数,商及余数存放的地址及数据如下:地址数据被除数2000:02002AH 2000:02013BH 2000:02024CH 2000:02035DH除数 2000:02047CH 2000:02055DH商 2000:0206 2000:0207余数 2000:0208 2000:0209 参考程序一 (1) 不带进位的加法程序输入A命令-A 2000:0000输入程序 -A 2000:0000 按回车后显示地址 然后输入源程序2000:0000 MOV AX,20002000:0003 MOV DS,AXMOV BX,0000 依次给出下面的地址MOV AX,6B9FMOV BX,AXMOV BX,0002MOV AX,425CMOV BX,AXMOV AX,0000MOV BX,0002ADD AX,BXMOV 0004,AXMOV AX,00ADC AX,0MOV 0006,AL2000:012A HLT 接下来运行程序-G=2000:0100(起始地址),2000:012B(末地址) 按回车后 检查以下单元内容-D 2000:0000回车 显示单元内容为运算结果-R 检查寄存器内容运行-G=2000:000,2000:012B(程序末地址)注意输入等号-D 0000:0008 显示单元内容为运算结果参考程序一 (2) 带进位的加法程序-A 2000:0000 按回车后显示地址 然后输入源程序2000:0000 MOV AX,20002000:0003 MOV DS,AXMOV BX,0000 依次给出下面的地址MOV AX,6B9FMOV BX,AXMOV BX,0002MOV AX,A25CMOV BX,AXMOV AX,0000MOV BX,0002ADD AX,BXMOV 0004,AXMOV AX,00ADC AX,0MOV 0006,AL2000:012A HLT-G=2000:0100,2000:012B 回车后 检查以下单元内容-D 2000:0000回车 显示单元内容为运算结果对上述程序段可以汇编 汇编命令U-U 0100 012B 给出程序的段内起始地址和末地址 中间无符号参考程序二 减法指令的应用MOV AX,2000MOV DS,AXMOV BX,0100MOV AX,428CMOV BX,AXMOV BX,0102MOV AX,5A92MOV BX,AXMOV AX,0100MOV BX,0102SUB AX,BXMOV 0104,AXHLT也要考虑借位的问题 参考程序 三 乘法指令MOV AX,2000MOV DS,AXMOV BX,1000MOV AX,2C56MOV BX,AXMOV BX,1002MOV AX,1C3AMOV BX,AXMOV AX,1000MOV BX,1002MUL BXMOV 1004,AXMOV 1006,DXHLT 参考程序四 除法指令MOV AX,2000MOV DS,AXMOV BX,0200MOV AX,3B2AMOV BX,AXMOV BX,0202MOV AX,5D4CMOV BX,AXMOV BX,0204MOV AX, 5D7CMOV BX,AXMOV AX,0200MOV DX,0202MOV CX,0204DIV CXMOV 0206,AXMOV 0208,DXHLT注明:如果某一条指令输错了 可以用A命令重新给出指令所占用的地址,然后重新输入指令,例如:2000:0112 MOV 2010,2020 错误 修改-A 2000:0112 回车 重新输入正确的指令2000:0112 MOV AX,2020 用新的指令覆盖 原来的指令4。模仿上述例题1,完成两个BCD码相加程序. 88+32= 8877+2255=专心-专注-专业