《微机原理实验debug调试.docx》由会员分享,可在线阅读,更多相关《微机原理实验debug调试.docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、汇编语言调试程序DEBUG的练习一一、 练习目的1、学习使用DEBUG程序的各种命令。2、利用DEBUG学习8086指令系统。二、 练习任务1、参照说明,掌握DEBUG程序的各种命令,重点是命令R,D,A,U,T,P,G命令的使用。用命令A汇编下列指令,判断指令正误并说明原因。1).ROR AX,8;错误,因为ROR指令的源操作数只能是数字1或是CL。2).LEA DI,AX;错误,因为LEA指令的目的操作数不能是DI。3).MOV DS,2010;错误,因为段寄存器和立即数不能在MOV指令间传。4).PUSH AL;错误,因为PUSH指令的目的操作数只能是通用寄存器或是内存。5).OUT 9
2、00,AL;错误,因为900已经超过了8位二进制数的范围。6).MOV BX,0;错误,因为内存和立即数之间的类型没有确定。 2、练习使用汇编命令1)利用加法指令求3+52)利用乘法指令求3*53)利用算术运算指令求3的补码4)学习使用逻辑运算指令。求5和17相与、相或的结果。5)学习数据传送指令三、设备 PC机一台四、练习步骤 1、实现3加5: 2、实现3*5: 3、实现求3的补码: 4、实现5和17相与:5、传送指令(独立练习) 1)用A命令在内存100H处键入下列内容:MOVAX,1234MOVBX,5678XCHGAX,BXMOVAH,35MOVAL,48MOVDX,75ABXCHGA
3、X,DX 2)用U命令检查键入的程序并记录,特别注意左边的机器码。 3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并 注意标志位有无变化。说明:下面所有操作均在DOS状态下进行。DEBUG.EXE是DOS操作系统提供的一个调试汇编语言程序的工具程序。其主要功能为:1.可动态调试汇编语言程序;2.可检查或修改CPU各寄存器、标志及内存单元的内容;3.可输入汇编指令到指定的内存;4.可把要调试的程序(通常以可执行文件形式存储在磁盘上)调入到内存中,控制CPU按单步、设置断点等方式执行程序,检查程序运行过程中的中间结果,以便寻找程序出错的原因。一、进入DEBUGC:M
4、ASMDEBUG二、常用DEBUG 命令1、 DEBUG命令概述(1) 特点A. 除命令RF外,DEBUG命令本身均为单字符,后面跟一个或多个参数,有些命令不给参数也能运行,如下表中的参数,这种情况下用默认值作为参数;B. DEBUG下输入和显示的数均为十六进制数,故数字后不可加后缀H,O,B等,否则认为命令错;C. 命令和参数不区分大小写;分类命令格式功能简介读写寄存器R显示所有寄存器内容R 寄存器名显示和修改指定寄存器内容RF显示和修改FR的内容汇编和反汇编A内存地址从指定地址开始汇编指令U内存块对指定内存块进行反汇编执行指令T=内存地址条数单步或多步执行指令P=内存地址条数单步或多步执行
5、指令G=内存地址连续执行指令G=内存地址 断点地址设断点执行程序读写内存D内存块显示指定内存块内容E 内存地址 字符或数值串修改指定内存内容F 内存块 字符或数值串填充指定内存块S 内存块 字符串或数值在指定内存块中查找串M 内存块1 内存块2的首地址复制内存块内容C内存块1 内存块2的首地址比较两个指定内存块退出DEBUGQ退出DEBUG,返回DOSDEBUG主要命令一览表(2) 常用参数含义A、 内存地址内存地址表示一个内存区域的起始地址,由段地址和偏移地址两部分组成。段地址可用一个1至4位的十六进制数表示,也可用某个段寄存器表示,偏移地址只能用1至4位的十六进制数表示。段地址和偏移地址之
6、间必须用冒号分隔。例 300:800 表示300:800H的内存地址 CS:100 表示以CS的内容为段地址,偏移地址为100H的内存地址B、 内存块 内存块表示一个内存区域,有两种表示方法:一种是用首地址和末地址表示,其中首地址用前面介绍的内存地址表示法,而末地址只用偏移地址表示,其段地址默认为首地址的段值,末地址的偏移地址应比首地址的偏移地址大。另一种是用首地址和长度表示,其中长度由字符L引出。内存块的最大值是64K。命令D默认的长度为80H个字节,命令U默认的长度为20H个字节。例 下面两种表示法均表示DS:200HDS:24FH的内存块DS:200 24FDS:200 L50例 下面两
7、种表示法均表示3000H:5100H3000H:51FFH的内存块3000:5100 51FF3000:5100 L100C、 字符串参数一般用单引号给出例:-F DS:1000 Please Input:D、 数值参数为一个字节的十六进制数。多个数值参数之间必须用分隔符分隔。 例:-E DS:2000 12 34 56 78 902、 常用DEBUG命令介绍(1) 显示、修改寄存器内容A、 显示所有寄存器内容格式:-R功能:以十六进制形式显示CPU内部各寄存器的值;以符号形式显示标志寄存器各标志位(TF除外);并将CS:IP所指向的内存内容反汇编成一条指令,可视为将要执行的指令。标志名称标志
8、为1标志为0溢出标志(OF)(overflow flag)OVNV方向标志(DF)(direction flag)DNUP中断标志(IF)(interrupt flag)EIDI符号标志(SF)(sign flag)NGPL零标志(ZF)(zero flag)ZRNZ辅助标志(AF)(auxiliary carru flag)ACNA奇偶标志(PF)(parity flag)PEPO进位标志(CF)(carry flag)CYNC标志位的符号表示例 进入DEBUG后,查看各寄存器的值,并记录当前CS和IP的值。-RAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE
9、BP=0000SI=0000 DI=0000DS=1270 ES=1270 SS=1270 CS=1270 IP=0100 NV UP EI PL NZNA PO NC1270:0100 0409 ADD AL,09从显示可知,CS=1270H,IP=0100H由于所装的系统不同,可用内存会有所不同,应记录自己系统进入DEBUG后的CS和IP值。B、 修改寄存器格式:-R 寄存器名功能:DEBUG首先显示指定寄存器的当前值,并在下一行首给出提示符“:”,等待用户输入新值。若直接回车相当于不修改寄存器的值。例 R DS1270:12A3DS的内容由原来的1270H修改为12A3H。(2) 汇编、
10、反汇编指令A、 汇编命令A格式:-A 内存地址功能:先显示汇编的内存地址,等待用户输入一条助记符指令。用户输入指令并回车后,DEBUG将把这条指令对应的机器码顺序存放在指定的内存单元中,并提示下一地址,等待用户继续输入下一条指令。 若直接回车,则退出A命令。 若输入指令有误,则显示出错信息,仍然提示当前的汇编地址,用户可重新输入指令。-A 1270:1001270:0100 MOV AH,21270:0102 MOV DL,aerror1270:0102 MOV DL,611270:0104 INT 211270:0106 INT 201270:0108B、 反汇编指令U格式1:-U 内存地址
11、格式2:-U 内存块功能:格式1从指定地址处开始将20H个字节的目标代码转换成汇编指令形式,缺省内存地址时,从当前地址CS:IP开始。格式2将指定范围的内存单元中的目标代码转换成汇编指令。例 反汇编从1270:100开始长度为20H个字节的内存单元内容。-U 1270:1001270:0100 B402 MOV AH,021270:0102 B261 MOV DL,61(3) 显示、修改内存内容A、 显示命令D格式1:D 内存地址格式2:D 内存块功能:格式1从起始地址开始按十六进制显示80H个单元的内容,每行16个单元,共8行,每行右边显示16个单元的ASCII码,不可显示的ASCII码则显
12、示“ ”。格式2显示指定范围内的存储单元的内容。若地址缺省,则按格式1显示。例如 -D 200 ;表示从DS:0200H开始显示128个单元内容 -D 100 120 ;表示显示DS:1000DS:0120单元的内容例:-D 12AF:100 L3012AF:0100 41 42 43 44 45 00ABCDE.W.12AF:011012AF:0120B、 修改命令E格式1:-E 内存地址 字符或数值串格式2:-E 内存地址功能:对于格式1,用命令中的字符串或数字修改指定的内存单元。对于格式2,先给出命令中指定内存单元的内容,并给出提示符“ ”,可在其后输入要修改的值,若直接按空格则不修改该
13、单元内容,而接着提示下一单元的内容,若直接回车表示结束E命令。例 用字符串HELLO对应的ASCII码修改从DS:1000H开始的5个内存单元。-E DS:1000 HELLO例 用数值12H,34H,56H,78H,90H,FAH 修改从12FA:100H开始的6个单元。-E 12FA:10012FA:0100 41.12 42.34 43.56 44.78 45.90 00.FA 57C、 填充命令F格式:-F 内存块 字符或数值串功能:用命令中指定的字符或数值串填入指定的内存块,当指定的字符或数值串的总字节数小于指定的内存块,则在指定的内存块重复输入。例 将字符串HELLO WORLD填
14、入DS:2000至2100H的内存块中:-F DS:2000 2100 HELLO WORLDD、 搜索命令S格式:-S 内存块 字符或数据串功能:在指定的内存块内搜索指定的字符或数据串,如找到则显示字符或数据串在内存中的首地址。例:在DS:2000H开始,大小为20H的内存块中查找字符串HELLO WORLD-S DS:2000 L20 HELLO WORLD12A3:200012A3:200CE、 复制命令M格式:-M 内存块1 内存块2的首地址功能:将内存块1的内容复制到内存块2,内存块1的内容不变。例 将2000:100H开始,大小为20H的内存块复制到DS:200H-M 2000:1
15、00 L20 DS:200F、 比较命令C格式:-C 内存块1 内存块2的首地址功能:顺序比较两内存块各单元的内容,如两个内存块内容相同,则不显示任何信息,直接返回DEBUG状态;如有不同,则将各自的地址和内容显示出来。例 比较DS:200H和2000H:100H开始,大小为20H的两内存块。-C DS:200 L20 2000:100(5)执行程序A、 单步执行格式:-T=内存地址-P=内存地址功能:用命令中内存地址的段地址和偏移地址修改CS和IP,然后执行由CS:IP指向的内存单元处的一条指令,显示各寄存器的值,并反汇编下一条指令,返回DEBUG状态。若命令中不用“=”给出执行的首地址,则从当前CS:IP指向的指令的命令开始执行。例 执行1270:100处的指令MOV AH,2-T=1270:100AX=0200 BX=0000 DS=12A3 ES=1270 1270:0102 B261 MOV DL,61B、 连续执行格式:-G=内存地址功能:从命令给出的内存地址开始执行指令,直到执行完能控制返回DEBUG。例 -G=1270H:100Program terminated normallyC、 断点执行格式:-G=内存地址 断点地址功能:程序从内存地址开始执行,到断点地址停下来,断点地址通常是某一条指令的起始地址。(4) 返回DOS格式:-Q