5.3在Debug中跟踪用loop指令实现的循环程序

来源:互联网 发布:^ c语言 编辑:程序博客网 时间:2024/06/05 15:58

 问题:计算ffff:0006单元中的数乘以3,结果存储在dx中。

解答:

一:分析思路:

1.运算后的结果是否会超出dx所能存储的范围? ffff:0006单元中的书是一个字节型的数据,8位的,其范围在0到2的八次方之间,取其最大值是2的8次方,即255。则用它和3相乘后的值是255×3=765=02fdh。而dx所能存储的最大数值是2的16次方,即65535=0ffffh,很明显的是02fdh是小于0ffffh的。所以结论是可以在dx中存放。

2.将其乘以3,等同于把其相加3次,可以考虑用循环了。可以先把ffff:0006单元的值放入ax中,但是ffff:0006中的数据是8位的,而ax是16位的。故应该把ax的高位清零。其次,要循环3次,把3送入cx中。

二:源代码编写:

三:编译连接过程如下:

运行masm.exe,然后输入源代码路径

  

运行link.exe 输入需要连接的obj文件

三:调试过程如下

 从过程可以看出结果为012fh。如果我们想跳过开始的几个步骤直接跳到循环出执行,可以先查看循环出的内存单元地址应该是多少,如本题中为cs:0010,则可以用指令g 0010,当按下enter键之后,程序将会执行到add dx,ax处停下来,等待我们开始继续调试。如果想让循环一次执行完,可以用p命令来达到目的。当然也可以用 g 0014也可以达到同样的目的。