实验任务

(1)使用Debug,将下面程序段写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化。

机器码

汇编指令

b8 20 4e

mov ax,4e20

05 16 14

add ax,1416

bb 00 20

mov bx,2000

01 d8

add ax,bx

89 c3

mov bx,ax

01 d8

add ax,bx

b8 1a 00

mov ax,001a

bb 26 00

mov bx,0026

00 d8

add al,bl

00 dc

add ah,bl

00 c7

add bh,al

b4 00

mov ah,0

00 d8

add al,bl

04 9c

add al,9c

 

提示:可用E命令和A命令以两种方式将指令写入内存。注意用T命令执行时,CS:IP指向。

 

使用【A命令】

 

使用【E命令】

【U命令】返汇编

 

【T命令】单步调试

 

 

(2)将下面3条指令写入到2000:0开始的内存单元中,利用这3条指令计算2的8次方。

mov ax,1

add ax,ax

jmp 2000:0003

 

使用【A命令】将命令写入

这三条命令是一个循环,中间省略部分执行过程

结论:最后可得2的8次方为100H

 

 

(3)查看内存中的内容

PC机主板上的ROM中写有一个生产日期,在内存FFF00H~FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。

提示:如果读者对实验结果感到疑惑,请仔细阅读第1章中的1.15节。

 

首先使用【D命令】查看从 FFF0:0 起的 ff 个地址,发现最后一行为生产日期,再使用【E代码】试图进行改写日期的值,修改完毕后,再次用【D命令】查看从 FFF0:0 起的 ff 个地址,发现值并未发生改变,修改失败,所以无法对其进行修改

 总结:个人无法通过debug环境对内存中的内容进行修改

 

4)向内存从B810:0H开始的单元填写数据,如:

-e B810:0000  01 01 02 02 03 03 04 04

请读者先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。

提示,如果读者对实验结果感到疑惑,请仔细阅读第1章中的1.15节。

将原代码写入,得:

输出的图形为:

 

修改代码前面的四个值

输出的图形为:

 

修改代码后面的四个值

输出的图形为:

 

 

修改代起始地址的值

图形与之前相比,并未发生变化

总结:修改后面的数值,会对出现的图形产生影响,不同的数字对应不同的图形。修改地址后,将不再发生变化,说明在b810:0这个地址下才会显示这类图形

 

实验总结与体会

(1)进入debug环境的方法

补充说明:debug中默认16进制,不区分的小写

打开dosbox,输入以下内容进入debug环境

 

 输入【?】查看帮助

(注意一些命令的书写格式)

 

输入【D】查看内存单元

1.直接输入D,则查看CS:IP为首地址的128个值

2.d  0:200,则查看以0:200为首地址的128个值    

3.d  0:200  203,则查看以0:200为首地址到0:203结束的所有值

4.d  0:200  l4,则查看以0:200为首地址的4个值(‘l’是‘L’的小写)

 

输入【R】查看寄存器

 

输入【E】修改内存单元

1.e  0:200  10  20  30  40  50 ,则修改从0:200开始的五个值

2.e  0:200,回车后会显示1 10._ ,输入新的值对其进行修改,当想继续修改下一个值的时候则摁“ ”(空格),修改完毕则回车

3.e  0:200  ‘a’  ‘b’  ‘c’,则会修改从0:200起,三个值,显示的时候只会显示其对应的16进制:61  62  63(单个用单引号引起来)

4.e  0:200  “def”,则会修改则会修改从0:200起,三个值,显示的时候只会显示其对应的16进制:64  65  66(多个用双引号引起来)

 

输入【A】编写汇编命令

1.a  则直接以CS:IP为首地址

2.a  0:200 则从0:200开始,不再根据CS:IP的值

 

输入【T】进行调试

1.t,单步调试

2.t = 0:200,则从0:200开始单步调试

3.t  2,则执行从当前位置起的条语句

4.t = 0:200  3,则从0:200起执行3条语句

 

输入【G】进行调试

1.g  0112,则执行到0112之前

2.g  0:200  0:208,则执行0:200至0:208,显示最后的结果

3.g  则从当前IP运行至程序结束

 

输入【P】进行调试

当有语句如:int 21 时

 

输入【U】返汇编

 

补充说明:(T/P/G 比较)

1.T命令,单步执行,遇到子程序后会进入子程序逐条执行指令

2.P命令,与T命令类似,遇到子程序后会直接执行完子程序的全部指令,遇到循环命令时,会直接执行至CX递减至0

3.G命令,多步执行,可以跟地址和断点,运行到制定位置的指令后暂停,若不加参数则从当前IP运行到程序结束