实验四

1.综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个 字单元重复填充字数据 0403H。

先用ds存放段地址0b80,再给bx存放偏移地址,cx用来表示循环的次数。接着就写循环的代码,因为重复填充字数据,所以bx要+2来实现。

在编辑—汇编—连接—执行—运行成功后就可以得到结果:在屏幕中间出现一排红色的爱心。

 

(2)将源代码程序中字数据 0403H→修改为 0441H,再次运行,截图显示运行结果。

得到结果:红色的爱心变成红色的大写字母A。

 

2.综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据 0~63(3FH)。

(1)必做:综合使用 loop, [bx], mov 实现

这次是将连续的字节数据传送到字节单元里,所以用dl来间接存放这些连续的字节数据实现。

 

(2)汇编、链接无误后,灵活使用debug的t命令、g命令、p命令调试,用d命令查看 0:200~0:23F,确认是否将0~63 传送至此段内存区域。

在生成最终的可执行文件t2.exe后,用debug加载t2.exe,就可以查看程序在内存中的情况。

方法一:先用g命令可以直接得到结果程序运行成功。再用d命令查看已将0—63传送至此区域。

 

方法二:先用r命令查看CS:IP的地址,这是指向程序的入口地址,再用u命令查看。刚开始可以用t命令进行单目执行,当看到下一步执行loop s时,则直接用p命令将循环一次执行完。

最后int 21h要用p命令,则也得到了最后的结果程序运行正常。

 

3.教材实验 4(3)(P121)

因为题目的要求是把代码段内的指令当作数据,复制到目的地址。所以,源数据段ds和代码段cs相同。所以先假设程序的字节数18h,把程序段补充完整。

在调试完成后,用debug加载A3.exe,用r命令查看CX=001C,说明程序的长度为001CH-5H=17H(因为movax,4c00h/int21h这两条指令的长度等于5),则两个空填写cx和17h

 

(2)汇编连接后,灵活使用 debug 的的 t 命令、g 命令、p 命令调试,用 d 命令查看 0:200 之后的若干字节,观察是否将 mov ax, 4c00h 之前的指令复制到指定内存

方法一:先用t和p命令执行后用d命令查看0:200之后的若干字节。

方法二:再用g命令直接执行后用d命令查看0:200之后的若干字节。

结果已经将 mov ax, 4c00h 之前的指令复制到指定内存。

 

总结与体会

       这次实验比与之前的相比确实增加了一些难度,但从中也收获了不少。在实验1中有个细节问题一定要注意,在汇编源程序中,数据不能以字母开头,要在前面加0。实验1和2中存储的分别是字节单元和字单元,这个得在循环中确定变量bx是加1还是加2以及是用dl还是dx来间接存储的问题。最后就是实验3中用r命令查看寄存器里的cx是整个程序的长度。

posted @ 2018-11-25 17:05  Sgolden  阅读(176)  评论(0编辑  收藏  举报