文档库 最新最全的文档下载
当前位置:文档库 › 实验一DEBUG的使用

实验一DEBUG的使用

实验一DEBUG的使用
实验一DEBUG的使用

实验一DEBUG的使用

实验目的:

1.学习使用DEBUG程序的各种命令。

2.掌握8088/86指令系统---算数指令。

3.掌握用DEBUG调试自编程序的方法。

4.掌握8088/8086 CPU寄存器的用途和存储器组织及它们之间的关系。

5.掌握内存操作数及寻址方法。

6.掌握汇编语言伪操作:BYTE PTR,WORD PTR。

内容及步骤:

一、DEBUG 命令使用:

1、敲 DEBUG 进入 DEBUG 环境,显示提示符 '_ '。

2、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。

3、用命令 E100 30 31 32 …… 3F 将30H~3FH写入地址为100H开始的内存单元中,

再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?

4、用命令 F100 10F 'A' 将'A'的ASCII码填入内存,用D命令查看结果。

5、用命令 F110 11F 41 将41H 填入内存,用D命令观察结果并比较。

6、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内

容。

7、用R命令将AX,BX内容改写为1234H及5678H。

8、用H命令检查下列各组16进制数加减结果并和你的手算结果比较:

(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH

二、8088常用指令练习

1、传送指令

1)用A命令在内存100H处键入下列内容:

MOV AX,1234

MOV BX,5678

XCHG AX,BX

MOV AH,34

MOV AL,56

MOV CX,75AB

XCHG AX,CX

2)用U命令检查键入的程序,特别注意左边的机器码。

3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。

2、加减法指令:

1)用A命令在内存200H处键入下列内容:

MOV AH,34

MOV AL,2E

ADD AL,AH

SUB AL,78

MOV CX,1234

MOV DX,5678

ADD CX,DX

SUB CX,AX

SUB CX,CX

2)用U命令检查键入的程序及对应的机器码。

3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。

思考题:

这次运行还是打入T,行不行?如何单步运行上述小程序?用R命令检查一下IP的内容。注意T命令与IP的关系。

3、带进位加减法:

1)用A命令在内存300H处键入下列内容,并用U命令检查:

MOV AH,12

MOV AL,89

MOV CH,56

MOV CL,98

ADD AL,CL

ADC AH,CH

MOV DH,A7

MOV DL,58

SUB DL,7F

SBB DH,34

2)用T命令逐条运行这些指令,检查并记录有寄存器及CF内容。

3)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运行之。

4、BCD码加减法

1)内容:

MOV AL,58

ADD AL,25

DAA

2)要求:用A 命令键入,U命令检查,T命令逐条运行并记录有关寄存器及AF内容。

三、内存操作数及各种寻址方式使用:

1)用A命令在内存400H处键入下列内容,并用U命令检查:

MOV AX,1234

MOV [1000],AX

MOV BX,1002

MOV BYTE PTR[BX],20

MOV DL,39

INC BX

MOV [BX],DL

DEC DL

MOV SI,3

MOV [BX+SI],DL

MOV [BX+SI+1],DL

MOV WORD PTR[BX+SI+2],2846

2)用T命令逐条运行这些指令,每运行一条有关内存操作数的指令,要用D命令检查并记

录有关内存单元的内容并注明是什么寻址方式。

注意:D命令显示结果中右边的ASCII字符及双字节数存放法。

思考题: 有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。

四、DEBUG下汇编运行程序方法

用A命令汇编程序,编程完成将DS:1000开始的10个字节的内存单元的内容相加,并把相加结果存放在DS:200A 内存单元中,用DEBUG调试运行该程序,并察看运行结果。

内容:

MOV CX,0AH

MOV AL,0

MOV BX,1000

LL: ADD AL,[BX]

INC BX

DEC CX

JNZ LL

MOV [BX],AL

INT 3

步骤:

1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LL的实际地址,在键入

JNZ指令时LL用实际地址值代替。

2)用U命令检查键入的程序及对应的机器码。

3)用E1000 01 02 03 04 05 06 07 08 09 0A将1000H开始的前10个内存单元的内容修改

为01,02,03,04,05……0A,用D命令查看修改结果。

4)用T命令逐条运行上述小程序指令,检查并记录有关寄存器、存储单元内容及ZF情况。

5)用F2000l0A 02 03 04 05 ……0B 将1000H开始的10 个内存单元的内容修改为02,03,

04,05……0B。用D命令查看修改结果。

6)用G=100 全速运行上述小程序,用D1000 100F 查看运行结果。

思考题:

可否随意在DEBUG提示符“-”后不带参数发出命令G?什么情况下使用命令G时,可不用“=”给出执行的首地址?

实验报告:

1、列出8088常用指令练习部分的逐条运行记录。

2、列出DEBUG下调式运行小程序的运行步骤和运行结果。

3、回答思考题。

附:

DEBUG 使用:

1、打 DEBUG 进入 DEBUG,显示提示苻 '_ '。

2、退出DEBUG命令:Q

3、显示内存命令:D 起始地址结束地址

4、修改内存命令:E 起始地址,连续修改打空格键。打回车键退出E命令。

5、检查寄存器命令:R

标志位显示 1 0

CF CY NC

ZF ZR NZ

SF NG PL

AF AC NA

OF OV NV

PF PE PO

DF DN UP

IF EI DI

6、修改寄存器命令:R 寄存器名

7、小汇编命令:A 起始地址,不输入指令打回车键退出A命令。

8、反汇编命令:U 起始地址结束地址

9、文件命名命令:N 盘号:文件名

10、读文件命令:L 内存地址

11、写文件命令:W 内存地址

10、读扇区命令:L 内存地址盘号(0--A:,1--B:) 扇区号扇区数

11、写扇区命令:W 内存地址盘号扇区号扇区数

12、运行命令:G=起始地址结束(断点)地址

13、单步命令:T=起始地址运行指令数,进入子程序内部。

14、单步命令:P=起始地址运行指令数,不进入子程序内部。

15、内存搬家命令:M 起始地址结束地址目的地址

实验二数码转换程序

实验目的:

1、掌握二进制和十进制数转换程序的编制和调试。

2、掌握批处理文件的编制及使用。

3、熟悉双字节乘法的编程方法。

实验内容及步骤:

一、数码转换程序

1、将一个十六位二进制数转换成十六进制数显示。

CODE SEGMENT

ASSUME CS:CODE

BEGIN: MOV BX,1011000101010111B

MOV CH,4

MOV CL,4

ROLT: ROL BX,CL

MOV DL,BL

AND DL,0FH

CMP DL,9

JLE L

ADD DL,7

L: ADD DL,30H

MOV AH,2

INT 21H

DEC CH

JNZ ROTL

MOV DL,’H’

MOV AH,2

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END BEG

进入汇编集成环境,输入、汇编、连接和运行此程序,观察结果。

2、将一个十六位二进制数转换成十进制数并显示输出。

<参考程序>

DATA SEGMENT

BUF0 DW 2768H

BUF1 DB 5 DUP(0)

BUF2 DW 10000,1000,100,10,1

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

BEG: MOV AX,DATA

MOV DS,AX

MOV AX,BUF0

MOV BX,OFFSET BUF1

MOV SI,OFFSET BUF2

MOV CX,5

L: MOV DX,0

DIV WORD PTR[SI]

ADD AL,30H

MOV [BX],AL

INC BX

ADD SI,2

MOV AX,DX

LOOP L

MOV AH,9

MOV DX,OFFSET BUF1

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END BEG

