汇编实验四

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

这是自己第一次写的汇编代码,因为直接mov [bx],ax的原因,导致屏幕上显示的是蓝色心。

这是后来改过之后的代码,显示的是红色的心,和实验报告上的一样。inc表示内存单元加一,而ax是16位寄存器,所以第一次直接复制一个字,所以导致了第一次的错误。所以应该以字节为单位进行复制,个人观点,感觉应该是这样。

2.任务二:综合使用[bx]和loop,编写完整汇编程序,实现向内存0:200~0:23f依次传送数据0~63。

用d命令查看20:0的内存单元,显示符合题意。

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

这是按照书上要求打的代码,计算机根据cs:ip的指向进行相应的操作,所以想要复制mov ax,4c00h的代码,段地址就为当前的cs的值。

用r命令查看寄存器的情况,可以看到当前的地址为0b90:0000,所以下面用u命令对0b90:0000开始进行反汇编,得到如图所示的代码,可以看到loop s的下一条指令的地址为0b90:0017,两段地址作差就得到了循环的次数,即cx的值为17h。

4.分析与总结

例如任务一,对字单元进行复制,不可以直接用ax进行复制,而应该用ah和al分开复制,如果是字节的复制,可以直接用;

记得之前有计算2的6次方,加了好久,[bx]和loop可以直接进行循环,方便了很多,自己对[bx]和loop也算是有了一点的了解;

cx用于存储循环次数;

任务二在masm for windows上,查看内存单元时仍是0,但在debug上就是0,1,2,3等数字,代码是一样的,求解答!

posted @ 2018-11-13 19:19  计科张岩  阅读(125)  评论(0编辑  收藏  举报