DEBUG中各种寻址方式的使用
汇编实验报告(-)调试程序DEBUG的使用

汇编实验报告(-)调试程序DEBUG的使用《汇编语言程序设计》实验报告实验一调试程序DEBUG 的使用一、实验目的通过实验掌握下列知识:1、DEBUG命令:A,T,D,F,G;2、数据在内存中的存放方式和内存操作数的几种寻址方式;3、汇编指令:INC,DEC,LOOP,INT 3的应用;4、汇编语言伪指令:BYTE PTR和WORD PTR的应用。
二、内容及步骤1.DEBUG 命令使用表 1.1 DEBUG命令****命令的使用中注意:****①字母不分大小写;②②只使用16 进制数,没有后缀字母;③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符;④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行;⑤命令如果不符合Debug 的规则,则将以“error”提示,并用“^”指示错误位置。
许多命令的参数是主存逻辑地址,形式是“段基地址: 偏移地址”。
其中,段基地址可以是段寄存器或数值;偏移地址是数值。
如果不输入段地址,则采用默认值,可以是缺省段寄存器值。
如果没有提供偏移地址,则通常就是当前偏移地址。
1、开机后,切换到命令提示符窗口下,出现提示符后键入命令DEBUG, 进入调试环境,显示提示符 '- '。
2、用命令 F 200 220 'AB' 将'AB'的两个ASCII码循环填入内存。
注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘AB’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。
3、用命令 D200 观察内存中的十六进制码及屏幕右边的ASCII字符。
图1-1 Fill、Dump命令调用对主存操作的命令还支持地址范围这种参数,它的形式是:“开始地址结束地址”(结束地址不能具有段地址),或者是:“开始地址L 字节长度”。
D(Dump)命令显示主存单元的内容,它的格式如下(分号后的部分用于解释命令功能,不是命令本身):D [地址] ;显示当前或指定开始地址的主存内容D [范围] ;显示指定范围的主存内容图1-2 D命令调用左边部分是主存逻辑地址,中间是连续16 个字节的主存内容(16进制数,以字节为单位),右边部分是这16个字节内容的ASCII字符显示,不可显示字符用点“.”表示。
DEBUG的详细用法(自己测试)

将机器指令程序送到起始地址为200H单元
-E 200 B2, 65, B4, 02, CD, 21, CD, 20
执行机器指令程序
-G=200
e
Program terminated normally
示例二:显示修改寄存器内容
5.读写磁盘
-N [d:][PATH]文件名.扩展名 指定想要读写的磁盘文件
-W 内存地址 将指定内存块写入文件
-L [内存地址] 将文件调如内存
修改寄存器
-R AX
AX 0000
:1234
-R
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B76 ES=0B76 SS=0B76 CS=0B76 IP=0100 NV UP EI PL NZ NA PO NC
0B76:1006 CD20 INT 20
示例四:执行程序
单步执行
-T=0B76:1000
AX=0234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000
符号标志SF(Sign flag) NG(1) PL(0)
零标志ZF(Zero flag) ZR(1) NZ(0)
2010-02-24 20:01 DEBUG详细用法DEBUG详细用法
DEBUG命令一览
1.读写寄存器
-R 显示所有寄存器内容
-R 寄存器名 显示和修改指定寄存器内容
示例一:DEBUG环境下建立和汇编程序
输入并汇编程序
-A 100
实验一DEBUG的使用