进入汇编集成环境,输入、汇编、连接和运行此程序,观察结果。

二、自动汇编,连接及转换的批处理文件:

1、用EDIT或COPY CON ALK.BAT命令将下列程序输入:

echo off

masm %1;

echo if you donot link,strike Ctrl-Break for quit;and either:

pause

link %1;

del *.obj

echo if the file is .exe,pleas strike Ctrl-Break for quit。and either:

pause

exe2bin %1、exe %1、com

del %1、exe

2、利用ALK.BAK文件汇编连接二个以前通过的源文件(COM型及EXE型)。

三、双字节乘法程序:

<参考程序>

disp macro mess

lea dx,mess

mov ah,9

endm

stack segment stack

db 256 dup(0)

stack ends

data segment

buf db 7

db ?

db 15 dup(?)

messa db 'pleas input number A ! :$'

messb db 0dh,0ah,'pleas input number B ! :$' linefd db 0dh,0ah,'$'

bcd dd 1000000000,100000000,10000000

dd 1000000,100000,10000,1000

dd 100,10,1

data ends

code segment

assumecs: code,ds:data,ss:stack

main proc far

push ds

xor bx,bx

push bx

mov ax,data

mov ds,ax

disp messa

call get

push bx

disp messb

call get

disp linefd

pop ax

mul bx

mov cx,10

lea si,bcd

lea di,buf

lop: call binec

loop lop

mov byte ptr[di],'$'

disp buf

ret

main endp

get proc

lea dx,buf

mov ah,0ah

lea si,buf+1

xor bx,bx

mov ah,bh

mov cl,[si]

next: inc si

add bx,bx

mov dx,bx

add bx,bx

add bx,bx

add bx,dx

mov al,[si]

and al,0fh

add bx,ax

dec cl

jne next

ret

get endp

binec proc

mov bl,0

again: sub ax,word ptr[si]

sbb dx,word ptr[si+2]

inc bl

jnc again

add ax,word ptr[si]

adc dx,word ptr[si+2]

add bl,2fh

mov [di],bl

inc di

add si,4

ret

binec endp

code ends

end main

步骤:

1、输入,汇编并连接此程序。

2、在DOS下运行此程序,根据提示输入二个乘数,检查并记录结果。

思考题: 本程序的输入范围是多少?若超过范围,会产生什么现象?试一试!

四、根据上题,按下列要求选做一个修改程序:

1、带符号数16位乘法。

2、无符号数16位乘法,输入超过范围时能告警并要求重输。

实验报告:

1、列出实验记录。

2、列出调试通过程序清单并加注释。

3、回答思考题.

4、写出心得体会。

实验四子程序

实验目的:

1、掌握一般子程序的调用和返回,熟悉定义过程的伪指令。

2、掌握利用堆栈传递参数的子程序调用方法。

3、掌握子程序递归调用方法。

实验内容及步骤:

一、利用堆栈传递参数的子程序调用。(求累加和)

<参考程序>

stack segment stack

db 256 dup(0)

stack ends

data segment

ary1 db 1,2,3,4,5,6,7,8,9,10

count1 equ $-ary1

sum1 dw ?

ary2 db 10,11,12,13,14,15,16,17,18

count2 equ $-ary2

sum2 dw ?

data ends

main segment

assume cs:main,ds:data,ss:stack

start proc far

push ds ;PSP段基址压栈

xor ax,ax

push ax ;双字节0压栈

mov ax,data

mov ds,ax

mov ax,count1

push ax

lea ax,ary1

push ax

call far ptr sum

mov ax,count2

push ax

lea ax,ary2

push ax

call far ptr sum

ret ;返回DOS

start endp

main ends

proce segment

assume cs: proce

sum proc far

mov bp,sp

mov cx,[bp+6]

mov bx,[bp+4]

xor ax,ax

adn: add al,[bx]

adc ah,0

inc bx

loop adn

mov [bx],ax

ret 4

sum endp

proce ends

end start

步骤:

1、输入,汇编并将此程序连接成EXE文件。

2、用DEBUG的断点命令和T命令运行此程序,观察并记录每次过程调用及进出栈指令前后(带';'的语句)的SP和堆栈内容。

3、记录最后结果:SUM1,SUM2的段及偏移地址和它们的内容。

思考题:

1、sum子程序结尾为什么要用 ret 4返回?

2、什么是程序段前缀PSP?

二、完成一个四位十进制数相加的程序设计,形式为:2345+7869=?

要求:1 设计一个子程序,完成从键盘输入一个四位十进制数的操作。

2 设计一个子程序,完成将缓冲区数送屏幕显示功能。

3 设计一个子程序,完成两个数相加操作。

三、子程序递归调用(求阶乘)。

<参考程序>

stack segment stack

db 100h dup(?)

stack ends

data segment

resul dw ?

data ends

code segment

main proc far

assume cs:code,ds:data,ss:stack

start: push ds

sub ax,ax

push ax

mov ax,data mov ds,ax mov ax,5 call fact mov resul,ax ret fact

proc and al,al jne iia mov al,1 ret iia:

push ax dec al call fact x2:

pop cx mul cl ret fact

endp main

endp code ends

end start

步骤:

1、将程序输入,汇编并连接成EXE 文件。

2、用DEBUG 的断点和T 命令检查并记录每层递归嵌套过程的堆栈和AL 内容。

3、修改源程序,将阶乘数 3 改为本程序的最大允许值(是多少?),重新汇编连接之。用 DEBUG 运行并记录RESUL 单元内容。

4、若要在DOS 命令下直接运行并显示阶乘结果(16进制形式),试修改程序并

调试运行。(机动)

四、自编程序:用递归方法编程实现两个正整数M 和N 相乘。

编程说明:

正整数M 和N 相乘可看作如下形式的递归函数:

MULT(M)=?

