总汇编实验二用DEBUG程序调试程序功能段
微机原理及应用实验报告

3•掌握各种寻址方法以及简单指令的执行过程。
二、实验要求
1实验前要作好充分准备,包括汇编程序清单、调试步骤、调试方法以及对程序结果的分 析等。
2•本实验要求在PC机上进行。
3•本实验只要求在DEBUC调试状态下进行,包括汇编程序,调试程序,执行程序。
4•熟悉建立源文件,进行汇编和连接的全过程,并对程序进行调试。
二、实验要求
1•实验前准备
1分析题目,将程序中的原始数据、中间结果和最终结果的存取方式确定好。
2写出算法或画出流程图。
3写出源程序。
4对程序中的结果进行分析,并准备好上机调试的过程。
2•本实验要求在PC机上进行。
3•汇编过程中出现问题,可用DEBU(进行调试。
xorax,ax pushax movax,data movds,ax leasi,data1 leadi,data2 leabx,data3 moval,[si+3] movah,[di+3] an dal,0fh an dah,0fh addal,ah oral,30h mov[bx+3],al moval,[si+2] movah,[di+2] an dal,0fh an dah,0fh adcal,ah oral,30h mov[bx+2],al moval,[si+1] movah,[di+1] an dal,0fh an dah,0fh adcal,ah oral,30h mov[bx+1],al moval,[si] movah,[di] an dal,0fh an dah,0fh adcal,ah
;exercize21
第二次实验报告

长春理工大学汇编语言实验报告实验题目:用DEBUG程序调试程序功能段实验时间:2016 年 4 月 6 日实验地点:东三教912班级:1405111学号:140511114姓名:王国伟一.实验目的1.继续学习使用DEBUG程序的各种命令。
2.利用DEBUG学习了解计算机取指令、执行指令的工作过程。
3.掌握8086/8088基本指令的使用方法和功能。
二.实验准备1.DEBUG命令1)G 命令格式:G[=起始地址] [断点地址]功能:从起始地址开始执行到断点地址,如不设断点地址,则程序一直执行到终止指令才停止2)P命令功能:执行汇编程序,单步跟踪与T命令不同的是:P 命令不会跟踪进入子程序或软中断。
其使用方式与T相同3)N命令功能:指定文件名。
为读/写文件做准备4)W命令功能:向磁盘写内容5)L命令功能:从磁盘将文件或扇区内容读入内存注意:使用该命令前,必须用N命令设定文件名三.实验任务1.按照下列给定步骤完成求累加和程序:程序:MOV BX,1000MOV CX,10MOV AL,0LOP: ADD AL,[BX]INC BXJ: LOOP LOPINT3步骤:1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替。
LOP:0B50:0108 J:0B50:010B2)用命令N AA将此程序命名为文件AA(文件名可任取)。
3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址) ,用R命令把BX设为:0000H,CX 设为文件长度。
4)用命令W 100将此程序存到AA命名的磁盘文件中。
5)用命令Q退出DEBUG。
6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序。
若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入。
7)用E命令在内存地址1000H处键入16个数字8)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值。
汇编DEBUG命令详解