实验一 DEBUG 的使用实验目的:1.学习使用.学习使用DEBUG DEBUG DEBUG程序的各种命令。
程序的各种命令。
程序的各种命令。
2.掌握.掌握8088/868088/868088/86指令系统指令系统指令系统---------算数指令。
算数指令。
算数指令。
3.掌握用.掌握用DEBUG DEBUG DEBUG调试自编程序的方法。
调试自编程序的方法。
调试自编程序的方法。
4.掌握.掌握8088/8086 CPU 8088/8086 CPU 寄存器的用途和存储器组织及它们之间的关系。
寄存器的用途和存储器组织及它们之间的关系。
寄存器的用途和存储器组织及它们之间的关系。
5.掌握内存操作数及寻址方法。
.掌握内存操作数及寻址方法。
6.掌握汇编语言伪操作.掌握汇编语言伪操作:BYTE PTR,WORD PTR :BYTE PTR,WORD PTR。
内容及步骤:一、一、DEBUG DEBUG 命令使用命令使用: :1、 敲 DEBUG 进入进入进入 DEBUG DEBUG 环境,显示提示符环境,显示提示符环境,显示提示符 '_ ' '_ '。
2、 用命令用命令 D100 10F D100 10F 观察内存中的观察内存中的161616进制码及屏幕右边的进制码及屏幕右边的进制码及屏幕右边的ASCII ASCII ASCII字符。
字符。
字符。
3、 用命令用命令 E100 30 31 32 E100 30 31 32 ………… 3F 3F 将30H 30H~~3FH 3FH写入地址为写入地址为写入地址为100H 100H 100H开始的内存单元中,开始的内存单元中,再用再用D D 命令观察结果,看键入的命令观察结果,看键入的161616进制数是什么字符的进制数是什么字符的进制数是什么字符的ASCII ASCII ASCII码码?4、 用命令用命令 F100 10F 'A' F100 10F 'A' 将'A''A'的的ASCII ASCII码填入内存,用码填入内存,用码填入内存,用D D 命令查看结果。
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=0000DI=0000 DS=3000 ES=23A0 CS=138E IP=0000NV UP DI PL NZ NA PO NC138E:0000 MOV AX,1234-R AX ;输入命令AX 0014 ;显示AX的内容:;供修改,不修改按回车。
实验一 Debug命令的使用.

1560:0100 mov ah,9
1560:0102 mov dx,109
1560:0105 int 21h ;显示字符串HELLO
1560:0107 int 20h
1560:0109 db "hello$"
1560:010F ;回车结束
—G ;运行程序
hello
提示:在DEBUG环境下输入程序段时要省掉立即数后面的字符“H”
1、MOV指令的调试:(先不做
程序段:MOV AL, 55H
MOV AH, AL
MOV BX, 1000H
MOV BYTE PTR[BX], 66H(将66H放到以寄存器间接寻址的字节单元中,-d查看
MOV WORD PTR[BX+2], 77H (将77H放到以寄存器间接寻址的字单元中, -d查看
应用:常用于在调试过程中检查变量的值。
(5单步执行命令T,格式为:
- T [=地址]
功能:从指定地址执行一条指令后停下来,显示寄存器内容和状态值。若未指定地址,则执行当前指令的下一条指令。
(6反汇编命令U ,格式为:
-U [地址]或-U范围
功能:从制定地址开始,反汇编32个字节,或对指定范围内的主存内容进行反汇编。若没有指定地址,则接着上一个U命令的最后一个单元开始;若还没有使用过U命令,则从当前CS:IP开始。例如:
1D命令(显示:-d, -d 0af9:0100 , -d 0af9:0100 0107,
-d ds :0100 0107 , -d 0100 0107,
-d 0100 L 8
2E命令(修改:-e 0af9 ; 0100 41 ‘a’, -e 0100 ‘ABCD’
DEBUG使用简介

读端口内容 I 端口地址 调入文件 L 地址 驱动器 启始扇区 数量 移动内容 M 范围 地址 给文件命名 N 路径名 文件名 向端口输出 பைடு நூலகம் 端口地址 退出 Q 显示寄存器内容 R 寄存器名 在内存搜索 S 范围 列表 单步跟踪 T =地址 行数 反汇编 U 范围 写文件 W 地址 驱动器 启始扇区 数量
3)显示、修改寄存器内容( R ) -r ;显示所有寄存器内容 -r ax ;显示并修改AX寄存器内容 4)显示修改存储单元内容(E) -e ds:100 ;从DS:100单元开始修改(修改完一个 单元内容后按空格,修改下一个单元,按Enter 键结束修改。) -e ds:100 43,’abb’,76 ;从DS:100单元开始修改 为43H,61H(a),62H(b),62H(b),76H 5)填充内容单元(F) -f ds:100 200 0 ;将DS:100到200的单元填入0 6)反汇编 可以将存储器中的程序内容用汇编指令显示。
7)运行程序(G) -g =100 ;从CS:100开始执行程序 -g =100 110 ;从CS:100开始执行程序,并 在110设置断点(通过在程序中设置合适的断点, 对程序的查错和排错很重要) 8)单步运行(T) 单步执行时每执行一条指令都会显示寄存 器的内容,供用户参考。 -t ;从当前指令位置单步执行1条指令 -t 6 ;从当前指令位置单步执行6条指令 9)汇编(A) 提供用户输入很短的汇编程序(只接收指令) -a 100;从CS:100开始输入汇编指令程序 (依次输入程序指令,按两次Enter 键退出)
3 DEBUG中的数字全部为十六进制数 1)退出DEBUG(Q) 2)显示内存内容(D) 显示时最左边为地址,内存单元内容以十 六进制(左半部分)和ASCII(右半部分)显示 -d cs:100 ;显示由CS:100开始的128个字节单 元内容 -d 100 ;显示由DS:100开始的128个字节单 元内容 -d 100 120 ;显示由DS:100开始 到120单元内容 (或用-d 100L20) -d 100:120 ;显示100:120开始的128个字节单元内 容
第3章_1 寻址方式DEBUG

