码迷,mamicode.com
首页 > 其他好文 > 详细

实验四

时间:2018-11-24 22:21:37      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:计算   idt   教材   开始   复制   编译器   根据   逻辑   deb   

实验结论

实验任务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。

实验四

标签:计算   idt   教材   开始   复制   编译器   根据   逻辑   deb   

原文地址:https://www.cnblogs.com/lingana/p/10013629.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!