xin微机原理与汇编语言程序设计 下载本文

或(2)的规定,可设一个或多个断点地址。DEBUG程序中允许最多可设置10个断点,这些断点地址的次序是任意的。所谓断点是指程序执行到这个地址时立即停止,并显示CPU内部所有寄存器的内容以及全部标志位的状态和一条将执行的指令。主程序有两个或多个分支时,可以在每个分支上设置一个断点。这样可以观察每个分支执行的情况。为此可以在G命令中设置多个断点。当然在一次运行时,只能停在其中的一个断点上。程序员心中确定了断点地址后,就可以用G命令来设置断点。比如,想把断点设置在0120H处,则打人命令: _G0120

此时,程序在0120H处停下,并显示出所有寄存器以及各标志位的当前值,在最后一行还给出下一条将要执行的指令地址、机器语言和汇编语言。程序员可以从显示的寄存器的内容来了解程序运行是否正确。

2.T(Trace)命令

用途:执行一条或多条指令,每执行一条指令将显示所有寄存器的内容和状态标志位的状态。

格式:T=[address][Value]

说明:等号及address参数指明执行的开始地址,Value参数指明执行指令的条数。

例如:—T3:从当前地址往下执行三条指令

2. P(Process)命令

用途:执行子程序调用,或一个循环指令,或一个中断指令,或一个重复字符串指令,在下一个指令时停止。 格式:P[=address][value]

说明:当调用一个子程序、一个循环指令、一个中断或一个重复字符串指令时,发进程命令P去执行这些指令(作为一个自动操作),在下一个指令时控制返回。 注:P命令与T命令的区别是:当执行的指令是子程序调用或一个循环指令、一个中断或一个重复字符串指令时,P命令是一次执行到这个进程的结束,而T命令则仍然是一次执行一条语句命令。对于执行其他单条指令时,它们是一样的。

3. Q(Quit)命令

用途:结束并退出DEBUG程序。 格式:Q 说明:Q命令不包括把文件写回磁盘操作,它只是返回到启动DEBUG之前的状态。

9

第二部分 软件部分实验

实验一 应用DEBUG软件调试程序实验(2学时)

【实验目的】

1. 熟悉 DEBUG 程序和命令,并用它运行基本指令和查看运行结果,怎样调用 Debug

1)如何显示和修改内存单元

2)如何显示和修改 CPU 的寄存器

3)各标志位的状态是如何表示的,怎样修改标志寄存器 4) 怎样汇编与反汇编 5) 怎样执行程序 6)怎样跟踪程序

7)怎样命名和读写文件 8) 怎样退出 Debug

2. 熟悉汇编中通用传送指令。 3. 理解 指令不同的寻址方式 , 注意规定或限制使用的寄存器如 : 双操作数指令中 , 源操作数和目的操作数的地址不能同时为存储器地址 , 段跨越前缀不能使用 CS, 操作对象是地址还是地址中的内容 , 指令隐含使用的寄存器 .

【实验内容】

1. 键入 DEBUG 进入 DEBUG 控制状态,显示提示符 '- '。 2. 用命令 F100 10F 'A' 将'A'的ASCII码填入内存。

3. 用命令 D100 10F 观察内存中的十六进制码及屏幕右边的ASCII字符。 4. 用命令 F110 11F 41 重复上二项实验,观察结果并比较。

5. 用命令 E100 30 31 32 ?? 3F 将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的十六进制数是什么字符的ASCII码? 6. 用DEBUG调试和运行下列程序,记录所用的DEBUG命令和运行结果。 MOV WORD PTR [1100], 3445 MOV WORD PTR [1102], 5678 MOV WORD PTR [1106], 6732 MOV AX,[1100] SUB AX,[1102] ADD AX,[1106] MOV [1104],AX HLT

其中红色的数字可以修改。

7. 内存操作数及各种寻址方式使用程序内容: MOV AX,1234 MOV [1000],AX MOV BX,1002

MOV BYTE PTR[BX],20 MOV DL,39

10

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

写出源操作数和目的操作数寻址方式以及运算结果。

7、指令MOV [BX],AX中,操作数[BX]的寻址方式是什么?在DEBUG下执行完该指令后,如何查看执行结果? 8、可否随意在DEBUG提示符“-”后不带参数发出命令G?什么情况下使用命令G时,可不用“=”给出执行首地址? 9、加减法指令:

1)用A命令在内存100H处键入下列内容: MOV AH,34 MOV AL ,22 ADD AL ,AH SUB AL ,78 MOV CX,1284 MOV DX,5678 ADD CX,DX SUB CX,AX SUB CX,CX

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

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

思考: 这次运行还是键入T,行不行?怎么办?用R命令检查一下IP的内容。注意T命令与IP的关系。 10、带进位加减法:

1)用A命令在内存200H处键入下列内容,并用U命令检查: MOV AH,12 MOV AL ,84 MOV CH,56 MOV CL,78 ADD AL,CL ADC AH,CH MOV DH,A7 MOV DL,58 SUB DL, 7F SBB DH,34

2) 用 T 命令逐条运行这些指令 , 检查并记录有寄存器及 CF 内容。 3) 上面这段程序若改用 16 位操作指令达到同样结果 , 怎么改 ? 试修改并运行之 。

11、 BCD 码加减法 1) 内容 :

11

MOV AL ,58 ADD AL ,25 DAA

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

用16位减法指令编一个32位(4字节)数减法程序,两个源数及结果存放地址同上题。调试并做记录。

【预习要求】

1、仔细阅读书中“汇编语言上机操作过程及程序调试技术”章节内容。 2、根据实验要求,对各项结果进行预测。

【实验步骤】

1) 用 A 命令键入上述程序 ,并用T命令逐条运行。 2) 每运行一条有关内存操作数的指令 , 要用 D 命令检查并记录有关内存单元的内容并注明是什么寻址方式。

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

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

【实验报告要求】

1、十六进制数加减法手算结果及实验结果

2、常用指令练习部分的逐条运行记录,思考结果及自编程序运行记录(列出自编程序)。

3、各项实验结果记录。

4、自编程序原稿及调试后修正稿,写出原稿错在那里。 5、写实验报告,总结本次实验体会。

【实验提示】 1. DEBUG的进入

⑴如果是首次进入DEBUG编程,则只要在DOS提示符下键入DEBUG ↙,即可进入DEBUG环境,显示提示符“-”。

⑵如果要对某个程序使用DEBUG进行调试,只要在DOS提示符下键入DEBUG 文件名↙,即可进入DEBUG环境,显示提示符“-”。

【思考题】 1.指令MOV [BX],AX中,操作数[BX]的寻址方式是什么?在DEBUG下执行完该指令后,如何查看执行结果?

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

12