DEBUG命令详解DEBUG是DOS中的一个外部命令,从DOS 1.0起就带有此命令,因此可见此命令的重要性了。
虽然此命令的功能非常强大,可以解决许多问题,可是对许多人来说,尤其是初学者来说,却非常不易掌握。
因此,现将DEBUG的命令详细介绍一番,以让大家知道它的使用。
Debug:A(汇编)直接将 8086/8087/8088 记忆码合并到内存。
该命令从汇编语言语句创建可执行的机器码。
所有数值都是十六进制格式,必须按一到四个字符输入这些数值。
在引用的操作代码(操作码)前指定前缀记忆码。
a [address]参数address指定键入汇编语言指令的位置。
对 address 使用十六进制值,并键入不以“h”字符结尾的每个值。
如果不指定地址,a 将在它上次停止处开始汇编。
有关将数据输入到指定字节中的信息,请单击“相关主题”列表中的 Debug E(键入)。
有关反汇编字节的信息,请单击“相关主题”列表中的 Debug U(反汇编)。
说明使用记忆码段的替代记忆码为 cs:、ds:、es: 和 ss:。
远程返回的记忆码是 retf。
字符串处理的记忆码必须明确声明字符串大小。
例如,使用 movsw 可以移动 16 位的字串,使用 movsb 可以移动 8 位字节串。
汇编跳转和调用汇编程序根据字节替换自动将短、近和远的跳转及调用汇编到目标地址。
通过使用 near 或far 前缀可以替代这样的跳转或调用,如下例所示:-a0100:05000100:0500 jmp 502 ; a 2-byte short jump0100:0502 jmp near 505 ; a 3-byte near jump0100:0505 jmp far 50a ; a 5-byte far jump可以将 near 前缀缩写为 ne。
区分字和字节内存位置当某个操作数可以引用某个字内存位置或者字节内存位置时,必须用前缀 word ptr 或者前缀 byte ptr 指定数据类型。
手把手教你汇编Debug

⼿把⼿教你汇编Debug关于汇编的第⼀篇⽂章:Hello⼤家好,我是程序员cxuan!我们上篇⽂章了解了⼀下基本的寄存器,这篇⽂章我们来进⾏实际操作⼀下。
原⽂链接:我们以后将会⽤到很多 Debug 命令,这⾥我们先来熟悉⼀下它们。
Debug 是什么Debug 是 Windows / Dos 操作系统提供的⼀种功能。
使⽤ Debug 能让我们⽅便查看 CPU 各种寄存器的值、内存情况,⽅便我们调试指令、跟踪程序的运⾏过程。
接下来我们会⽤到很多 debug 命令,但是使⽤这些命令的前提是,你需要在电脑上安装⼀下 debug,Windows/Mac 都可以安装,获取链接我已经给你找出来了。
阿,忘记说了,我们这⾥使⽤的是Dos box来模拟汇编的操作环境。
传送门(Mac 和 Windows 都是):下载完成后打开 DosBox ,打开之后是这样的。
此时我们输⼊ debug 命令应该提⽰的是因为我们还没有进⾏连接和挂载,此时我们执⾏mount c D:\debug执⾏这条命令时,你需要现在 D 盘下创建⼀个 debug ⽂件夹,然后我们挂载到 debug 下⾯。
并且执⾏C:切换到 C 盘路径下。
此时我们就可以执⾏ debug 命令了。
这⾥需要注意⼀点,我在 Windows 10 系统下搭建 Debug 环境时,在挂载完成后输⼊ debug ,还是提⽰Illegal command:debug,此时你需要再下载⼀个debug.exe ,贴⼼的我也把下载地址给你了。
下载地址:密码:3akd需要下载⾥⾯的debug.exe,然后把它放在你挂载的路径下,这⾥我挂载的路径时 D 盘下的 debug ⽂件夹。
放置完成之后,再输⼊ debug 就可以了。
因为每次打开 Dosbox 都会执⾏上⾯这些命令,真的好烦,那怎么办呢?⼀个简单的办法是在 Dosbox 安装路径下找到打开之后,在末尾键⼊就 OK 了,下次直接打开 Dosbox ,会默认执⾏这三条命令,⾄此,就是我搭建 Dosbox 遇到的所有问题了。
熟悉、使用DEBUG调试工具实验报告

