全球旧事资料 分类
数据,首先想到的是所用寄存器的初始化问题,检查之均无误还是漏了检查CX;其次是一个严重的问题,可能是循环超出了范围在初始化了CX后,由循环控制理解错误导致,核实代码果真是这样,在第一次执行到NEXT指令时不是由LOOP跳转过来的而此时SI和DI均已经指向了各自数据段首,在执行第一次LOOP时SI,DI执行了加1操作,CX这才减1,而CX减至1时,SI和DI均已指向了最后一个数,最后结果便是加上了00080011的值。T单步跟踪验证如下:
f看来还是没仔细的检查,CX45竟忘了初始化为8了。流程图有了,可代码中却遗漏了。所以之前的猜想可能是错的,先修改之在MOV令MOVCX88。AX0之前添上指
。重新编译连接运行,查看一下结果是70相比正确结果少了
fT命令跟踪之:
如上图,第一组乘积8正确加到BX;可以推断是最后一组乘积遗漏了。
跟踪发现至CX1时,LOOP并没有执行到如下图,看来是自己理解错了,LOOP是先执行CX自减操作,再判断CX是否为零才执行跳转与否的。因此可以有两种修改方法,一是将CX初始为9,这样避免大幅度修改代码。而修改代码也不难,错误的原因是ADD到MULBX,AX放在了ALDI前导致少加了一次。直接将其移
DI之后便可。这里选择后者虽然修改前面的流程图麻烦,给自己个
教训,好下次别在这“想当然”的地方再摔倒。
f6实验结果以下均已在debug环境中。1)g运行程序,d1415000A查看M内容为06即有6个是正数正确,如图
2)g运行程序,d14150005查看M内容为07即最小数是7正确,如图
3g运行程序,d076a000a查看RESULT内容为03即有3个数为0正确,如图
f4)修改后重复以上步骤得到最终结果为78H120答案正确如下图:
7总结通过此次实验才发现自己有多么的不足,题目并不难甚至可以说是很简单。可就这么简单的几道题由于自己对一些指令没有深透的理解,给自己找了不少苦头,一二题很容易跟踪就可以找到出错位置分析修改之。至于第三题中未能一次编译通过是自己形而上学没有牢记操作数位数一致的指令规则。一个晚上大半时间是死在了最后一题上。先是又一次犯了第三题中同样的错误,原因是自己并没有真正深入理解操作数位数一致的规则,因单操作数而忽略了它,光是记住还是不行,该错误的再次出现让我深刻理解了该规则,希望以后
f仍铭记。后是CX忘了初始化,忘了,添上了就没话说,竟然一直自以为是的认为已经初始化过了而把自己引向了另一个方向,胡乱猜了一大堆可能性,引自己到了另一胡同里。直到debug调试T跟踪后r
好听全球资料 返回顶部