??>+-=)1()1()1(M N M MULT M N 若设N=15,M=4,则

MULT(4)= MULT(3)+15= MULT(2)+15+15=MULT(1)+15+15+15=15+15+15+15=60=3CH 实验报告:

1、列出实验记录。

2、列出自编程序清单并加注释。

3、回答思考题.

4、写出心得体会。

实验五宏指令及宏调用实验目的:

1、熟悉宏定义的一般结构。

2、掌握宏指令的编写方法和调用方法。

3、能区别宏调用和子程序调用的不同之处。

4、了解LOCAL伪操作的用法。

5、熟悉无参数宏指令和有参数宏指令的定义与调用。

实验内容:

一、无参数宏指令的定义与调用

<参考程序>

CRLF MARCO ;宏定义

MOV AH, 02H

MOV DL, 0DH

INT 21H

MOV AH, 02H

MOV DL, 0AH

INT 21H

ENDM

DATA SEGMENT

STR1 DB ‘PLEASE INPUT STRING1:$’

STR2 DB ‘PLEASE INPUT STRING2:$’

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV CX,10

AGAIN: MOV AH,09H

LEA DX,STR1

INT 21H

CRLF ;宏展开

MOV AH,09H

MOV DX,OFFSET STR2

INT 21H

CRLF ;宏展开

LOOP AGAIN

MOV AH,4CH

INT 21H

CODE ENDS

END START

实验六综合程序设计

实验目的:

掌握系统程序设计的方法,全面巩固所学知识内容,提高实际应用能力和应用水平。实验内容:

题目一、学生成绩管理程序

题目二、员工工资管理程序

实验报告:

1、给出调试通过的程序清单,并附文档说明书。

2、调式中所遇到的问题及解决办法及体会。

实验六综合程序设计

实验目的:

掌握系统程序设计的方法,全面巩固所学知识内容,提高实际应用能力和应用水平。实验内容:

题目一、学生成绩管理程序

题目二、员工工资管理程序

实验报告:

1、给出调试通过的程序清单,并附文档说明书。

2、调式中所遇到的问题及解决办法及体会。

实验一 DEBUG的使用

实验一 DEBUG的使用 实验目的: 1.学习使用DEBUG程序的各种命令。 2.掌握8088/86指令系统---算数指令。 3.掌握用DEBUG调试自编程序的方法。 4.掌握8088/8086 CPU寄存器的用途和存储器组织及它们之间的关系。 5.掌握内存操作数及寻址方法。 6.掌握汇编语言伪操作:BYTE PTR,WORD PTR。 内容及步骤: 一、DEBUG 命令使用: 1、敲 DEBUG 进入 DEBUG 环境,显示提示符 '_ '。 2、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。 3、用命令 E100 30 31 32 …… 3F 将30H~3FH写入地址为100H开始的内存单元中, 再用D命令观察结果,看键入的16进制数是什么字符的ASCII码? 4、用命令 F100 10F 'A' 将'A'的ASCII码填入内存,用D命令查看结果。 5、用命令 F110 11F 41 将41H 填入内存,用D命令观察结果并比较。 6、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内 容。 7、用R命令将AX,BX内容改写为1234H及5678H。 8、用H命令检查下列各组16进制数加减结果并和你的手算结果比较: (1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH 二、8088常用指令练习 1、传送指令 1)用A命令在内存100H处键入下列内容: MOV AX,1234 MOV BX,5678 XCHG AX,BX MOV AH,34 MOV AL,56 MOV CX,75AB XCHG AX,CX 2)用U命令检查键入的程序,特别注意左边的机器码。 3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。 2、加减法指令: 1)用A命令在内存200H处键入下列内容:

实验一-DEBUG的使用(1)

实验一DEBUG的使用 一、实验目的 熟练掌握DEBUG的常用命令以及使用DEBUG调试程序的一般方法。 二、实验内容 1.熟悉DEBUG的常用命令 通过CMD命令进入DOS方式,运行DEBUG程序,练习DEBUG常用命令(DEBUG 常用命令详细说明见五和六)。 2.使用DEBUG调试程序 (1)用CMD命令进入DOS方式。 (2)运行DEBUG程序。 (3)使用A命令将以下笑脸程序逐行输入。 MOV DL,1 MOV AH,2 INT 21H INT 20H (4)使用T命令逐条指令运行笑脸程序,观察每条指令执行前后相关寄存器的内容变化情况。 (5)使用G命令连续运行笑脸程序,观察程序运行结果。 (6)使用R命令修改寄存器BX和CX的内容为笑脸程序的长度。 (7)使用N命令将笑脸程序命名为https://www.wendangku.net/doc/f211676586.html,。 (8)使用W命令将笑脸程序写到指定磁盘的指定路径目录中。 (9)退出DEBUG,进入笑脸程序所在目录。 (10)运行笑脸程序https://www.wendangku.net/doc/f211676586.html,。观察程序运行结果。 (11)用DEBUG调试已生成的https://www.wendangku.net/doc/f211676586.html,程序。 三、实验要求 认真完成实验每一步骤,详细记录实验过程、现象和结果,及时整理实验报告。

四、实验作业 1.用A命令或E命令将笑脸程序中第1条指令中的立即数修改为46,重复步骤(4)~(10),观察程序运行结果,分析为什么? 如果要将笑脸程序修改为显示别的字符程序,如何修改程序? 2.如果想无限循环显示笑脸,如何修改程序? 3.写出实验体会。 五、DEBUG简介 DEBUG是一种面向汇编语言的动态调试工具,共有19条命令。DEBUG提供了可以跟踪、测试程序的环境和条件,使编程者能对. EXE和.COM文件的执行进行动态跟踪调试,能够较快地查找出文件中的逻辑错误和检查程序的运行结果。此外,也可以在进入DEBUG后直接用小汇编语言(ASM)编写、调试一些小程序。 Microsoft DEBUG命令的具有以下共性: (1)DEBUG提示符为“-”。 (2)任何命令都以一个英文字母开头,后面跟一个或多个参数。 (3)命令字母和参数可用大写、小写或混合形式。 (4)命令字母和参数中相邻两个十六进制数之间必须用逗号或空格分开,其它各部分之间有无空格或逗号都可以。 (5)执行任何命令期间都可用Ctrl+Break或Ctrl+C结束命令的执行。 (6)键入命令字母和参数后必须按回车键才能使命令有效。 (7)在执行某命令期间,可按Ctrl + NumLock键暂停显示以便观察。再按任何其它键,则继续显示。 (8)DEBUG检查输入命令的语法错误,即如果输入的命令有错误,将显示错误信息。 (9)在DEBUG程序状态下,控制键和DOS支持的编辑键继续有效。 (10)DEBUG的启动方式有两种: 1)在DOS提示符下键入: DEBUG ADD.EXE (“”表示回车键,下同) 将出现DEBUG状态的提示符“-”,系统这时已处于DEBUG程序的管理下,并把指定的可执行文件ADD.EXE调入内存。此时,用户可在提示符

Debug使用说明

附录DEBUG调试程序的应用 1.直接启动DEBUG程序 如https://www.wendangku.net/doc/f211676586.html,在C盘的根目录下,启动的方法是: C:\>DEBUG _ 这时屏幕上会出现“_”提示符,等待键入DEBUG命令。 2.启动DEBUG程序的同时装入被调试文件 命令格式如下: C:\>DEBUG [d:][PA TH]filename[.EXT] [d:][PATH]是被调试文件所在盘及其路径,filename是被调试文件的文件名,[.EXT]是被调试文件的扩展名。 例如:BCDSUM.EXE可执行文件在A盘,用DEBUG对其进行调试的操作命令如下。 C:\>DEBUG A:\BCDSUN.EXE↙ DOS在调用DEBUG程序后,再由DEBUG把被调试文件装入内存,当被调试文件的扩展名为COM时,装入偏移量为100H的位置,当扩展名为EXE时,装入偏移量为0的位置,并建立程序段前缀PSP,为CPU寄存器设置初始值。 3.退出DEBUG 在DEBUG命令提示符“_”下键入Q命令,即可结束DEBUG的运行,返回DOS操作系统。 4.在DEBUG环境下建立和汇编程序 在DEBUG环境下用户可以直接建立汇编语言源程序,并可以进行编辑修改,还可以进行汇编。 比如,在DEBUG下运行如下程序: MOV DL,33H ;字符3的ASCII码送DL MOV AH,2 ;使用DOS的2号功能调用 INT 21H ;进入功能调用,输出‘3’ INT 20H ;BIOS中断服务,程序正常结束。 该程序运行结果是在显示器上输出一个字符‘3’。如果要输出其它字符,请改变程序中‘33H’为相应字符的ASCII码。其中涉及DOS和BIOS功能调用。因为我们是在DOS的支持下运行汇编语言程序,所以一般情况下,不能轻易使用输入/输出指令直接通过端口输入/输出,而必须使用DOS内部提供的子程序完成输入/输出。 DOS功能调用就是为诸如此类的目的设置的。DOS功能调用要求在进入INT 21H调用前,首先将功能调用号送AH寄存器,并根据功能调用号准备初始数据。也就是说INT 21H 的2号功能调用是输出DL寄存器中的字符。INT 20H是BIOS中断服务,这一软中断用来正常结束程序。

