1、第五章 8086指令系统,调试软件的使用,上机过程和DEBUG的使用,上机过程: 编辑源文件:必须以.asm为扩展名; 汇编成目标代码; 连接成可执行文件; 运行或用DEBUG调试。 步骤: 1、编辑源程序:(设文件名:FILE.ASM) 2、汇编成目标代码:,上机过程和DEBUG的使用,C:masmmasm file.asmMicrosoft (R) Macro Assembler Version 5.00 Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.Object filename file.OBJ:So
2、urce listing NUL.LST:fileCross-reference NUL.CRF:50992 + 419264 Bytes symbol space free0 Warning Errors0 Severe Errors 若有错误,则根据提示的行号及类型回步骤1修改,上机过程和DEBUG的使用,3、连接成可执行文件 C:masmlink file(.obj) Microsoft (R) Overlay Linker Version 3.60,Copyright (C) Microsoft Corp 1983-1987. All rights reserved.RUN Filen
3、ame:file.exe若有错误,则根据提示的行号及类型回步骤1修改,上机过程和DEBUG的使用,4、调试程序 Cmasmdebug/? Runs Debug, a program testing and editing tool. 5、DEBUG程序的使用 启动进入DEBUG DEBUG drive:pathfilename testfile-parametersdrive:pathfilename Specifies the file you want to test.testfile-parameters Specifies command-line information requir
4、ed by the file you want to test.,上机过程和DEBUG的使用,DEBUG命令集:(实际使用演示) -? assemble A address ;汇编 compare C range address ;比较 dump D range ;显示内存 enter E address list ;数据输入 fill F range list ;内存填充 go G =address addresses;运行程序 hex H value1 value2(求两数的和、差) input I port ;输入 load L address drive firstsector num
5、ber move M range address ;数据移动 name N pathname arglist ;命名,上机过程和DEBUG的使用,output O port byte ;输出 proceed P =address number ;跳过运行 quit Q ;退出 register R register ;寄存器查看与修改 search S range list ;搜索 trace T =address value ;跟踪执行 unassemble U range ;反汇编 write W address drive firstsector number allocate expa
6、nded memory XA #pages deallocate expanded memory XD handle map expanded memory pages XM Lpage Ppage handle display expanded memory status XS,上机过程和DEBUG的使用,常用命令 unassemble U range assemble A address register R register dump D range enter E address list go G =address addresses trace T =address value p
7、roceed P =address number quit Q,上机过程和DEBUG的使用, 显示内存命令 D range 可用形式: D:显示当前地址开始的8行16字节内存的内容 D DS:0 :从数据段偏移地址为0处开始显示8行 D SS:5 :从堆栈段偏移地址为5处开始显示 D CS:0 :从代码段偏移地址为0处开始显示 D0100 :从数据段偏移地址0100处开始显示 注意当前段是哪一个段,以便确定所显示的内容是否和所需的一致。,上机过程和DEBUG的使用, 修改内存命令 E address list 可以从指定地址开始修改内存的内容;要修改的单元数和内容由list决定,如:E 010
8、0 AA BB CC将从0100H开始的三个单元内容修改为AA、BB、CC 这种方式可批量输入数据到内存,上机过程和DEBUG的使用,也可只输入地址,不输入list,而是在命令执行过程中直接输入,输入一个数据,按空格就到下个单元;直接按空格可跳过某个单元,不予修改,回车结束输入过程。如:E 0100136C:0100 AA.11 BB. CC.22,上机过程和DEBUG的使用,显示或修改寄存器命令 R register 只输入R命令,仅显示所有寄存器的值和除了TF以外的所有标志的值; R 寄存器名:可用来显示和修改一个寄存器的内容。如:R AX 可显示和修改AX的值。 8个标志位的值是用符号来
9、表示:OF DF IF SF ZF AF PF CF为1:OV DN EI NG ZR AC PE CY为0:NV UP DI PL NZ NA PO NC,上机过程和DEBUG的使用,反汇编命令 U range 从当前地址或指定地址开始反汇编;range是可选项,若不指定range,则从当前地址(CS:IP)开始反汇编,长度约32字节; range可以只指定开始反汇编的地址,反汇编的长度约32字节;range也可指定反汇编的范围,指出反汇编的起止地址,或指出反汇编的长度,如:U 0100 0120 或 U 0100 L21,上机过程和DEBUG的使用,汇编命令 A address 可用来在D
10、EBUG环境下输入指令或小程序段,进行试验;在DEBUG环境下,从当前地址或指定地址开始输入指令;按回车键结束A命令,回到DEBUG的提示符; 需要结合运行命令(T、G等),才能得到指令或程序段的结果。,上机过程和DEBUG的使用,运行程序命令 G =addr1 addr2 从指定地址addr1或当前CS:IP (无addr1)开始执行程序;如果程序能正常结束,G命令也能正常结束;如对程序是否能正常结束没有把握,可指定程序的结束地址addr2;在程序有分支而有多个结束点时,要列出多个结束地址,由程序来决定,到哪个地址停止,如:G=0100 0200 0300 从100开始,到200或300停止
11、,上机过程和DEBUG的使用,程序调试命令 T =addr value 如使用T=addr格式,则从指定地址addr开始单步执行指令;如使用T=address value格式,则从指定地址开始执行value条指令后暂停,显示各寄存器的值;如使用T格式,则从当前的程序地址CS:IP开始执行一条指令 对于CALL指令,将进入子程序,继续跟踪(即跟踪进入)。,上机过程和DEBUG的使用,过程调试命令 P =address number 其功能和用法相似于T命令; 只有一点不同:P命令在遇到CALL指令时,不进入子程序跟踪,而将CALL指令当作一句指令来执行。在遇到INT 21H这样的系统调用指令时,
12、应该用P命令来跟踪调试。,程序一般结构 NAME 模块名 EQU 常数定义 p1 endp 宏、结构、记录类型定义 p2 proc near|far EXTRN 引用外部符号说明 . PUBLIC 公用符号说明 p2 endp 数据段名 SEGMENT p3 proc . . 数据段名 ENDS p3 endp 栈段名 SEGMENT PARA STACK ; 代码段名 ends栈空间定义 end p1 栈段名 ENDS 代码段名 SEGMENT 程序至少要有一个代码段ASSUME语句 P1 proc far|near,CODE VIEW 调试软件的使用,汇编程序编写步骤: 1、用文本编辑器如
13、TC、TP集成软件,EDIT等编辑源程序文件,并以“文件名.ASM”(.ASM汇编源程序文件扩展名)存盘。 2、汇编:MASM 源程序文件名,(默认.asm文件) 若有错误信息提示,按顺序行号和错误性质回1步修改源程序;汇编通过,会产生.obj的同名文件。 3连接:LINK 文件名, (默认.obj文件) 若有错误信息提示,按顺序行号和错误性质回1步修改源程序;连接通过,会产生.exe的同名可执行文件。,CODE VIEW 调试软件的使用,4、调试:cv 文件名 5、Codeview调试软件使用 例1设字变量X是有符号数,用Y(字节)变量作X的标志x0 y=+ 当 x=0 y=0x0 y=-,
14、example1da segmentx dw -69y db ? da endsms segment stackdw 16 dup(?) ms endsmc segmentassume cs:mc,ds:daassume es:da,ss:msp1 proc far Bg: push dssub ax,axpush ax,mov ax,damov ds,axmov es,ax cmp x,0jz zerojs negtmov y,+jmp short stop1zero: mov y,0jmp short stop1negt: mov y,-stop1: retp1 endpmc endsen
15、d Bg,CV调试程序的主要用法:1、打开文件:CV 文件名2、打开菜单:ALT+F(V、R、O)3、打开内存窗口:VIEW|MEMORY4、关闭内存窗口:用F6切换到当前窗口上,用VIEW|CLOSE5、打开与关闭寄存器窗口: VIEW|REGISTER,CODE VIEW 调试软件的使用,6、单步运行程序:F10-STEP(循环结构仅作为一步,相当于STEP OVER),F8TRACE(一条一条跟踪执行,相当于STEP IN)7、连续执行:F5GO8、程序复位:RUN|RESTART9、调试窗口与输出窗口切换:F410、断点设置与清除:光标移到指定行,按F9设置,重按清除,CODE VIEW 调试软件的使用,CodeView的窗口介面 当前可见的有:菜单行;source1源程序窗口;memory1的内存窗口;command的命令窗口;F快捷键;最大化-还原按钮,关闭按钮,CodeView的窗口介面 可以用View菜单项添加新窗口,如Register寄存器窗口。,CodeView的窗口介面 用View菜单项添加的Register寄存器窗口新窗口。,CodeView的窗口介面 Run菜单。,