該程式涉及到雙重迴圈,這裡考察到迴圈時對cx暫存器的壓棧以及出棧,首先寫出外部迴圈,並對cx暫存器賦值之後,寫出相應的操作,當寫內部迴圈的時候,也是需要為cx暫存器賦值,如果不進行保護,則會覆蓋外部迴圈的cx暫存器的值,這裡就需要保護外部迴圈的相關資料(這裡相關資料的意思就是外部迴圈中用到的暫存器的內容,在內部迴圈之中也有用到),所以要通過push壓進棧保護起來,例如,push cx ,則可以對cx暫存器重新賦值,書寫到內部迴圈之中,當內部迴圈結束之後,pop cx,將保護的cx暫存器的值彈出棧,這裡的cx暫存器中的值,就是之前保護起來之前的值,運用push,pop指令值書寫多重迴圈的關鍵
datas segment
;此處輸入資料段**
datas ends
stacks segment
;此處輸入堆疊段**
stacks ends
codes segment
assume cs:codes,ds:datas,ss:stacks
start:
mov ax,datas
mov ds,ax
mov dx,0000h ;將dx,cx初始化
mov cx,0000h
mov dl,10h ;列印從10h到ffh的ascii碼(儲存第乙個要列印的ascii碼)
mov cx,000fh ;外層迴圈(行數)
loop_wai:
push cx ;儲存外迴圈的次數
mov cx,0010h ;內層迴圈次數,就是列數
mov ah,02h
loop_nei:
int 21h ;列印ascll
push dx ;這裡為了美觀列印空格,要為dl賦值,則需要將dx內容保護起來
mov dl,00h
int 21h ;輸出空格
pop dx
inc dx ;使dx的內容自加1
loop loop_nei
;此時這裡已經進行完一次內迴圈
pop cx ;彈出之前儲存起來的外部迴圈的次數
push dx ;儲存dx,因為要列印出換行
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx ;列印完畢之後彈出保護起來得dx
loop loop_wai
mov ah,4ch
int 21h
codes ends
end start
上述源**中注釋已經清楚了,希望對你有所幫助
這就是執行結果:
雙重while迴圈實現列印數字11 99
問題 為什麼下面的while雙重迴圈是這樣的結果?x 1 y 1while true while y 9 x x 1 y y 1 print x 10 y 執行結果 分析 這是程式執行流程 x 2,y 2,x 10 y 22 x 3,y 3,x 10 y 33 x 9,y 9 y之前為8,符合內層迴...
雙重迴圈巢狀原理列印乘法表
宣告 本人學識有限,文中如有錯誤或不當之處,請各位指出,謝謝!什麼是雙重迴圈巢狀呢,就是在乙個迴圈體for或者while迴圈體內再巢狀乙個迴圈體,那麼為什麼要用這個雙重迴圈巢狀呢 有的時候乙個迴圈體不能夠得到我們想要的結果,必須要用多個迴圈來實現。雙重迴圈在這裡我用for做了1個乘法口訣表舉例 首先...
雙重for迴圈的優化
demo如下 public class testm private static void aaa system.out.println system.currenttimemillis s private static void bbb system.out.println system.curr...