DEBUG的使用方法

DEBUG程序的使用 一、在DOS的提示符下,可如下键入Debug启动调试程序: DEBUG [路径\文件名] [参数1] [参数2] Debug后可以不带文件名,仅运行Debug程序;需要时,再用N和L命令调入被调试程序。命令中可以带有被调试程序的文件名,则运行Debug的同时,还将指定的程序调入主存;参数1/2是被调试程序所需要的参数。 在Debug程序调入后,根据有无被调试程序及其类型相应设置寄存器组的内容,发出Debug的提示符“-”,此时就可用Debug命令来调试程序。 运行Debug程序时,如果不带被调试程序,则所有段寄存器值相等,都指向当前可用的主存段;除SP之外的通用寄存器都设置为0,而SP指示当前堆栈顶在这个段的尾部;IP=0100h;状态标志都是清0状态。 运行Debug程序时,如果带入的被调试程序扩展名不是.EXE,则BX.CX 包含被调试文件大小的字节数(BX为高16位),其他同不带被调试程序的情况。 运行Debug程序时,如果带入的被调试程序扩展名是.EXE,则需要重新定位。此时,CS : IP和SS : SP根据被调试程序确定,分别指向代码段和堆栈段。DS=ES指向当前可用的主存段,BX.CX包含被调试文件大小的字节数(BX为高16位),其他通用寄存器为0,状态标志都是清0状态。 二、DEBUG命令的格式 Debug的命令都是一个字母,后跟一个或多个参数:字母[参数] 命令的使用中注意: ①字母不分大小写; ②只使用16进制数,没有后缀字母; ③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符; ④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行; ⑤命令如果不符合Debug的规则,则将以“error”提示,并用“^”指示错误位置。 许多命令的参数是主存逻辑地址,形式是“段基地址: 偏移地址”。其中,段基地址可以是段寄存器或数值;偏移地址是数值。如果不输入段地址,则采用默认值,可以是缺省段寄存器值。如果没有提供偏移地址,则通常就是当前偏移地址。 对主存操作的命令还支持地址范围这种参数,它的形式是:“开始地址结束地址”(结束地址不能具有段地址),或者是:“开始地址L字节长度”。 三、DEBUG子命令 1、显示命令D D(Dump)命令显示主存单元的内容,它的格式如下(注意分号后的部分用于解释命令功能,不是命令本身): D [地址];显示当前或指定开始地址的主存内容 D [范围];显示指定范围的主存内容 例如,显示当前(接着上一个D命令显示的最后一个地址)主存内容: 左边部分是主存逻辑地址,中间是连续16个字节的主存内容(16进制数,以字节为单位),右边部分是这16个字节内容的ASCII字符显示,不可显示字符用点“.”表示。一个D命令仅显示“8行×16个字节”(80列显示模式)内容。 再如: -d 100 ;显示数据段100h开始的主存单元

DEBUG调试程序的应用实验的报告.doc

电子电气工程学院学生实验报告 专业级 1 班 2 组姓名学号 课程名DEBUG 调试程序的应用指导教师成绩 一,实验预习 实验序号1实验题目DEBUG调试程序的应用预习日期 要求: 1.实验目的; 2,实验原理; 3,画出实验原理图; 4 实验设备; 5,预习内容(该实验完成的内容);6,记录表格设计 一实验目的 1、了解 DEBUG调试程序常用命令的基本格式、主要功能和使用方法。 2、熟悉进入或退出DEBUG调试程序运行界面的步骤。 3、掌握用DEBUG调试程序进行程序编辑、调试、运行、结果检查的基本方法。 4、进一步汇编语言上机环境及基本操作 二实验原理 1,启动 DEBUG程序,在 DEBUG环境下建立和汇编程序2,输入程序并汇编 A 2,_A 100 169C(CS):0100(ip) MOV DL, 33 ;DEBUG默认 16 进制数 169C: 0102 MOV AH,2 ;dos 的 2 号功能调用 169C: 0104 INT 2l ;功能调用 169C: 0106 INT(中断)20 ;中断 169C: 0108 ;回车结束程序的输入 3.运行程序_G=0100(全速运行)得到 3 4,用反汇编命令_U。然后分析该程序的指令:33 的 ascll 的值为 3, MOV 是将原操 作数送到DL 中( DL 为目标操作数)。 5,将机器指令程序送到起始地址为200H 的若干单元 6,执行机器指令程序_G=0200得到 3 7,执行 T 命令,实现单步运行。 8,执行 D 命令查看存储单元的原值。 E 是修改内存, R 显示修改内存命令。 四实验设备 微型计算机一台

debug常见命令使用说明

五、DEBUG调试程序 DEBUG.EXE程序是专门为分析、研制和开发汇编语言程序而设计的一种调试工具,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。它能使程序设计人员或用户触及到机器内部,因此可以说它是80X86CPU的心灵窗口,也是我们学习汇编语言必须掌握的调试工具。 1)DEBUG程序使用 在DOS提示符下键入命令: C>DEBUG [盘符:][路径][文件名.EXE][参数1][参数2] 这时屏幕上出现DEBUG的提示符“-”,表示系统在DEBUG管理之下,此时可以用DEBUG 进行程序调试。若所有选项省略,仅把DEBUG装入内存,可对当前内存中的内容进行调试,或者再用N和L命令,从指定盘上装入要调试的程序;若命令行中有文件名,则DOS把DEBUG 程序调入内存后,再由DEBUG将指定的文件名装入内存。 2)DEBUG的常用命令 (1)汇编命令A 格式:A[起始地址] 功能:将输入源程序的指令汇编成目标代码并从指定地址单元开始存放。若缺省起始地址,则从当前CS:100地址开始存放。A命令按行汇编,主要是用于小段程序的汇编或对目标程序的修改。 (2)反汇编命令U 格式1:U[起始地址] 格式2:U[起始地址][结束地址|字节数] 功能:格式1从指定起始地址处开始将32个字节的目标代码转换成汇编指令形式,缺省起始地址,则从当前地址CS:IP开始。 格式2将指定范围的内存单元中的目标代码转换成汇编指令。 (3)显示、修改寄存器命令R 格式:R[寄存器名] 功能:若给出寄存器名,则显示该寄存器的内容并可进行修改。缺省寄存器名,则按以下格式显示所有寄存器的内容及当前值(不能修改)。 AX=0000 BX=0004 CX=0020 DX=0000 SP=0080 BP=0000 SI=0000 DI=0000 DS=3000 ES=23A0 CS=138E IP=0000 NV UP DI PL NZ NA PO NC 138E:0000 MOV AX,1234 -R AX ;输入命令 AX 0014 ;显示AX的内容 :;供修改,不修改按回车。 若对标志寄存器进行修改,输入:-RF 屏幕显示如下信息,分别表示OF、DF、IF、SF、ZF、AF、PF、CF的状态。 NV UP DI PL NZ NA PO NC 不修改按回车键。要修改需个别输入一个或多个此标志的相反值,再按回车键。R命令只能显示、修改16位寄存器。 (4)显示存储单元命令D 格式1:D[起始地址]

实验一: 调试工具DEBUG的使用

