彙編語言中loop指令的運行過程解析

Date: 2014年12月8日 23:04:43

By   : BadTudou


        關於loop指令的執行過程,王爽在其《彙編語言(第2版)》給出瞭如下說明:


        loop s


        ① (cx) = (cx)-1

        判斷cx中的值,不爲0則轉至標號s所標識的地址處執行,如果爲零則執行下一條指令。

         (注:(cx)代表cx寄存器的值)

               可以看出,loop語句的執行,主要與cx寄存器的值是否爲0有關。這一點,可以理解。存在疑惑的是它的執行過程。例如有如下代碼


     ①     mov  ax,2h


         mov  cx, 2h

    s: add  ax, ax

         loop s


       執行上面的代碼時,其執行順序是什麼?

       1.①——>②——>③——>④

       2.①——>②——>④——>③


       按照順序1執行,ax的值是8h;


       按照順序2執行,ax的值是4h;


       起初,我以爲執行順序是1,因爲屬於s標識的一部分,所以程序執行時,首次會先跳過,直接執行,然後再根據cx寄存器的值判斷是否執行。結果發現是錯的,因爲上面的代碼執行之後,ax寄存器的值是8h。因此,正確的執行順序是1.


       再回過頭來看,《彙編語言》中只談及loop指令的執行過程,也就是說,其執行過程僅針對loop指令所在的單行語句有效,其有效範圍並未包括s標識。如此,便可以解釋上面的代碼在運行後ax寄存器的值爲8h而不是4h。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章