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。