《微型计算机技术实验》 实验一:调试工具DEBUG的使用 一.实验目的 掌握调试工具DEBUG的使用方法,理解汇编指令、存储单元和寄存器等有关概念,能够对简单的汇编语言程序进行调试。 二.实验内容 (1)学习调试工具DEBUG的使用方法,熟悉DEBUG常用命令的功能和用法。 (2)利用DEBUG调试简单的汇编语言程序,体会汇编指令的功能、寄存器的作用、存储单元地址与内容的概念和作用、以及程序的执行过程。 三.实验要求 (1)掌握DEBUG的常用命令和基本的程序调试方法 (2)熟悉和掌握指令系统常用指令的功能和用法,能熟练运用DEBUG调试工具调试简单的程序 四.实验指导 1、DEBUG 命令使用 1)键入 DEBUG 进入 DEBUG 控制状态,显示提示符 '- '。 例如:C:\DEBUG - 2)用命令 F 100 10F 'A' 将'A'的ASCII码填入内存。

(命令格式: F<范围><单元内容表>) 3)用命令 D 100 10F 观察内存中的十六进制码及屏幕右边的ASCII字符。(命令格式: D<地址范围>) 4)用命令 F 110 11F 41 重复上二项实验,观察结果并比较。 5)用命令 E 100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的十六进制数是什么字符的ASCII码? (命令格式: E<地址><批单元内容表>)6)用R命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。 7)用R命令将AX,BX内容改写为1050H及23A8H。 (命令格式: R<寄存器名>) 2、常用指令练习 1)内存操作数及各种寻址方式使用 ①用A命令在内存100H处键入下列内容: (注意:MOV 传送指令,INC加一指令,DEC 减一指令) -A 0100 MOV AX,1234 MOV [1000],AX MOV BX,1002 MOV BYTE PTR[BX],20 MOV DL,39 INC BX

利用DEBUG调试汇编语言程序段

利用DEBUG调试汇编语言程序段一.实验目的 1.熟悉DEBUG有关命令的使用方法; 2.利用DEBUG掌握有关指令的功能; 3.利用DEBUG运行简单的程序段。 二.实验容 1.进入和退出DEBUG程序; 1)开始—运行,输入cmd,点确定进入命令窗口 2)在命令窗口中输入dubug进入debug程序

3)进入debug窗口后,输入q命令退出debug 2.学会DEBUG中的 1)D命令(显示存数据D 段地址:偏移地址) 例1:-D100 ;显示DS段, 0100开始的128个字节容 说明:指定要显示其容的存区域的起始和结束地址,或起始地址和长度。 ①DSEGREG[起始地址] [L 长度] ;显示SEGREG段中(缺省默认为DS), 以[起始地址] (缺省为当前的偏移地址),开始的[L 长度] (缺省默认为128)个字节的容. ② D SEGREG[段地址:偏移地址]

;显示SEGREG段中(缺省默认为DS), [段地址:偏移地址] 开始的[L 长度] (缺省默认为128)个字节容 -D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H) -D DS:100 ;显示DS段, 0100H开始的128个字节容 -D CS:200 ;显示CS段, 0200H开始的128个字节容 -D 200:100 ;显示DS段, 0200:0100H开始的128个字节容 -D 200;显示DS段, 0200H开始的128个字节容 -D 100 L 10 ;显示DS段, 100H开始的100H个字节容 2)E命令(修改指定存) 例1:-E100 41 42 43 44 48 47 46 45 -D 100,L08

实验一-Keil软件的使用及简单程序的调试方法

实验一Keil软件的使用及简单程序的调试方法 一、实验目的 掌握Keil的使用方法和建立一个完整的单片机汇编语言程序的调试过程及方法。 二、实验器材 计算机1台 三、实验内容 1.Keil的使用方法。 2.建立一个单片机汇编语言程序的调试过程及方法 四、实验步骤 1.Keil的使用方法。Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。启动Keil 后的界面如下:

几秒钟后即进入Keil的编辑界面。用户便可建立项目及应用程序。 2.简单程序的调试方法 Keil是通过项目工程来管理汇编程序的。因此在调试程序前必须建立一个工程,工程名称及保存位置由用户来指定,注意每位同学的工程名称用“学号姓名实验*”来命名。 (1)建立一工程 单击Project菜单,在弹出的下拉菜单中选中New Project选项。并在弹出的对话框中确定保存的位置及工程名称。 又弹出一对话框,要求用户选择相应的硬件CPU及相关设置。选择Atmel公司的AT89C51单片机。如下图所示

单击“确定”后在弹出的对话框中行选择“否”即工程建好了,但该工程没有任何语句,需要再建一个程序文件并将其添加到此工程中。 (2)建一文件 单击“File”/“New”命令,则弹出文件的编辑窗口,此时该文件还没有指明其文件名称及保存位置,该文件还没有加载到所建立的工程中。单击“File”/“Save”命令在弹出的对话框中指明文件的类型为.ASM汇编型及文件名后单击“保存”即可进行汇编源文件的编辑。如下图所示。 (3)将文件添加到工程中 单击“T arget 1”前的“+”号则展开后变成“-”号,并右键单击“Source Group 1”在弹出的下拉菜单中执行“Add Files to Group ‘Source Group 1’”命令并弹出对话框在该对话框中的“文件类型”下拉列表中选择“Asm source file”后找到要添加的文件名并选中,单击“Add”即可。

DEBUG使用方法

DEBUG使用方法 格式: DEBUG[[drive:][path]filename[testfile-parameters]] 参数:[drive:][path]filename 指定待调试可执行文件的所在位置及文件名。 testfile-parameters 指定待设计可执行文件需要的命令参数。 相关命令 -A (汇编,Assemble) -C (比较,Compare) -D (卸出,Dump) -E (输入数据,Enter)) -F (填充,Fill) -G (执行,Go) -H (十六进行运算,Hex) -I (读输入口,Input) -L (装入,Load) -M (移动,MOVE) -N (命令,NAME) -O (写输出口,OUTPUT) -P (调试循环程序,PROCEED) -Q (退出,QUIT) -R (寄存器,REGISTER) -S (找寻,SEARCH) -T (跟踪,TRACE) -U (反汇编,UNASSEMBLE) -W (写盘,WRITE) -XA (分配扩充内存,ALLOCATE EM) -XD (释放分配的扩充内存,DEALLOCATE EM) -XM (扩展内存页影像,MAP EXM PAGES) -XS (显示扩充内存状态,DISPLAY EM STATUS)

二、注意事项 不指定调试文件名时DEBUG命令的使用。 使用DEBUG命令时,如果未指定调试文件的所在位置及名子,DEBUG执行时将显示符(-)。这时,用户可输入任何一个DEBUG调试命令。 DEBUG命令 以下为DEBUG使用的调试命令及其简介: ?显示所有的调试命令 A汇编8086/8087/8088汇编语言源程序。 C比较两块内存的内容。 D显示部分内存的内容。 E人指定的地址开始把数据送入内存。 F将指一值填进某一范围的内存。 G运行内存中的程序。 H执行十六进制算术运算。 I从指定输入口输入一道字节值。 L把文件或磁盘扇区内容装入内存。 M拷贝某块内存的内容。 N指定文件名,以便L或W命令读写该文件;指定正调试文件所需的参数。 O发送一字节值至指定输出口。 P执行循环程序,重复字符串指令,软中断,或子程序。 Q结束DEBUG命令执行。 R显示或修改一个或数个寄存器内容。 S在内存指定范围内找寻指定的值。 T执行一条指令,然后显示所有寄存器的内容,所有标志状态,以及下一条要执行的指令(汇编语言格式)。 U反汇编某一范围内的字节,显示其相应汇编语言源语名。 W把正调试文件写入磁盘。 XA分配扩充内存 XD释放分配的扩充内存。 XM作扩充内存页的影像。 XS显示扩充内存的状态。

