许昌学院微机原理实验指导书
MOV AX, DATA MOV DS, AX MOV AH, 9
MOV DX, OFFSET MSG INT 21H RET START ENDP CODE ENDS END START
注:找出本程序与Masm for Windows 6.0的example文件下的hello.asm的区别。
3. 用DEBUG调试、运行可执行程序。
1)进入DEBUG后,首先用命令R查看当前DS和IP寄存器内容,记录此值。 2)学习R,D,A,U,T,G,Q命令的使用。
3)用命令A汇编下列指令,并判断指令正误并说明原因。
(1) ROR AX,8 (2) LEA DI,[AX] (3) MOV DS,2010 (4) PUSH AL (5) OUT 900,AL (6) MOV [BX],0 (7) MOV CS, AX (8) MOV BP, SP (9) MOV IP, AX (10) MOV AX, 6[BX][SI]
4)用A命令汇编下列程序段,完成将DS:2000开始的5个字节内存内容相加,并把
相加的结果存放在DS:2005内存单元中,将程序写到硬盘上,然后用DEBUG调试并运行该程序,查看运行结果,观察程序段能否完成指定功能,若不能,说明原因。
MOV CX,5 MOV AL,0
2
许昌学院微机原理实验指导书
MOV BX,2000 ADD AL,[BX] INC BX LOOP NEXT MOV [BX],AL INT 3
NEXT:
三.预习要求
1.仔细阅读实验一后的【实验提示】及【DEBUG的启动及其基本命令的使用】中的内容
2.―汇编语言上机操作过程及程序调试技术‖内容。 3.根据实验要求,对各项结果进行预测。 四.实验报告
1.写出hello.asm程序清单、程序执行及调试过程中寄存器(含FR)的内容。 2.举例写出利用dubug调试中你所用的命令的功能。 3.分析任务3中各条指令错误原因。 4.写出做完本实验的心得体会。 五.实验提示 1.DEBUG的进入
(1)如果是首次进入DEBUG编程,则只要在DOS提示符下键入DEBUG ↙,即可进入DEBUG环境,显示提示符―-‖。
(2)如果要对某个程序使用DEBUG进行调试,只要在DOS提示符下键入DEBUG 文件名↙,即可进入DEBUG环境,显示提示符―-‖。
2.程序的汇编与反汇编
(1)源程序可以在DEBUG下,用汇编命令A输入到内存中,只需在DEBUG提示符―-‖下,键入汇编命令A ↙,并在显示―段寄存器地址:偏移地址‖后面键入你自己编写
3
许昌学院微机原理实验指导书
的程序,每键入一条,按一次回车键。 -A ↙
127B:0100 MOV CX,5 ↙ 127B:0103 MOV AL,0 ↙ 127B:0105 MOV BX,2000 ↙ ┇
(2)如果进入DEBUG时是使用―DEBUG 文件名↙‖进入的,那么在进入DEBUG状态后,可用反汇编命令U,将调入的程序显示出来: -U ↙ 127B:0100 127B:0103 127B:0105 ┇
B90500 B000
MOV CX,5 MOV AL,0 MOV BX,2000
BB0020
3.在DEBUG状态下,对所编写文件存盘的步骤
① 给程序命名
-N 文件名.COM ↙
② 将文件长度放入BX、CX中(高位放入BX,低位放入CX中)
-R BX ↙(注意!!!由于文件长度一般较小,所以切记BX中赋0值) -R CX ↙(文件最末偏移地址减去文件开始的偏移地址即文件长度) ③ 用写盘命令W把正在调试的内存中程序写入磁盘中
-W 〈地址〉↙(文件开始地址) 退出DEBUG状态用Q命令:-Q ↙
4.在DEBUG状态下,建议使用DOS分配给用户的内存可用区
在DEBUG状态下,用户可对所有寄存器、RAM内存随意查看和修改,但由于对
DOS操作系统在内存中存放情况不了解,可能会将存放有操作系统程序的内存内容破坏,从而可能引起系统的异常,出现死机现象,故建议使用DOS分配给用户的内存可用区,其低端地址是刚进入DEBUG时,用命令R查看到的DS:IP。
5.用连续执行命令G应注意问题
用连续执行命令G执行程序时,注意给出执行程序的首地址,并注意执行的程序中有
4
许昌学院微机原理实验指导书
返回DEBUG功能的程序段,如指令INT 20H或断点设置INT 3,否则发出命令后,很容易出现死机,原因是无返回程序段使系统返回命令接受状态,CPU将不断到内存中取指令、执行指令,使用户失去对系统的控制。为避免这种情况,可在用户程序段结尾加上一条INT 20H指令,或INT 3指令。
六、DEBUG的启动及其基本命令的使用
DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
1、DEBUG程序的启动
在DOS提示符下,可键入命令:
C>DEBUG[d:][path][文件名][ 参数1][参数2]
其中文件名是被调试文件的名称,它须是执行文件(EXE),两个参数是运行被调试文件时所需要的命令参数,在DEBUG程序调入后,出现提示符―-‖,此时,可键入所需的DEBUG命令。
在启动DEBUG时,如果输入了文件名,则DEBUG程序把指定文件装入内存。用户可以通过DEBUG的命令对指定文件进行修改、显示和执行。如果没有文件名,则是以当前内存的内容工作,或者用命名命令和装入命令把需要的文件装入内存,然后再用DEBUG的命令进行修改、显示和执行。
2、DEBUG的主要命令
(1)汇编命令A,格式为: -A[地址]
该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。
(2)反汇编命令U,有两种格式: 1)-U[地址]
该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。
2)-U范围
该命令对指定范围的内存单元进行反汇编,例如: -U 04BA:0100 0108或 –U 04BA:0100 L9
5
许昌学院微机原理实验指导书
此二命令是等效的。 (3)运行命令G,格式为: -G [=地址1][地址2[地址3…]
其中地址1规定了运行起始地址,后面的若干地址均为断点地址。 (4)追踪命令T,有两种格式: 1)逐条指令追踪:
-T[=地址]
该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。
2)多条指令追踪:
-T[=地址][值]
该命令从指定地址起执行n条命令后停下来,n由[值]确定。 (5)显示内存单元内容的命令D,格式为: -D[地址]或-D[范围]
(6)修改内存单元内容的命令E,它有两种格式: 1)用给定的内容代替指定范围的单元内容:
-E地址 内容表
例如:-E 2000:0100 F3 ―XYZ‖ 8D
其中F3,―X‖―Y‖―Z‖和8D各占一个字节,用这五个字节代替原内存单元2000:0100到0104的内容,―X‖―Y‖―Z‖将分别按它们的ASCII码值代入。
2)逐个单元相继地修改:
-E地址 例如:-E 100:
18E4:0100 89.78
此命令是将原100号单元的内容89改为78。78是程序员键入的。
(7)检查和修改寄存器内容的命令R,它有三种方式: 1)显示CPU内部所有寄存器内容和标志位状态;格式为:-R
R命令显示中标志位状态的含义如下表所示:
标 志 名 溢出Overflow(是/否) 置 位 OV 复 位 NV
6