实验目的:借助DEBUG程序发现汇编语言程序的错误并加以改正实验过程:一,在debug环境下建立和汇编程序(1)进入debugC:\debug 回车(2)输入程序并汇编-A 100 回车0AF0:0100 mov dl,38 回车0AF0:0102 mov ah,2 回车0AF0:0104 int 21h 回车0AF0:0106 int 20h 回车0AF0:0108 回车(3)运行程序-g=1008Program terminated normally如果想分析该程序的指令,可使用反汇编命令U(4)反汇编-u 100,108 回车0AF0:0100 B238 MOV DL,30AF0:0102 B402 MOV AH,00AF0:0104 CD21 INT 210AF0:0106 CD20 INT 200AF0:0108 56 PUSH SI(5)将机器指令程序送到起始地址为200h的单元-e 200 b2,38,b4,02,cd,21,cd,20,56-g=2008Program terminated normally-二,常用debug命令(1)显示,修改寄存器内容显示所有寄存器内容格式:-r 回车功能:以十六进制形式显示cpu内部个寄存器的值;以符号形式显示标志寄存器的各标志位(除tf外)的值;并将CS:IP所指的内存内容反汇编成一条指令,可视为将要执行的指令。
如:-r 回车AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0AF0 ES=0AF0 SS=0AF0 CS=0AF0 IP=0200 NV UP EI PL NZ NA PO NC0AF0:0200 B238 MOV DL,38知:cs=0AF0h,IP=0100h修改寄存器格式:-r 寄存器名回车-r dsDS 0AF:0AE0-rds的内容由原来的0af0h修改为0ae0h修改标志值格式:-rf例:-rfNV UP EI PL NZ NA PO NC -ov ng 回车将of,sf的值分别修改为1。
汇编语言源程序运行步骤和DEBUG的使用

汇编语言源程序运行步骤和DEBUG的使用一、实验目的1.熟悉汇编语言源程序书写格式。
2.熟悉汇编语言源程序编辑、汇编、连接、执行步骤。
3.练习DEBUG常用命令的使用。
4.熟悉8086的寄存器。
5.了解程序的执行过程。
二、实验预习要求1、认真阅读预备知识中汇编语言的上机步骤的说明,熟悉汇编程序的建立、汇编、连接、执行、调试的全过程。
2.预习使用DEBUG 检查/修改寄存器内容、查询存储器内容的命令。
3.预习使用DEBUG单步、断点及连续执行程序的命令。
三、实验内容1.编辑以下程序,汇编连接后运行,将输出'HOW ARE YOU?’。
本习题主要目的:熟悉汇编语言源程序的书写格式;熟悉汇编语言源程序的编辑、汇编、连接、运行。
DA TA SEGMENTBUF DB 'HOW ARE YOU?$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV DX,OFFSET BUFMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START2.DEBUG 调试以下程序,查看DATA段中定义的数据在内存中的存放方式,并单步执行查看每一语句执行后相关寄存器的内容,并解释为何取该值:DA TA SEGMENT ;(1)DB 34H,12H ;(2)B DW 1234H ;(3)C DD 0 ;(4)D DB -1,15/3 ;(5)E DB '012' ;(6)F DW 'AB','C' ;(7)G DW ? ;(8)H DB 5 DUP(0) ;(9)I DW $-OFFSET H ;(10)DA TA ENDS ;(11)CODE SEGMENT ;(12)ASSUME CS:CODE,DS:DA TA ;(13)START: MOV AX,CODE ;(14)MOV DS,AX ;(15)MOV BX,SEG A ;(16)MOV CX,OFFSET B ;(17)MOV DX,TYPE C ;(18)MOV AH,4CH ;(19)INT 21H ;(20)CODE ENDS ;(21)END START ;(22)3.下面是第1题采用将主程序定义为远程的程序返回DOS的结束方式,将其编辑、连接、运行,熟悉汇编源程序不同的结束方式。
实验一 利用 DEBUG 调试汇编语言程序段