实验一 RFID设备调试及软件开发_学

实验一RFID读写器调试 学号: 姓名: 一、实验目的 1、学习各类RFID读卡器的使用。 2、掌握RFID读卡器程序设计的方法。 3、理解基于QT的RFID案例程序。 二、实验内容 调试CBT-IOT赛百特物联网实验箱HF高频读卡器,对ISO14443A卡进行识别、数据操作,并分析其通信协议。 调试FR105 HF高频读卡器,对ISO15693、ISO14443A卡进行识别,以及数据操作,并分析其通信协议。 调试FR1200 UHF超高频读卡器,对ISO18000-6C卡进行识别,以及数据操作,并分析其通信协议。 调试基于各种RFID读卡器的QT程序,包括电子钱包、公交卡充值、上班刷卡考勤系统、车流量统计、药品出入库、电子锁控制等应用,分析程序与读卡器之间的串口通信。

三、实验预备知识 1、CBT-IOT实验箱HF高频读写器 CBT- IOT实验箱HF板载模块特点: ●工作频率:13.56MHz ●芯片:MF RC531(高集成非接触读写卡芯片) ●支持ISO/IEC 14443A/B和MIFARE经典协议 ●支持mifare1 S50等多种卡类型 ●最大工作距离:100mm,最高波特率:424kb/s ●支持lCrypto1加密算法并含有安全的非易失性内部密匙存储器 ●处理器 STM8S105高性能8位架构的微控制器,主频24MHz ●通信方式:串口TTL,可直接插接无线通讯模块组网开发,多模块无线组网通讯●电源:DC 5V 串口设置:波特率115200bps,数据位8,停止位1,无校验位 通信协议: SOF Sensor typle Sensor id Cmd id Data Exten Data END 2Byte 1Byte 1Byte 1Byte 6Byte 2Byte 1Byte 说明: SOF:固定为0xEE 0xCC,标志一帧的开始。 Sensor typle:传感器类型,RFID为0xFE。 Sensor id:固定为0x01,为RFID读卡器的编号。 Cmd id:命令ID,0x01为充值,0x02为扣款,0x03为查询。

在Eclipse中使用debug(Eclipse调试常用技巧)

Eclipse调试常用技巧 发表时间:2010-04-06 最后修改:2010-11-26 记得刚刚毕业的时候,自己连断点也不会打,当时还在用JCreate,就连毕业设计也是用System.out找Bug的,想想真的很笨。开始工作后,一个星期过去了,在一个1、2百万行的系统中找Bug,我依然在用System.out,当时最痛苦的就是修改代码,每次找到疑似Bug,就输出一下,然后重启(那时也不知道代码热替换),直到有一天带我的导师发现了这样笨笨的调试Bug,才让我第一次认识了断点,也知道了代码修改完了可以进行热替换,我这个中国教育的半牺牲品才算向美好生活迈进了一小步。 1、条件断点 断点大家都比较熟悉,在Eclipse Java编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。 条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。 在断点处点击鼠标右键,选择最后一个"Breakpoint Properties" 断点的属性界面及各个选项的意思如下图,

2、变量断点 断点不仅能打在语句上,变量也可以接受断点, 上图就是一个变量的打的断点,在变量的值初始化,或是变量值改变时可以停止,当然变量断点上也是可以加条件的,和上面的介绍的条件断点的设置是一样的。 3、方法断点 方法断点就是将断点打在方法的入口处, 方法断点的特别之处在于它可以打在JDK的源码里,由于JDK在编译时去掉了调试信息,所以普通断点是不能打到里面的,但是方法断点却可以,可以通过这种方法查看方法的调用栈。

4、改变变量值 代码停在了断点处,但是传过来的值不正确,如何修改一下变量值保证代码继续走正确的流程,或是说有一个异常分支老是进不去,能不能调试时改一下条件,看一下异常分支代码是否正确? 在Debug视图的Variables小窗口中,我们可以看到mDestJarName变量的值为" F:\Study\eclipsepro\JarDir\jarHelp.jar" 我们可以在变量上右键,选择"Change Value..."在弹出的对话框中修改变量的值, 或是在下面的值查看窗口中修改,保用Ctr+S保存后,变量值就会变成修改后的新值了。 5、重新调试 这种调试的回退不是万能的,只能在当前线程的栈帧中回退,也就说最多只能退回到当前线程的调用的开始处。 回退时,请在需要回退的线程方法上点右键,选择"Drop to Frame"

实验一 DEBUG调试工具的熟悉

实验1 DEBUG的使用及程序调试方法 一、实验目的 通过本实验使学生掌握调试工具DEBUG的使用方法、理解汇编指令、存储单元和寄存器等有关概念,能对简单的汇编语言程序进行调试。 二、实验原理 DEBUG是DOS、WINDOWS都提供的实模式(8086方式)程序的调试工具,在DOS 方式下工作。使用它可以读写、传送、查看CPU各种寄存器中的内容、显示内存单元的内容、设置程序起始执行地址或断点、机器码级跟踪程序的运行。用DEBUG编程简单、方便和直观,可以直接查看程序的执行情况,便于熟悉和理解指令,掌握基本编程技巧。 DEBUG只使用十六进制表示数据(十六进制后面不加H),且对字母的大小写不敏感。 常用到的DEBUG功能: ?用DEBUG的R命令查看、改变CPU寄存器的内容 ?用DEBUG的D命令查看内存中的内容 ?用DEBUG的E命令修改内存中的内容 ?用DEBUG的U命令将内存中的机器指令翻译成汇编指令 ?用DEBUG的T命令执行一条机器指令 ?用DEBUG的A命令以汇编指令的格式在内存中写入一条机器指令 三、实验内容 (1)学习调试工具DEBUG的使用方法,熟悉DEBUG常用命令的功能和用法。 (2)利用DEBUG调试简单的汇编语言程序,体会汇编指令的功能、寄存器的作用、存储单元地址与内容的概念和作用,以及程序的执行。 四、实验方法与步骤 1.DEBUG的进入与退出 DEBUG是在DOS方式下使用的程序。在进入DEBUG前,应先以从 WINDOWS 2000/XP中进入DOS方式(进入的是虚拟8086模式的DOS)。 方法:选择【开始】菜单中的【运行】命令,打开【运行】对话框,在文本框中输入“cmd”后,单击【确定】按钮或按下键盘上的【Enter】键。在命令提示符后输入”debug”后按下键盘上的【Enter】键。 2. 显示寄存器命令 R 功能:用于查看和改变CPU寄存器的内容 格式:R [<寄存器>] 说明:当R命令后面不指定寄存器时,显示所有寄存器的内容 例1-1 显示所有寄存器的内容 -r AX=0200 BX=0000 CX=0000 DX=0041 SP=FFEE BP=0000 SI=0000 DI=0000 DS=138A ES=138A SS=138A CS=138A IP=0100 NV UP EI PL NZ NA PO NC 138A:0100 B241 MOV DL,41 例1-2 修改寄存器的内容 -r ax AX 0200 100 -r AX=0100 BX=0000 CX=0000 DX=0041 SP=FFEE BP=0000 SI=0000 DI=0000

实验一调试程序DEBUG的使用实验报告

