loop 循環次數

在彙編中能夠使用 loop 段地址:偏移地址 並配合 cx 達到循環執行的目的,可是在一些資料中看到說,cx 是循環的次數,我以爲這是不對的。oop

好比下面這段代碼的做用是使得最終的 ax 中的值爲 3code

assume cs:code

code segment

start:  sub ax, ax
        mov bx, 1
        mov cx, 3
lp:     add ax, bx
        loop lp
code ends
end start
  1. 首先,將 ax 置 0
  2. 將 bx 內容置爲 1
  3. 將 cx 的內容置爲 3
  4. ax 中的內容加 1,加後 ax 的內容是 1
  5. 進入 loop 指令

loop 指令的執行步驟是這樣的循環

  1. (cx) = (cx) - 1
  2. 判斷 cx 中的值,不爲零則跳轉至標號處繼續執行

那麼整個 loop 的步驟是語言

第 1 次loop

cx = 3 - 1
cx 爲 2 大於 0 
ax 累加 1,此時 ax 中的值爲 2

第 2 次while

cx = 2 - 1
cx 爲 1 大於 0
ax 累加 1,此時 ax 中的值爲 3

第 3 次co

cx = 1 - 1
cx 爲 0
結束循環,ax 再也不繼續累加

因此,雖然 cx 開始時被設置成了 3,可是循環的次數並非 3,而是 2。若是用 c 語言去描述這段彙編的執行順序應該是tar

int cx = 3;
int ax = 0;

ax++;

cx--;
while(cx){
    ax++;
    cx--;
}
相關文章
相關標籤/搜索