实验四

实验结论

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

  源代码:

  

  运行结果:

  

  将源代码程序中字数据 0403H 修改为 0441H,再次运行。

  

 

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

   源代码:

  

  汇编、连接后进入 debug 调试,先查看寄存器的值并反汇编查看命令是否有误。

  

  用 g 命令将循环之前的语句执行完。

  

  再使用 t 命令执行第一次循环,查看有无逻辑错误。遇到 loop 指令,使用 p 命令。

   

  遇到 int 21h,使用 p 命令。

  

  调试完毕,,用 d 命令查看 0:200~0:23F,确认是否将0~63传送至此段内存区域。

  

 

实验任务3:教材实验4(3)(P121)

  源代码:

  

  汇编、连接后进入debug调试,查看寄存器的值,其中 cx 存放了程序的长度,根据 cx 可以进行精准反汇编(格式:-u [偏移地址1] [偏移地址2])。

   

  使用 t、g、p 命令调试后,用 d 命令查看0:200 之后的若干字节,观察到 0000:0200~0000:0216 中存放的的确是所编写的代码的机器码。

  

  再使用 u 命令反汇编查看 0:200 开始的程序,前几行与所编写的代码完全一致。

  

 

总结与体会

  1、实验任务1中,我一开始编程时使用的是 “mov ax, b800h” ,但是编译器报错了,经过查询资料,发现在汇编语言编程中,约定所有的立即数如果第一个数是字母,那么前要加0。

  2、实验任务3中,mov ax 后面填写的是 cs,因为根据题意要复制的内容是代码,所以要把代码段段地址赋给数据段段地址。mov cx 后面填写的是17h,因为要复制的内容是 mov ax,4c00h 前的内容,所以复制的代码是从 mov ax,cs 到 loop s。mov 用在寄存器之间占 2 个字节,用在寄存器和立即数之间占 3 个字节,inc bx 占 1 个字节,而loop s 相当于寄存器间的 mov 指令,占 2 个字节,因此可以计算出程序长度为 17h。

posted @ 2018-11-24 21:22  翎安  阅读(159)  评论(2编辑  收藏  举报