实验名称实验一利用 DEBUG 调试汇编语言程序段一、实验目的1.熟悉 DEBUG 有关命令的使用方法;2.利用 DEBUG 掌握有关指令的功能;3.利用 DEBUG 运行简单的程序段。
二、实验要求1.仔细阅读有关 DEBUG 命令的内容,对有关命令,要求事先准备好使用的例子;三、实验环境DOS 操作系统四、实验内容1.进入和退出 DEBUG 程序;1)开始—运行点确定进入DOS命令窗口图1进入DOS命令窗口2)在命令窗口中输入 dubug 进入 debug 程序图2进入 debug 程序3)进入 debug 窗口后,输入 q 命令退出 debug图3退出 debug2.学会 DEBUG 中的1)D 命令(显示内存数据 D 段地址:偏移地址)例 1:-D100 ;显示 DS 段, 0100 开始的 128 个字节内容-D ;默认段寄存器为 DS,当前偏移地址(刚进入 debug 程序偏移地址为 0100H)图4默认显示 DS 段内容-D DS:100 ;显示 DS 段, 0100H 开始的 128 个字节内容图5显示 DS 段内容-D CS:200 ;显示 CS 段, 0200H 开始的 128 个字节内容图6显示 CS 段内容-D 200:100 ;显示 DS 段, 0200:0100H 开始的 128 个字节内容图7显示 DS段0200:0100H内容-D 200 ;显示 DS 段, 0200H开始的128个字节内容图8显示 DS段0200H开始的内容-D 100 L 10 ;显示 DS 段, 100H 开始的 100H 个字节内容图9显示 DS段100H开始的100H字节内容2)E 命令(修改指定内存)例 1:-E100 41 42 43 44 48 47 46 45-D 100,L08结果:073F:0100 41 42 43 44 48 47 46 45-e 100 修改内存内容-d 100,L08 查看刚才修改的内存内容图10 修改和查看DS段100H开始的80H字节内容例 2: -E 100073F:0100 41. 42 : 42 是操作员键入此命令是将原 100 号内存内容 41 修改为 42,用 D 命令可察看。
DEBUG命令及汇编语言实验(2011版)

