总汇编实验二用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单元。
debug+的使用
如果想知道内存10000H处的内容,可以用"d 段地址:偏移 地址"的格式来查看,如输入 -d 1000:0 使用 d 1000:9查看1000:9处的内容。 使用 d 1000:0 9查看1000:0-1000:9的内容 一进入Debug,可直接使用D命令直接查看,将列出Debug预设 的地址处开始128个字节单元的内容
汇汇编编语语言言程程序序设设计计实验
四、Debug常用命令
? 显示 Debug 命令列表。
T 执行一条指令,然后显示
R 显示或改变一个或多个寄 所有寄存器的内容
存器的内容
P 执行循环、重复的字符串
D 显示查看内存中的内容。 指令、软件中断或子例程。
E 从指定地址开始,将数据输 不跟踪内部。
入到内存,即改写内存的内容。
汇汇编编语语言言程程序序设设计计实验
3、E命令
格式: E <地址> [<单元内容表>] (1) E <地址>
功能: 不断显示地址,可连续键入修改内容,直至新地址出现后 键入回车Enter为止。 (2) E <地址> <单元内容表> 其中<单元内容表>是以空格分隔的十六进制数,或用’或” 括起来的字符串,或者是二者的组合。
功能:将<单元内容表>逐一写入由<地址>开始的一片单元。 如将内存1000:0-1000:9单元中的内容分别写为0、1、2、3、
利用Debug调试汇编语言程序执行过程的教学探讨
f o r t h e u n d e r l y i n g wo r k p r i n c i p l e o f c o mp u t e r . T h e p r a c t i c e s h o ws t h a t t h e me t h o d c a n e f e c t i v e l y s t i mu l a t e s t u d e n t s ’i n t e r e s t i n
中图 分 类 号 : G6 4 2 . 0 文献 标 志 码 : A 文章 编 号 : 1 0 0 6 — 8 2 2 8 ( 2 0 1 3 ) 1 0 — 5 2 — 0 4
Ex pl o r a t i on o n t e a c h i n g a s s e mbl y l a ng ua g e pr o g r a m e x e c ut i on pr o c e s s us i n g De bu g
Xi a n g J i we n
( C o l l e g e o f I n f o r ma t i o n S c i e n c e a n d E n g i n e e r i n g ,J i s h o u U n i v e r s i t y ,J i s h o u ,Hu n a n 4 1  ̄O & C h i n a )
式、 通过 系统总线 与外设接 口进行连接 的基本方法 等 , 具备软 存单元 中的 内容 。 1 . 2寄存器命令 R 件与硬 件紧密 结合的显著 特点 。该 课程帮助 学生从根本 上认 功能 : 用于显示或修改 C P U寄存器 中的值 。 识和 理解计算 机 的底层工作 原理n , 培 养学生综 合运用模 拟 电
汇编语言学习知识程序设计实验
汇编语⾔学习知识程序设计实验⽬录⽬录 (1)实验⼀利⽤DEBUG熟悉常⽤指令的使⽤ (2)⼀、实验⽬的 (2)⼆、⽰例 (2)三、实验题 (2)实验⼆汇编程序和连接程序的使⽤ (6)⼀、实验⽬的。
(6)⼆、⽰例。
(6)三、实验题。
(8)实验三顺序结构程序设计 (11)⼀、实验⽬的 (11)⼆、⽰例 (11)三、实验题 (12)四、实验报告 (15)实验四循环结构程序设计 (16)⼀、实验⽬的 (16)⼆、⽰例 (16)三、实验题 (18)实验五分⽀结构程序设计 (21)⼀、实验⽬的 (21)⼆、⽰例 (21)三、实验题 (22)实验六⼦程序设计 (29)⼀、实验⽬的 (29)⼆、实验题 (29)实验⼀利⽤DEBUG熟悉常⽤指令的使⽤⼀、实验⽬的熟悉指令系统,掌握常⽤指令的⽤法;通过实验加深对各种寻址⽅式的理解;能熟练使⽤DEBUG中的命令对指令进⾏反汇编,观察并了解机器代码。
⼆、⽰例请分别⽤⼀条汇编语⾔指令完成如下功能:(过程略)。
1.⽤寄存器BX和SI的基址变址寻址⽅式把存储器的⼀个字节与AL寄存器的内容相加,并把结果送到AL中。
ADD AL,[BX][SI]2.⽤位移量为0520H的直接寻址⽅式把存储器中的⼀个字与3412H相加,并把结果送回该存储单元。
ADD WORF PTR [0520H],3412H三、实验题1.调试、验证下列指令的结果,已知(DS)=2000H,(BX)=0100H,(SI)=0002H,(BP)=0200H,(SS)=2300H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,(23204)=88H,说明各指令执⾏完后AX寄存器的内容。
要求输⼊指令,相应存储单元的内容要事先设置,单步P执⾏,观察执⾏结果。
(设置存储器的值)①.MOV AX,1200H②.MOV AX,BX③.MOV AX,[1200H]④.MOV AX,[BX]⑤.MOV AX,1100[BX]⑥.MOV AX,[BX][SI]⑦.MOV AX,1100[BX][SI]⑧ .MOV AX,[BP+SI+04]2、上机调试、验证教材习题3.15。
微机原理与接口技术实验DEBUG
实验二.调试程序DEBUG的主要命令实验目的:掌握调试程序DEBUG的使用方法。
实验内容:通过对一个汇编程序进行各种调试和检测,掌握调试程序DEBUG的使用方法。
DEBUG是为汇编语言设计的一种调试工具,主要用于检查、修改和执行汇编语言程序。
它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
DEBUG的作用:1.为用户提供一个可控制的交互式汇编语言运行环境,以控制和监督被调试程序的执行情况。
由于DEBUG操作容易,可以直接和计算机的寄存器以及内存打交道,可以用来汇编简单程序。
2.用户可以直接在程序中修改错误,并立即执行程序以判断这样的修改是否已经奏效,而不必对程序重新汇编来判断修改的效果。
3.DEBUG可以访问DOS的禁区,这样如果引导扇区遭病毒感染,还可以用DEBUG编程加以清除。
步骤:一.进入DEBUG (下文方括号中的项表示任选项,“<CR>”表示回车键)1.进入DOS2.进入C:盘ASM目录3.在DOS提示符下,键入命令debug [执行文件全名]〈CR〉(执行文件指“.exe”文件或“.com”文件)便可进入DEBUG。
若指定文件名,则将该文件调入DEBUG。
进入DEBUG后,出现“–”提示符,即可用DEBUG命令来调试程序。
二.DEBUG命令的规定:1.DEBUG命令中的所有字母大小写皆可;2.DEBUG命令中的数字都是十六进制的;3.DEBUG命令都是一个字母,后面有一个或多个参数;4.命令只有在按下回车键后才开始执行,任何一个命令都可以用CTRL+BREAK键来结束其执行,返回提示符“—”状态;5.命令和参数之间可以用定界符分隔,但只有在两个相邻的十六进制数之间的定界符才是必须的;6.在命令执行过程中,可以用CTRL+NUM LOCK键停止屏幕显示的卷动,以便于查看,按下任何其他键,继续卷动。
三.DEBUG的主要命令:1.显示∕改写寄存器内容命令R格式一:–r<CR> 功能:显示CPU内所有寄存器内容和标志位状态。
DEBUG的主要用途及DEBUG的调用
第一节DEBUG的主要用途及DEBUG的调用DEBUG是为汇编语言设计的一种调试工具,它通过单步执行、设置断点等方式为汇编语言程序员提供了非常有效的程序调试手段。
DEBUG可以直接用来检查和修改内存单元、装入、存储及启动运行程序、检查及修改寄存器,也就是说DEBUG可深入到计算机的内部,可使用户更紧密地与计算机中真正进行的工作相联系。
不仅如此,对汇编语言初学者来说,DEBUG也是练习使用汇编指令的一种有效工具。
初学者可以直接在DEBUG环境下执行汇编指令。
然而,在DEBUG下运行汇编语言源程序也受到了一些限制,它不宜汇编较长的程序,不便于分块程序设计,不便于形成以DOS外部命令形式构成的 .EXE文件,不能使用浮动地址,也不能使用ASM和MASM提供的绝大多数伪指令。
在DOS系统中,DEBUG是以DOS外部命令文件形式提供给用户的,名为DEBUG.EXE。
命令文件DEBUG.EXE一般存放在DOS 子目录下,因此调用DEBUG时,只需在DOS提示符下键入: DEBUG [<驱动器名>:][<路径>][<文件名>[.<扩展名>]][<参数1>][<参数2>] < 回车>例如: C:/DOS>DEBUG A: B:进入DEBUG的提示符是符号“-”。
即,出现提示符“-”就表示可以接受DEBUG命令了。
当进入DEBUG时,寄存器和标志设成以下数值,这些值用于DEBUG调试中的程序。
段寄存器CS,DS,ES和SS均指向DEBUG末尾的第一个段。
IP寄存器置为0100H。
栈指针SP指向尾部或装入程序的暂存部分的底部。
其余寄存器皆取零值,但若用户调用时含文件说明,则CX含文件长度(长度大于64K时BX含长度的高位);标志为各自的复位值;驱动器传送地址在代码段位移80H处。
注意,若DEBUG装入扩展名为.EXE的文件,则DEBUG需重定位且设置段寄存器指示器为文件中所定义的值。
汇编步骤和Debug使用方法.
实验预备知识汇编程序的建立与调试一、汇编程序的建立1. 使用工具(1)EDIT,记事本等文本编辑软件,编辑源程序,保存为.asm文件;(2)ASM,MASM汇编程序,对源程序进行汇编,生成.obj文件-目标文件,以及调试用.LST-列表文件和.CRF-交叉引用表;(3)Link连接程序,对使用的目标文件和库文件进行连接,生成.exe文件,同时调试用.map-地址映像文件;如果源程序无语法错误,上述三步将生成可运行的.exe文件,如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存在错误,需要进行调试。
(4)Debug调试程序,对.exe文件进行调试,修改,直到程序正确。
图3 目标程序生成步骤图2. 编程过程(1)用文本编辑软件,编写扩展名为.asm的源文程序文件。
(2)用汇编程序对编好的源文件进行汇编。
命令行:masm [*.asm] ↙如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。
使用MASM50汇编程序进行汇编,输入命令行masm或者masm *.asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:汇编程序可生成三个文件,*.obj,*.lst和*.crf。
*.obj-目标文件,用于连接生成可执行文件;*.lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于调试;*.crf-交叉引用文件(可选),给出了用户定义的所有符号和对每个符号定义、引用的行号。
(3)目标文件的连接命令行:link [*.obj] [*.obj] [*.lib] ↙连接程序,将多个目标程序及库文件,连接生成可执行的*.exe文件,同时可选择生成*.map文件。
*.map-地址映像文件,给出内存地址分配的有关信息。
下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*.exe文件。
用debug调试程序
实验二用DEBUG调试程序一、实验目的学习利用DEBUG调试程序的基本思想及方法二、实验环境:1.硬件:PC微机2.软件:DOS系统、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE三、实验内容利用DEBUG调试程序,可以将一个可执行程序(如.EXE、.COM等)装入内存中,并接管对程序运行的控制权,通过采取如反汇编、断点运行、单步执行、寄存器内容修改等方法,对可执行程序进行跟踪、调试,以找出其中的设计错误,然后再对源程序进行相应修改,重新生成正确的可执行程序。
1.准备被调试程序:假定所有有关文件均在当前路径C:\MYTEST>下,按照实验一的步骤生成一个被调试的可执行2.进入DEBUG环境:(其中斜体部分由键盘输入。
)其中,短线‘-’作为DEBUG环境的操作提示符,在此提示符下,可以输入各种DEBUG 命令,对可执行程序TEST.EXE进行跟踪调试。
3.主要调试命令:1)反汇编命令U:将存储器中的二进制数据翻译成较有意义的助记符形式,以帮助理解。
一般常用以下格式:a)-U↘:从当前IP处开始,对连续约32字节内容反汇编。
如对TEST.EXE,刚装入DEBUG时的IP=0000,则在输入U命令后有如下显示:在上例中,12B7:0000表示CS:IP的内容(其中CS的值是动态值);B8B612代表该处存放的二进制数据,亦即指令MOV AX,12B6的机器代码;当连续约32字节的数据反汇编完后,重新回到DEBUG提示符“-”下,如果再键入U命令,则将继续对后面的内存区反汇编。
特别应该注意的是,由于反汇编命令针对内存区的二进制数据,而被调试程序仅占内存区的某一部分,故反汇编出来的内容并非全是被调试程序的代码,如上例中的JMP 0063以后的部分,显然不是TEST.EXE的内容。
另外还需注意,DEBUG默认使用十六进制。
b)–U 0123↘:从指定的IP=0123处开始,对连续约32字节内容反汇编。
实验二 汇编语言程序上机过程及调试
实验报告二课程微机原理实验名称汇编语言程序上机过程以及调试第页专业电子信息班级__ __ 学号_ __ 姓名实验日期:2014 年 3 月10 日报告退发(订正、重做)一、实验目的学习汇编语言程序设计的基本步骤,即编辑(EDIT)程序、汇编(MASM)、连接(LINK)和运行,使对汇编语言程序设计有一个初步的认识。
二、实验内容1、学习使用全屏幕文本编辑软件EDIT。
用EDIT输入一段给定的源程序。
2、用MASM对已存盘的源程序进行汇编,形成目标文件(.OBJ);如有错误,再返回到EDIT进行修改。
3、用LINK对上述形成的目标文件进行连接,形成可执行文件(.EXE)4、在DOS提示符下运行该可执行文件。
[汇编语言程序的编写格式]汇编语言程序一般由几个段组成,它们分别是堆栈段,数据段,代码段。
任何一个源程序至少必须有一个代码段和一条作为源程序结束的伪指令END。
段的定义有两种格式,分述如下:1,完整的段定义格式:一个段由段头,段体,段尾组成,形式如下:段名SEGMENT[定位类型][组合类型][‘类别’]……段名ENDS其中SEGMENT后的参数一般可省略,详细说明参阅后面的有关章节。
2,简化的段定义格式(MASM5.0版本提供)每段以.开始后跟固定的段名,一般形式如下:DOSSEG.MODEL 存储类型;“存储类型”可选择为SMALL。
.STACK[大小];堆栈段,“大小”指定堆栈的字节数。
.DATA;数据段。
.CODE[名字];代码段;一般只有一个代码段,名字可缺少……例1:用完整的段定义编写一源程序。
NAME EXAM1;可以省略DATA SEGMENT;定义数据段,以下是数据段的内容STR1 DB “HELLO,WELCOME!”,13,10,‘$’STR2 DB “DO YOU LIKE COMPUTER?(Y/N)”,13 10,‘$’STR3 DB “NICE!”,13,10,‘$’STR4 DB “SORRY!”,13,10,‘$’STR5 DB “UNKNOW,ANSWER AGAIN!(Y/N)”,DB 13,10,‘$’STR6 DB “SEE YOU NEXT TIME!”,13,10,‘$’DA TA ENDS ;数据段结束CODE SEGMENT ;定义代码段ASSUME CS:CODE;DS:DATA;以下是代码段内容START:MOV AX,DA TA;给数据段寄存器赋值MOV DS,AXMOV AH,9;显示一字符串的功能号MOV DX,OFFSET STR1;显示字符串STR1的偏址INT 21H;DOS功能调用ASK :MOV DX,OFFFSET STR2;显示字符串STR2INT 21HMOV AH,1;键盘输入一字符的功能号INT 21H;键入的字符ASCⅡ码在ALNOT AL;求反TEST AL,‘Y’;是否按下‘Y’或‘y’键JE NEXT1TEST AL,‘y’JE NEXT1TEST AL,‘N’;是否按下‘N’键或‘y’键JE NEXT2TEST AL, ‘n’JE NEXT2MOV DX,OFFSET STR5;不是按上述键MOV AH,9INT 21HJMP ASK;再返回ASKNEXT1:MOV DX,OFFSET STR3;是按下‘Y’或‘y’键MOV AH,9INT 21HJMP BYENEXT2:MOV DX,OFFSET STR4;是按下‘N’或‘n’键MOV AH,9INT 21HBYE:MOV DX,OFFSET STR6INT 21HMOV DL,7;喇叭响的ASCⅡ码MOV AH,2INT 21HMOV AH,4CH;退回DOSINT 21HCODE ENDS;代码段结束END START;源程序结束注:源程序中的每一行注释语句前一定要加分号‘;’,下同。
8086汇编语言学习(二)8086汇编开发环境搭建和Debug模式介绍
8086汇编语⾔学习(⼆)8086汇编开发环境搭建和Debug模式介绍1. 8086汇编开发环境搭建 在上篇博客中简单的介绍了8086汇编语⾔。
⼯欲善其事,必先利其器,在8086汇编语⾔正式开始学习之前,先介绍⼀下如何搭建8086汇编的开发环境。
汇编语⾔设计之初是⽤于在没有操作系统的裸机上直接操作硬件的,但对于⼤部分⼈来说,在8086裸机上直接进⾏编程将会⾯临各种困难。
好在我们可以使⽤软件模拟器来模拟硬件进⾏8086的学习实践。
在《汇编语⾔》中作者推荐通过windows环境下的masm和debug进⾏学习。
masm介绍: masm是⼀款DOS下的汇编⼯具包,在8086汇编的学习中我们需要其中的⼏个⽂件,分别是masm.exe,link.exe。
masm.exe 汇编器,⽤于将⽂本格式的汇编语⾔源⽂件编译为.obj结尾的⼆进制⽂件,其⽣成的.obj结尾的⼆进制⽬标⽂件是被编译的源⽂件的对应的机器码。
单独的源程序⽬标⽂件通常是⽆法直接运⾏的,还需要和互相依赖的其它同样编译完成的⼆进制⽂件链接在⼀起才能⽣成最终的可执⾏⽂件(⽐如所需要的静态库函数) 。
因此,obj⽂件通常也被叫做中间⽂件。
link.exe 链接器,obj⽂件需要通过链接才能转换成可执⾏程序,⽽链接器就是负责完成这⼀任务的。
链接器能将多个obj⽬标⽂件以及其所依赖的库程序进⾏统⼀处理(例如多个⽬标⽂件中指令、数据内存地址的偏移处理),并⽣成可执⾏⽂件。
debug介绍: debug.exe 调试器,windows提供了⼀个在dos中调试8086汇编程序的⼯具debug.exe,提供了展⽰程序运⾏时CPU中各寄存器、内存中数据,指令级的单步调试等功能。
debug程序的使⽤会在本篇博客的后半段进⾏详细介绍。
64位操作系统兼容性问题: 由于《汇编语⾔》⼀书出版较早,当时的windows系统还是32位的,32位windows系统都默认安装了masm与debug,能打开dos窗⼝直接使⽤。
实验二 DEBUG使用方法
实验二DEBUG使用方法一、实验目的1.熟悉DEBUG提供的调试环境。
2.学习使用Debug的常用命令,汇编、运行小段程序。
3.学习8088/8086的寻址方式、指令功能。
观察计算机执行简单程序的工作过程。
二、实验内容与操作指导Debug子命令的功能与使用格式见上章的列表介绍。
下面通过8个程序小段实例,学习其用法。
(一)由DOS进入DEBUG调试环境1.点击”开始”→程序→附件→命令提示符→DEBUG ↵将调试程序装入内存注意:当机器控制权由DOS成功地转移给调试程序后,将显示“—”号,它是debug的状态提示符,表示可以接受调试子命令了。
2. —R↵显示CPU中各寄存器当前初始内容。
请记录于下列各项,后面实验将用到。
AX= BX= CX= DX= BP= SI= DI=DS= ES= SS= SP= CS= IP=(1)此时,调试工作区的4个段值相同,指向同一起点。
表明共用一个64KB空间。
(2)SS:SP指向堆栈顶单元。
SP为FFFE或FFEE,正好是本段的最高可用地址。
表明堆栈自动使用最高地址,栈区由底往上(低址方向)生长。
(3)CS:IP为约定的调试工作区地点(IP=0100),可由此装入待调试程序代码,或汇编键入的程序小段。
工作区由(低址)往下使用。
(4)Debug用符号给出寄存器中8个标志位的当前状态。
其含义如下表所示。
(5)当运行程序至断点处停下时,或单步多步跟踪执行指令时,Debug均显示各寄存器的当时内容,便于及时观察结果。
(二)汇编运行小段程序1.1求和运算给程序1.1人工直接给寄存器赋初值(1) 给AX、BX赋值—RAX ↵AX 显示AX当前内容:FDAA 键入被加数—RBX ↵BX 显示BX当前内容:FBCE 键入加数(2) 汇编小段程序。
注意:每行指令后用回车结束,机器即进行汇编,出错将有提示。
调试状态下操作数的输入和显示均为HEX十六进制,故不必加后缀H。
—ACS:100 ↵:0100 ADD AX,BX ;求和:0102 MOV CX,AX ;转存和数:0104 INT 20 ;结束程序(软中断调用):0106 ↵;结束汇编—R ↵查看各寄存器内容。
汇编语言程序设计debug调试命令
标志位:
“1”
“0”
OF:溢出标志 —— OV溢出, NV没溢出
DF:方向标志 —— DN减量, UP增量
IF:中断允许标志 —— EI允许, DI禁止
SF:符号标志 —— NG负数, PL正数
ZF:“0”标志
—— ZR为“0”, NZ不为“0”
下次课预习内容:顺序结构程序设计
要求:1、实验指导书及实验报告上的预习内容 2、预习验收时要提供设计的源程序磁盘或笔写程序
-E CS:211 21 2A
;从CS:211H开始输入2个字节的内容
-E 110 ‘anything’
;输入从DS:110H开始的字符串
⑹ D(显示存储器的内容):
默认寄存器是DS,格式是:
-D段地址:偏移地址
;显示80H个字节的内容。
-D
显示从上一次结束处开始的80H个字节 的内容。
⑺ R(显示修改寄存器内容) -R ;显示所有寄存器内容。 -RDS ;显示并可修改DS的内容。 -RF ;显示并可修改标志寄存器
实验数据记录注意事项:
1、实验报告第三页:表格中标志位与计算机 自动给出的不是一一对应的,要求记录1/0
2、实验报告第四、五页:列出调试运行后的程序清单
因为行汇编不识别标号,所以:用行汇编运行的程
序中没有行号,转移指令处是绝对地址。
验收内容:
1、用T命令执行完程序最后一条指令处的界面:
-T =段地址:0
-G=段地址:偏移地址
-G
;从程序当前位置执行到
程序结束
-G =200 260
;从指定200H地址开始执行, 遇到断点
debug调试
DEBUG调试DEBUG.EXE是Windows自带的用于调试可执行程序的一个工具软件,可在命令提示符下计入,同时也是进行汇编语言程序设计的一种最有效的调试工具。
由于DEBUG调试程序可以对单条指令或几条指令组成指令序列进行汇编、执行,并可以观察到指令执行前后在寄存器或内存中的结果,并对指令中错误的使用予以拒绝汇编,对于初学指令的读者,通过DEBUG调试程序对指令的调试,不但对指令的功能,格式,影响FLAGS寄存器的状况有个直观的了解,还可以进一步了解数据在计算机中存放的格式、使用指令时应该注意的问题乃至计算机的工作原理。
1 DEBUG命令格式1.1 DEBUG调试程序的启动在命令提示符下,可键入如下命令启动DEBUG调试程序:DEBUG [路径\文件名] [参数1] [参数2][路径\文件名]是供DEBUG调试程序调试的程序名称及路径。
若Debug后不带文件名,仅运行Debug程序,在需要时,再用N和L命令调入被调试程序;若命令中带有被调试程序名,则运行Debug的同时,还将指定的程序调入主存;[参数1][参数2]被调试程序所需要的参数。
“DEBUG 文件名”方式的调试方式只启动DEBUG的调试方式在Debug程序调入后,根据有无被调试程序及其类型相应设置寄存器组的内容,发出Debug的提示符,此时就可用Debug来调试程序。
若启动DEBUG调试程序时,被调试程序扩展名是.EXE,则需要重新定位。
此时,CS:IP和SS:SP根据被调试程序确定,分别指向代码段和堆栈段。
DS=ES指向当前可用的主存段,BXCX包含被调试文件大小字节数(BX为高16位),其他通用寄存器为0,状态标志都是清0状态。
如上图所示,被调试的程序名是XIANSHI.EXE,在DEBUG调试程序提示符“-”下键入R命令,是显示当前CPU中所有寄存器的值,可见,CS:IP=0B60H:0000H(DEBUG调试程序中所有的数据均为十六进制,但不加尾标H),SS:SP=0B4BH:0000H,是由被调试的程序XIANSHI.EXE决定的,分别指向代码段和堆栈段。
- 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字节加数,均为低字节在前面。