【实验四】[bx]和loop的使用

四、实验结论

任务一:

(1)

①当我写 mov ax,b800h时,编译报错了。

【实验四】[bx]和loop的使用

②清屏后运行【实验四】[bx]和loop的使用

(2)将源代码程序中字数据0403H→修改为0441H,再次运行,图案发生了变化。

【实验四】[bx]和loop的使用

任务二:

(1)

①源代码:【实验四】[bx]和loop的使用

②用debug执行并查看内存单元的值。(用了p命令和t命令的单步执行)

【实验四】[bx]和loop的使用

★★★比较懒,想用g命令,结果输入 g=076a:0000 076a:0018或者g=076a:0000 0018后,直接死机,笔记本上是这样记录的,之前程序使用前者,也没有问题,(后者是错的,千万不要写!!!!!)

 

★★★★★使用g命令,最好执行到mov ax,4c00h之前!!!

 

 

反而是下图,误打误撞不知道怎么的就对了。 

****经查阅,下图输入的g 076a:cd21,代表程序执行到此处断点

【实验四】[bx]和loop的使用

 

 

★★★还有直接g命令也可以正常结束

【实验四】[bx]和loop的使用

 

 

★★★另外,经多次试验发现,g命令必须在程序最后的代码,int 21h之前停止执行!!

(此处借用的下一个任务的代码试验)

【实验四】[bx]和loop的使用

【实验四】[bx]和loop的使用

任务三:将“mov按下,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。

分析:

要复制代码段,应该找到代码的起始地址,根据书本4.9节,程序起始地址为cs:ip(ip=0),所以第一步应该是mov ax,cs。

mov cx,___   要知道cx的值,经网上查询,要知道程序的长度,可以将cx随便附一个值,然后用debug执行,反汇编,查看mov ax,4c00h之前的代码的长度。

【实验四】[bx]和loop的使用

【实验四】[bx]和loop的使用

修改代码中cx的值,发现用r命令查看时,cx不变,程序大小并没有改变【实验四】[bx]和loop的使用

可以看出来,0000到0016,长度为23,所以mov cx,23

但r命令查看的cx值为1c,即28,它并不是有效代码段的长度,这是整个程序的长度吗??

关于es:[bx],观察到es==ds,有什么意义吗??

另外,代码命名改变了ds和cx的值,但每次执行后,他们都会变成固定的值,有点迷糊。

①编辑,编译,连接,debug执行,反汇编【实验四】[bx]和loop的使用

②debug执行并查看内存单元。

【实验四】[bx]和loop的使用

五、总结与体会

本次实验巩固了[bx]和loop的使用,虽然过程并不平缓,但好歹是做到底。

另外通过亲自实验,我了解了更多的g命令的用法,感慨果然懒惰使人进步(玩笑),弄懂后有淡淡的成就感。

不过实验中还存在些问题,还得思考解决。