南昌理工学院实验报告 二O一二年月日 课程名称:微机原理与接口技术实验名称:调试程序DEBUG的使用班级:姓名:同组人: 指导教师评定:签名: 【一、实验名称】 调试程序DEBUG的使用 【二、实验目的】 1.掌握汇编程序的编辑,编译,连接和执行的全过程; 2.学习和掌握用DEBUG 调试程序的方法。 【三、实验内容和原理】 1.用编辑软件,输入以下汇编语言源程序: DAT SEGMENT A D B 20 ;(自定) B DB 15 ;(自定) Y DB 3 DUP(0) Z DB 0,0 DAT ENDS STA SEGMENT STACK DW 50 DUP(?) STA ENDS COD SEGMENT ASSUME CS:COD,DS:DAT STAR PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DAT MOV DS,AX MOV AX,STA MOV SS,AX MOV AL,A MOV Z,AL MOV Z+1,AL CALL SUB1 MOV AL,B MOV Z,AL MOV Z+1,AL CALL SUB1 MOV AL,A MOV Z,AL MOV AL,B MOV Z+1,AL CALL SUB1 ADD WORD PTR Y,AX ADC BYTE PTR[Y+2],0 RET STAR ENDP SUB1 PROC MOV AL,Z MOV AH,Z+1 MUL AH ADD WORD PTR Y,AX ADC BYTE PTR[Y+2],0 RET SUB1 ENDP COD ENDS END STAR

实验一 Keil软件的使用及简单程序的调试方法

实验一 Keil软件的使用及简单程序的调试方法 一、实验目的 掌握Keil的使用方法和建立一个完整的单片机汇编语言程序的调试过程及方法。 二、实验器材 计算机1台 三、实验内容 1.Keil的使用方法。 2.建立一个单片机汇编语言程序的调试过程及方法 四、实验步骤 1.Keil的使用方法。Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。启动Keil 后的界面如下: 几秒钟后即进入Keil的编辑界面。用户便可建立项目及应用程序。 2.简单程序的调试方法 Keil是通过项目工程来管理汇编程序的。因此在调试程序前必须建立一个工程,工程

名称及保存位置由用户来指定,注意每位同学的工程名称用“学号姓名实验*”来命名。 (1)建立一工程 单击Project菜单,在弹出的下拉菜单中选中New Project选项。并在弹出的对话框中确定保存的位置及工程名称。 又弹出一对话框,要求用户选择相应的硬件CPU及相关设置。选择Atmel公司的AT89C51单片机。如下图所示 单击“确定”后在弹出的对话框中行选择“否”即工程建好了,但该工程没有任何语句,需要再建一个程序文件并将其添加到此工程中。 (2)建一文件 单击“File”/“New”命令,则弹出文件的编辑窗口,此时该文件还没有指明其文件名称及保存位置,该文件还没有加载到所建立的工程中。单击“File”/“Save”命令在弹出的对话框中指明文件的类型为.ASM汇编型及文件名后单击“保存”即可进行汇编源文件的编辑。如下图所示。

汇编语言debug的使用方法

进入Windows操作系统,输入cmd回车 输入debug 回车,这样就进入了debug模式 1: 输入-r 查看或者修改寄存器,可以修改CS IP来指向要执行汇编的内存地址-r 回车查看 -r ax 回车修改ax的值 -r cs 回车修改cs的值 -r ip 回车修改ip的值 2: 输入-D 查看内存中的信息 -d 1000:0000 查看段地址为1000H ,偏移地址为0开始的内存信息 -d 1000:0000 00ff 就是查看1000:0000 到1000:00ff的内存信息 查看主板生产日期 -d fff0:0000 00ff 可以看到右下角的08/14/08 格式月/日/年,08年8月14号生产的主板 这里的生产日期是只读的,无法修改,通过-e修改表面上看是改过了,下次打开后又恢复之前数据了 如果直接用-d 0100 则会显示DS:0100处的内存信息,也就是显示段地址为ds,便宜地址为0100的内存信息。 -d ds:0100 也可以这么使用 3:输入-E修改内存中位置的信息 -e 1000:0000 1a 00 09 10 a1 61 这样就可以修改对应段地址为1000H ,偏移地址为0开始的内存信息 -e 1000:0000 'a+b' 这样就会在内存1000:0000处写入61H(a的ASICC码) 1000:0001处+ 1000:0002 62 4:输入-u查看指定位置对应的汇编指令 -u 1000:0000 查看该处的汇编指令 -u cs:0000 查看段地址为cs处的汇编指令 5:输入-t 执行指令 -t 执行CS:IP所指向的第一个指令,如果要执行自己写入内存的指令,应该先通过-r来改变CS IP的值,然后再执行-t 执行

实验1 Debug命令使用

实验1 查看CPU和内存,用机器指令和汇编指令编程 1. 预备知识:Debug的使用 我们以后所有的实验中,都将用到Debug程序,首先学习一下它的主要用法。 (1)什么是Debug? Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。 (2) 我们用到的Debug功能。 ●用Debug的R命令查看、改变CPU寄存器的内容; ●用Debug的D命令查看内存中的内容; ●用Debug的E命令改写内存中的内容; ●用Debug的U命令将内存中的机器指令翻译成汇编指令; ●用Debug的T命令执行一条机器指令; ●用Debug的A命令以汇编指令的格式在内存中写入一条机器指令。 Debug的命令比较多,共有20多个,但这6个命令是和汇编学习密切相关的。 (3) 进入Debug。 Debug是在DOS方式下使用的程序。我们在进入Debug前,应先进入到DOS方式。用以下方式可以进入DOS。 ①重新启动计算机,进入DOS方式,此时进入的是实模式的DOS。 ②在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS。 下面说明在Windows中进入Debug的一种方法。 选择【开始】菜单中的【运行】命令,如图1所示,打开【运行】对话框,如图2所示,在文本框中输入“command”后,单击【确定】按钮。 图2 在文本框中输入“command”

图1 选择【运行】命令 进入DOS方式后,如果显示为窗口方式,可以按下Alt+Enter键将窗口变为全屏方式。然后运行Debug程序,如图3所示。 图3 运行Debug程序 (4)用R命令查看、改变CPU寄存器的内容。 我们已经知道了AX、BX、CX、DX、CS、IP这6个寄存器,现在看一下它们之中的内容,如图4所示。其他寄存器如SP、BP、SI、DI、DS、ES、SS、标志寄存器等我们先不予理会。

实验一 利用DEBUG调试程序调试程序段

实验一利用DEBUG调试程序调试程序段1.实验目的 (1)熟悉DEBUG有关命令的使用方法。 (2)利用DEBUG掌握有关指令的功能。 (3)利用DEBUG运行简单的程序段。 2.实验内容、实验步骤 (1)进入和退出DEBUG程序。 进入DEBUG程序,Windows中在命令提示符下进入DEBUG如图:退出DEBUG如图: (2)学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命 令等的使用。对于U命令、N命令、W命令等,也应试一下。 R命令: 1)显示所有寄存器内容: 格式:-R↙ 功能:以十六进制形式显示CPU内部各寄存器的值:以符号形式标志寄存 器各标志位(除TF外)的值,并将CS:IP所指的内存内容反汇编成一条指 令,可视为将要执行的指令。 ●从显示可知,CS=11A7H, IP=0000H. 2)修改寄存器 格式:-R 寄存器名↙ 功能:DEBUG首先显示指定寄存器的当前值,并在下一行首给出提示“:”, 等待用户输入新值,若直接回车相当于不个忙寄存器的值。 ●由显示可知,用E命令修改,再查看可发现数据已经被改了。

