該程序涉及到雙重循環,這裏考察到循環時對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