雙重迴圈列印ASCII的10H到FFH

2021-07-25 07:17:23 字數 1367 閱讀 4805

該程式涉及到雙重迴圈,這裡考察到迴圈時對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...