3)修改标志值 格式:-RF↙ 功能:先用符号显示当前各标志位的值,并在末尾给出提示符“-”,然后等待用户以符号形式输入新的标志值,对输入的次序没有要求,各标志值之间也可没有空格;若直接在“-”之后回车,则保留原标志值。 ●由显示可知,相应的标志值改变了。 A命令 格式:-A内存地址↙ ●执行汇编命令A后,相应的指令对应的机器码将会依次存放在指定的 内存单元中,并提示下一地址。 U命令 格式:-U 内存块↙

●由显示可知,反汇编命令U从指定的内存地址开始对内存块进行反汇 编,并分三列显示反汇编的结果。 N命令 格式:-N【e】【PA TH】文件名.扩展名↙ W命令L命令 格式:-W/L 内存地址 ●由显示可知,命令N为命令W和命令L指定文件,而命令W把指定 内存块的内容写入命令N指定文件中,命令L则将其文件装入内存地址中。 T命令 1)单步执行 格式:-T=内存地址↙ ●由显示可知,T命令将内存地址的段地址和偏移地址修改CS和IP,然 后执行由CS:IP指向的内存单元处的一条指令,显示各寄存器的值,并反编下一条指令,然后返回DEBUG状态。

DEBUG的基本命令使用

实验一 DEBUG的基本命令使用 实验名称:利用DEBUG验证寻址方式 实验目的:掌握DEBUG的常用指令(R,D,E,A,U,T 指令)的使用方法,理解不同寻址方式的特点 实验内容:在DEBUG中利用A命令输入以下汇编指令,并用U命令显示,利用T 命令单步跟踪指令的执行过程,利用R或者D命令观察相关寄存器或者内存单元内容的变化(相关过程和结果要体现在实验报告上)。 (1)立即寻址 MOV AX,1 MOV BL,02H MOV BH,34H -a 13AE:0100 mov ax,1 13AE:0103 mov bl,02 13AE:0105 mov bh,34 13AE:0107 -r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13AE ES=13AE SS=13AE CS=13AE IP=0100 NV UP EI PL NZ NA PO NC 13AE:0100 B80100 MOV AX,0001 -t AX=0001 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13AE ES=13AE SS=13AE CS=13AE IP=0103 NV UP EI PL NZ NA PO NC 13AE:0103 B302 MOV BL,02 -t AX=0001 BX=0002 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13AE ES=13AE SS=13AE CS=13AE IP=0105 NV UP EI PL NZ NA PO NC 13AE:0105 B734 MOV BH,34 -t AX=0001 BX=3402 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13AE ES=13AE SS=13AE CS=13AE IP=0107 NV UP EI PL NZ NA PO NC 13AE:0107 0000 ADD [BX+SI],AL DS:3402=00 (2)寄存器寻址 在验证完(1)后,执行mov ax,bx -a 13AE:0107 mov ax,bx 13AE:0109 -t AX=3402 BX=3402 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13AE ES=13AE SS=13AE CS=13AE IP=0109 NV UP EI PL NZ NA PO NC

实验一调试程序DEBUG的使用实验精选报告.doc

南昌理工学院实验报告 二 O 一二年月日 课程名称:微机原理与接口技术实验名称:调试程序 DEBUG 的使用 班级:姓名:同组人: 指导教师评定:签名: 【一、实验名称】 调试程序 DEBUG的使用 【二、实验目的】 1.掌握汇编程序的编辑 ,编译 ,连接和执行的全过程; 2.学习和掌握用 DEBUG 调试程序的方法。 【三、实验内容和原理】 1.用编辑软件 ,输入以下汇编语言源程序: DATSEGMENT ADB20;( 自定 ) BDB15;( 自定 ) YDB3DUP(0) ZDB0,0 DATENDS STASEGMENTSTACK DW50DUP(?) STAENDS CODSEGMENT ASSUMECS:COD,DS:DAT STARPROCFAR PUSHDS XORAX,AX PUSHAX MOVAX,DAT MOVDS,AX MOVAX,STA MOVSS,AX MOVAL,A MOVZ,AL MOVZ+1,AL CALLSUB1 MOVAL,B MOVZ,AL MOVZ+1,AL CALLSUB1 MOVAL,A MOVZ,AL MOVAL,B MOVZ+1,AL CALLSUB1 ADDWORDPTRY,AX ADCBYTEPTR[Y+2],0 RET STARENDP SUB1PROC MOVAL,Z MOVAH,Z+1 MULAH ADDWORDPTRY,AX ADCBYTEPTR[Y+2],0 RET SUB1ENDP CODENDS ENDSTAR

2.通过编译 ,连接形成可执行文件; 3.用 DEBUG 将可执行文件调入 ,并进行调试; (1)用 D 命令观察数据区在内存中的具体内容,记录单元 A 和 B 的具体地址; (2)用 U 命令对目标代码反汇编 ,观察反汇编后的结果 .注意发现源程序的起始位 置 ,并记录这个起始地址; (3)用 T 命令作单步跟踪调试 .比较每条指令执行后的结果和原来的理解是否一致 . 得出程序运行的结果 :它们是写在什么单元 ,具体内容是什么,并判断结果是否正确; (4)在子程序 SUB1 的入口处设一断点 ,用 G 命令执行程序,在断点处观察堆栈的 内容 ,比较堆栈的内容和程序返回地址是否一致; (5)用 E 命令修改单元 A,B 的内容 ,重新执行程序 ,并记录结果; (6)用 M 命令和 A 命令对程序进行修改 :将主程序中最后两条指令 (ADD 和 ADC) 修改为一条 CALLSUB1 指令 ,重新执行程序; (7)退出 DEBUG ; 4.重新使用编辑软件 ,把源程序最后一句中的 STAR 去掉 .再次生成可执行文件 ,并用 DEBUG 调入内存 .当使用 U 命令时 ,显示的结果与前一次 (未加 STAR) 的结果有何不同 ? 【四、实验条件】 微型计算机一台,软件MASM 【五、实验过程】 根据实验内容,按步骤完成。 【六、实验结果】 (1) U 命令对目标代码反汇编 ,注意发现源程序的起始位置 ,并记录这个起始地址。 答:源程序起始地址: 1512:0000H。 (2)D 命令观察数据区在内存中的具体内容,记录单元 A 和 B 的具体地址。 答: 150A:0000H 是 A 的具体地址, 150A:0001H 是 B 的具体地址。 (3)T 命令作单步跟踪调试 .比较每条指令执行后的结果和原来的理解是否一致。得 出程序运行的结果 :它们是写在什么单元 ,具体内容是什么,并判断结果是否正 确。 答:由于单步调试的结果较多,在这里仅说几项以示情况。 ①PUSHAX 后观察得到 IP 值自加 2。 ②MOVDS,AX 后 DS 的值由 14FAH 变成 150AH 。 ③Z 的偏移地址为 0005H,而寻址 Z 中的内容成为 [0005H] 。 所以结果一致正确。 (4)在子程序 SUB1 的入口处设一断点 ,用 G 命令执行程序,在断点处观察堆栈的 内容 ,比较堆栈的内容和程序返回地址是否一致。 答: SS=150BH,IP=0017H,和程序返回地址一致。 (5)重新使用编辑软件 ,把源程序最后一句中的 STAR 去掉 .再次生成可执行文件 , 并用 DEBUG 调入内存 .当使用 U 命令时 ,显示的结果与前一次 (未加 STAR)的结果有何不同 ? 答:整个代码段仅有一条指令,ADD[BX+SI],AL 。 由于把源程序最后一句中的 STAR 去掉,那么程序就不一定是从 STAR 开始,会 造成程序混乱。

相关文档
相关文档 最新文档