DEBUG命令及汇编语言实验指导书(2011)石河子大学信息科学与技术学院微机原理与接口技术课程组编目录第一部分DEBUG命令介绍 (3)一、编写汇编语言的两种主要方法: (3)二、80x86和Pentium微处理器中的寄存器 (3)三、DEBUG常用指令 (5)A (Assemble) 汇编指令 (5)D (Display) 显示命令 (5)G (Go) 运行命令 (5)R (Register) 寄存器命令 (5)U (Unassemble) 反汇编命令 (6)T (Track)跟踪命令 (6)DEBUG的基本指令一览表 (6)四、操作实例 (7)五、DEBUG 应用技巧 (8)六、DEBUG实验程序 (9)1、显示一个字符 (9)2、显示所有ASCII码的程序 (9)3、由键盘输入任意字符串,然后显示出来 (9)4、显示一字符串 (9)5、用debug命令改变显示器显示状态 (10)6、将1~16放入以2000H开始的单元中 (10)7、将1000H开始的4个单元中的大数找出来 (10)8、比较连续两个单元中数的大小 (10)9、搜索“$”字符 (11)10、测试数的最高位 (11)11、比较SI和DI的内容,相等则AL=00,不等则AL=FFH (12)12、人机对话程序 (12)七、系统功能调用 (14)1、什么是DOS系统功能调用 (14)2、常用的系统功能调用 (14)第二部分汇编语言实验 (16)一、上机前的软件准备 (16)二、详细说明 (16)三、汇编语言源程序 (18)1、在屏幕上显示一个字符的源程序程序: (18)2、显示所有ASCII的源程序: (18)3、在屏幕上显示一个指定字符串的源程序: (18)4、显示所有26个大小写英文字符 (19)5、对话程序 (19)6、一位数的减法,6-2=4 (20)7、显示2位数结果,16-3 (21)8、比较A、B两单元中的数,将较大的数送A单元。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOV DX,900
OUT DX,AL
(5)MOV [BX],0
错误,不能将立即数直接送入内存X正确为:没有指明字操作还是字节操作改为:mov word ptr[bx],0
3.利用T,P,G命令,执行下列指令段,注意它们的不同之处。
(6)MOV DI,300
四、小结
了解了更多的debug命令,会进行dos下的文件读写了。
仪器设备损坏、非正常损耗材料(试剂)及处理情况:
无
教师对报告的最终评价及处理意见:
较好地完成了实验任务。
教师签字:
年月日
实验报告
──学年第学期
实验课程
汇编语言
学生姓名
123
实验项目
DEBUG调试程序的使用
学院
计算机科学技术
实验性质
专业选修课
班级学号
实验地点
同组人数
1
第组
实验日期
第周星期第节
成绩
5
环境参数
DOSBox-0.74
1、实验目的及要求
2、实验原理、实验内容
3、实验仪器设备及材料
4、操作方法与实验步骤
5、实验数据记录及处理
INCBX
J:LOOPLOP
INT3
步骤:
1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替。
2)用命令N AA将此程序命名为文件AA(文件名可任取)。
3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址) ,用R命令把BX设为:0000H,CX设为文件长度。
4)用命令W 100将此程序存到AA命名的磁盘文件中。
5)用命令Q退出DEBUG。
6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序。
若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入。
7)用E命令在内存地址1000H处键入16个数字
8)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查
三:问题思考
1.假设某内存单元的内容为CCH,试问该内容如看作一条指令、看作无符号数、看作带符号数,那将分别表示什么?不查看教材中的指令系统代码,如何在DEBUG下知道CCH表示一条什么指令?
CC指令:INT3调试断点;
无符号数:204
带符号数:-52
2.在指令MOV[BX],AX中,操作数[BX]的寻址方式是什么?在DEBUG下执行完该指令后,如何查看执行结果?
寄存器间接寻址方式。
用d查看。
3.可否随意在DEBUG提示符“-”后不带参数发出命令G?什么情况下使用命令G时,可不用“=”给出执行的首地址?
不可以,代码段和指令寄存器指向所要执行代码的地址。
4.分析出现死机的几种情况。如何理解死机现象?试从计算机的工作原理进行解释
从硬件上主要是cpu,内存,硬盘不能正常工作,从软件上说主要是死循环和驱动问题。例如cpu进入了死循环,不能中断退出到原来的管理进程。
6、实验结果分析及讨论
一:
1.继续学习使用DEBUG程序的各种命令。
2.利用DEBUG学习了解计算机取指令、执行指令的工作过程。
3.掌握8086/8088基本指令的使用方法和功能。
二:实验任务
1.按照下列给定步骤完成求累加和程序:
程序:
MOVBX,10DAL,[BX]
(1)LEA DI,[AX]
错误,因为能够作为偏移地址的寄存器只有BX,BP,SI,DI没有AX。
LEA DI,[BX]
(2)MOV DS,2010
错误,不能将立即数直接送入段寄存器。
Mov ax,2010
Mov ds,ax
(3)PUSH AL
错误,应是16位的寄存器
Push ax
(4)OUT 900,AL
MOV SI,400
MOV CX,3
CLD
REP MOVSB
INT 3
T:
P:可以看到其直接结束,没有多次循环进入。
G:若没有设置断点直接运行程序结束
(7)MOV AH,2
MOV DL,41
INT 21
INT 3
T:进入了21号中断
P:没有进入21号中断
G:可以看到直接执行完毕
总结:T命令一步一步全部执行
AX,BX的值是否符合你的预计值。
符合预期。
9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,检查程序是否有错。
10)重复G J与T,再检查AX是否正确。(J为断点地址)
没有问题。
11)用G命令使程序运行到结束,检查AX值是否正确。
用计算器检查,没有错误。
2.用命令A汇编下列指令,判断指令正误并说明原因。
3)用G命令运行此程序,并用D命令检查其结果(存放在哪里?),是否正确?
4)将INT 20H指令改为INT 3,有何区别?若这条指令不加,行不行?试
试。
改为INT 3命令程序会停止到此处,若不加,会超出此程序的执行范围,直到遇到中断或者死机。
5)请说明这个程序完成的功能是什么?
完成两个8字节的数相加。
P命令不会进入子程序,适合主程序的调试。
G命令适合查看一段命令的执行结果是否有误。
4.程序:MOVDI,1000
MOVCX,8
MOVSI,2000
CLC
LOP: MOVAL,[SI]
ADC[DI],AL
INCSI
INCDI
LOOPLOP
INT20
步骤:
1)用A命令键入此程序
2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。