將N方個(N=3,4,5)個自然數按螺旋紋路填入N*N方陣,要求程序運行時輸入參數N,然后輸 出所需的N階方陣,如N=4時輸出顯示 :
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
本程序設計主要要求用匯編語言實現數字方陣的創建。
程序提示用戶輸入任一數字n,系統接收該數字,并返回一個n階數字方陣。要求將n2個自然數按螺旋紋路填入這個n階方陣(順時針,由外向內)。本程序設計中,系統提示輸入一個3-9的數字,根據輸入的數字顯示方陣,如輸入4,輸出
要實現該功能要求,需要顯示提示字符串,接受用戶輸入,調用中斷[2],按要求顯示方陣。
具體要求:
(1)輸出提示輸入,接受在一定范圍內的指定數字(本程序為3到9之間),否則重新輸入,如果是ESC鍵,則推出程序
(2)對接受的數字進行運算,將n2個自然數按螺旋紋路填入n階方陣并顯示該方陣。

2.2.2 子程序工作流程
SHOW循環顯示子程序:

程序設計分析
算法實現并不是件簡單的事情。高級語言可以設置二維數組實現,不必考慮其位數,輸出也僅是一個元素值。而用匯編則遇到定位鼠標,才是顯示,根據程序要求,想要達到程序要求,必須對鼠標位置做精確定位[3]。匯編一次只能輸出一個字符,對于二位十進制數據時,必須作出處理分別輸出[5]。如果對于一位二進制數不做處理,輸出時的樣子非常難看。處理方案是:當輸出一位十進制數時,在十位位置填充空格,顯示效果良好[1]。根據課題的要求,主要完成一下幾方面的設計:
1.顯示提示輸入,提示輸入 ,并保證輸入大于3小于9,否則重新輸入
2.編寫子程序,用算法實現每次形如矩形的輸出,直至輸出完畢
3.在輸出時,如果是兩位十進制數,使用設計子程序分別輸出個位,十位值,若是一位十進制數,十位填充空格,輸出。
3 主要代碼實現
3.1 主模塊代碼
主模塊主要完成的功能有:在屏幕顯示提示字符串、準備接收用戶輸入的字符,若為Esc鍵,則推出程序;若為數字字符,則將其轉換成數字,并判斷數字是否在規定范圍內,然后根據數字大小調用相應子模塊,顯示方陣。該模塊主要使用了進棧、出棧,基本加減運算,賦值運算,比較運算以及流程跳轉控制。
- PUSH CS
- POP DS
- MOV AX,3
- INT 10H ;BIOS中斷,置文本顯示模式
-
- MOV AX,0B800H
- MOV ES,AX ;定位顯存
-
- MOV DX,OFFSET MSG
- MOV AH,9
- INT 21H ;提示
-
- T0: MOV AH,0
- INT 16H ;接收數據
-
- CMP AL,1BH ;Esc鍵結束程序 esc(ascii=1Bh)
- JZ QUIT
-
- CMP AL,'3' ;數據校驗,保證輸入3<al<9
- JB T0
- CMP AL,'9'
- JA T0
-
- MOV AH,0EH ;在Teletype模式下顯示字符
- INT 10H ;顯示有效數
-
- SUB AL,30H ;得到十進制數字
- PUSH AX
- MUL AL ;al*al
- MOV SI,AX ;保存矩陣最大數到si中
- POP AX
- CBW ;chang byte to word
- MOV BP,1 ;第一個元素值
- MOV DI,3*80*2
- NEXT:
- MOV CNT1,AX ;輸入數據保存到cnt1
- DEC AX ;n-1
- MOV CNT2,AX
- MOV CNT3,AX
- DEC AX ;(n-1)-1
- MOV CNT4,AX
- ADD DI,3*2
- CALL SHOW ;輸出矩陣
- MOV AX,CNT1
- SUB AX,2
- SUB DI,3*2
- CMP BP,SI
- JBE NEXT ;bp<si,則繼續執行
- MOV AH,0
- INT 16H ;等待
- JNZ START
- QUIT:
- MOV AX,4C00H
- INT 21H
-
- 3.2 顯示方陣模塊代碼
- 顯示方陣模塊主要用于控制數字及其顯示位置[4],以達到題目要求的數字按照螺旋紋路填入n階方陣中。該模塊主要運用了賦值運算,循環控制,比較運算及流程控制。
- SHOW: ;顯示方陣
- MOV CX,CNT1 ;right 向右賦值
- M1: CALL CRT
- INC BP ;下一個元素數值
- LOOP M1
- MOV CX,CNT2 ;down 向下賦值
- JCXZ P2 ;cx=0,則轉p2處
- M2: ADD DI,(80-3)*2
- CALL CRT
- INC BP
- LOOP M2
- MOV CX,CNT3 ;left 向左賦值
- JCXZ P2
- M3: SUB DI,6*2 ;下一個元素位置
- CALL CRT
- INC BP
- LOOP M3
- MOV CX,CNT4 ;up 向上賦值
- JCXZ P2
- M4: SUB DI,(80+3)*2
- CALL CRT
- INC BP
- LOOP M4
- P2: RET
-
- 3.3 顯示控制模塊代碼
- 控制模塊主要用于控制數字的顯示方式,若為一位數,則顯示個位,并補充空格;若為兩位數,則分別顯示十位和個位,以達到數字的正確顯示。主要進行了數字的修正和各位數字的分離。
- CRT:
- MOV AX,BP
- AAM ;調整指令
- OR AX,3030H
- XCHG AH,AL ;交換ah和al
- CMP AL,'0'
- JNZ P1
- MOV AL,20H
- P1: STOSB ;顯示十位
- INC DI
- MOV AL,AH
- STOSB ;顯示個位
- INC DI
- MOV AL,20H
- STOSB ;顯示空格
- INC DI
- RET
復制代碼
運行結果分析
經過上訴分析和模塊設計,編寫出完整的程序代碼。經過不斷的調試和修改得到最終程序設計。該程序能正常運行,并完成規定的功能。現將運行結果截圖如下: 程序開始運行:
圖4.1 輸入3,運行結果如下:
圖4.2 鍵入9,運行結果如下:
圖4.3
全部資料51hei下載地址:
數字方正程序exe匯編.7z
(92.81 KB, 下載次數: 5)
2021-4-22 23:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|