(BX)
(SI) (DI)
物理地址PA= (SS) 16 +(BP) MOV AX, [BX] PA = 16d (DS) + (BX) MOV AX, [BP] PA = 16d (SS) + (BP) MOV AX, [SI] PA = 16d (DS) + (SI) 也称基址寻址 也称变址寻址 [SI]源变址 [DI]目的变址
(BX)=100H,(AX)=0133H,(10120H)=BCF0H 偏移地址EA=(BP)=0120H
物理地址PA= (SS) 16 +(BP)=10000H+100H=10120H
内 存
(SS) 1000H
0CH 52H EA=(BP) 01H 20H
16
(AX) = BCF0H
AH AL
EA=(BP+6)
01H
1000H
12H
34H
10126 34H 12H
10127
PA
10126H
3.2 寻址方式 存储器寻址
6、基址加变址寻址 (BX) 偏移地址EA= (BP) + (SI) (DI)
物理地址PA=(DS)×16 +(BX) +
(SI)
(DI) (SI)
物理地址PA=(SS)×16 +(BP) +
(BP)
(DI)
+ X ,8位16位移量
物理地址PA=(DS)×16 +(BX) +
(SI) (DI) (SI) (DI) + X ,8位16位移量
物理地址PA=(SS)×16 +(BP) +
+ X ,8位16位移量
汇编语言调试DEBUG命令详解

汇编语言调试DEBUG命令详解1、显示命令D① D [地址]② D [范围]如不指定范围,一次显示8行×16个字节。
-D ;默认段寄存器为DS,当前偏移地址-D DS:100 / -D CS:200-D 200:100-D 200;200为偏移地址,默认段寄存器DS-D DS:100 110/ -D 100 L 102.修改命令E① E 地址;从指定地址开始,修改(或连续修改)存储单元内容。
DEBUG首先显示指定单元内容,如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。
② E 地址数据表;从指定的地址开始用数据表给定的数据修改存储单元。
-E DS:100 F3 ‘AB’ 8D。
3.添充命令FF 范围数据表;将数据表写入指定范围的存储单元;数据个数多,忽略多出的数据,个数少,则重复使用数据表。
-F DS:0 L5 01,02,03,04,05-F DS:0 L5 01 02 03 04 05(空格分隔)-F DS:0 L5 FF ;5个字节重复使用FF4.显示修改寄存器命令RR;★显示所有寄存器和标志位状态;★显示当前CS:IP指向的指令。
显示标志时使用的符号:标志标志=1 标志=0OF OV NVDF DN UPIF EI DISF NG PLZF ZR NZAF AC NAPF PE POCF CY NC5.汇编命令AA [地址];从指定的地址开始输入符号指令;如省略地址,则接着上一个A命令的最后一个单元开始;若第一次使用A命令省略地址,则从当前CS:IP 开始(通常是CS:100)。
注释:①在DEBUG下编写简单程序即使用A命令。
②每条指令后要按回车。
③不输入指令按回车,或按Ctrl+C结束汇编。
④支持所有8086符号硬指令,伪指令只支持DB、DW,不支持各类符号名。
6.反汇编命令U① U [地址];从指定地址开始反汇编32个字节的机器指令;省略地址时,则接着上一个U命令的最后一个单元开始;若第一次使用U命令省略地址,则从当前CS:IP开始(通常是CS:100)。