天骥★传神 发表于 2012-9-28 21:07:19

容易混淆的问题之 loop

   mov cx,0      
s: add ax,ax   
   loop s
问一个容易混淆的问题。 CX刚开始就等于0 那么他是先执行一次 add ax,ax   结束呢 还是 直接结束呢?

意思也就是 说 他是 先判断后循环 还是先循环后判断呢(不管条件有没有满足先执行一次)。?非常容易混淆!!求解答!

Seandor 发表于 2012-9-28 23:04:39

程序是一步一步向下执行的,先执行mov cx, 0, 然后是add ax, ax,再然后就是loop s, 这句啊,执行最后这句时就判断cx是否等于0, 按这题来说cx刚好为0, 所以就不跳转了,继续向下执行。这有疑惑吗,没按出来。

补充内容 (2012-9-28 23:06):
现在不可以修改回答了啊,我多打了几个字。。。

Seandor 发表于 2012-9-28 23:12:33

http://bbs.fishc.com/dreambred_dir/apple_c_3/images/common//emp.gif
不好意思好久没看书都记不清了。还是得多看书啊。

Seandor 发表于 2012-9-28 23:18:12

唉,图片又没了。本来要发的图上是这么写的“CPU在执行loop指令的时候, 要进行两步操作, 一、(cx) = (cx) - 1, 二、判断cx是否为0, 不为零则转至标号处, 为零则继续向下执行。“
你是因为debug看到了它转至标号处才产生这样的疑惑的吧。因为(cx) - 1后不为零啊,至于等于多少你自己debug看吧 。

GeV20 发表于 2012-9-28 23:23:29

貌似是执行到 loop时,先减一再判断是否为零.循环很多次.

Black_F.c 发表于 2012-10-7 22:59:39

先判断后循环
页: [1]
查看完整版本: 容易混淆的问题之 loop