汇编实验四

  这章的实验的主要内容是掌握 loop 和 [bx] 的用法。

  实验一的内容是编写代码完成向 b800:07b8开始的连续的16个字单元重复填充0403H。

  这次我们直接在 dosbox 下编写代码,编写代码如下:

  

  接下来,我们保存为t4.asm,然后编译、链接、运行它看看。结果如图:

  

  图中多了16个红心。将0403h 改为 0411h后,再次编译、链接、运行,如图:

  

  

 

  

  实验二是向内存 0:200~0:23f 依次传送数据 0~63。这个实验和实验一类似只需改动一小部分即可。代码如图:

  

  接下来我们保存它为t5.asm,然后编译、链接、调试它,看看结果对不对。

  我们 debug t5.asm。用 u 命令找到 loop 对应的 ip,然后直接 g 命令到 loop 执行完,再用 d 命令查看0:200~0:23f 的值。过程如图。

  

  

  结果代码正确的将值送入了对应的内存,和我们预想的一样。

 

 

  接下来我们用栈来实现数据的传送。代码也很简单,解决如何将单个字节压入以字为单位的栈即可。只需要设置一个容量为32以上的栈(我只设置了6个字节的栈),然后将0~63两两组合,大的放在 ah,小的放在 al,压入栈,重复直至结束,然后再依次弹出入对应内存即可。(入栈顺序也可以和弹出入内存的顺序都颠倒一下,入栈出栈的顺序注意一下即可。)代码太长,我把它贴在记事本里。代码如下:

  

   保存为t5-1.asm,同样的编译、链接、调试它,过程如下:

  

  

  结果和我们预想的一致。

  

  实验三的内容是将一段代码中的一部分代码复制到内存0:200。补全程序,并调试。代码如下:

  

  我的答案如下:

  

  填空的依据是:

  第一空,因为,我们要把代码本身复制,那么数据段也应该是代码段,所以此处应该填 cs 。(从循环中第一个指令也可以看出。)

  第二空,是数出来的。常量数值(如:0010h,10h)都占两个字节,其余都占1个字节。从0开始数,到 loop s 结束,一共21个字节,换算成16进制为:15 h。由于循环判断条件为 cx 是否为 0,所以,15+1=16。所以答案为16h。(当然不换算也可以,不换算答案为22 )

  我们来编译、连接、调试一下,看看是否正确。过程如下:

  

  

  结果和我们预想的一致。

 

  

  总结与体会:

  通过这次实验,我掌握了 loop 和 [bx] 的使用,也学会了数代码字节数。

 

转载于:https://www.cnblogs.com/Willeasun/p/10017227.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值