找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2741|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

匯編語言實(shí)現(xiàn)數(shù)字方陣程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:910466 發(fā)表于 2021-4-22 19:17 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
將N方個(gè)(N=3,4,5)個(gè)自然數(shù)按螺旋紋路填入N*N方陣,要求程序運(yùn)行時(shí)輸入?yún)?shù)N,然后輸 出所需的N階方陣,如N=4時(shí)輸出顯示 :
1   2   3   4
12  13  14  5
11  16  15  6
10  9   8   7

本程序設(shè)計(jì)主要要求用匯編語言實(shí)現(xiàn)數(shù)字方陣的創(chuàng)建。
程序提示用戶輸入任一數(shù)字n,系統(tǒng)接收該數(shù)字,并返回一個(gè)n階數(shù)字方陣。要求將n2個(gè)自然數(shù)按螺旋紋路填入這個(gè)n階方陣(順時(shí)針,由外向內(nèi))。本程序設(shè)計(jì)中,系統(tǒng)提示輸入一個(gè)3-9的數(shù)字,根據(jù)輸入的數(shù)字顯示方陣,如輸入4,輸出

     要實(shí)現(xiàn)該功能要求,需要顯示提示字符串,接受用戶輸入,調(diào)用中斷[2],按要求顯示方陣。
具體要求:
(1)輸出提示輸入,接受在一定范圍內(nèi)的指定數(shù)字(本程序?yàn)?到9之間),否則重新輸入,如果是ESC鍵,則推出程序
(2)對(duì)接受的數(shù)字進(jìn)行運(yùn)算,將n2個(gè)自然數(shù)按螺旋紋路填入n階方陣并顯示該方陣。



2.2.2  子程序工作流程
SHOW循環(huán)顯示子程序:  



程序設(shè)計(jì)分析
算法實(shí)現(xiàn)并不是件簡(jiǎn)單的事情。高級(jí)語言可以設(shè)置二維數(shù)組實(shí)現(xiàn),不必考慮其位數(shù),輸出也僅是一個(gè)元素值。而用匯編則遇到定位鼠標(biāo),才是顯示,根據(jù)程序要求,想要達(dá)到程序要求,必須對(duì)鼠標(biāo)位置做精確定位[3]。匯編一次只能輸出一個(gè)字符,對(duì)于二位十進(jìn)制數(shù)據(jù)時(shí),必須作出處理分別輸出[5]。如果對(duì)于一位二進(jìn)制數(shù)不做處理,輸出時(shí)的樣子非常難看。處理方案是:當(dāng)輸出一位十進(jìn)制數(shù)時(shí),在十位位置填充空格,顯示效果良好[1]。根據(jù)課題的要求,主要完成一下幾方面的設(shè)計(jì):
1.顯示提示輸入,提示輸入 ,并保證輸入大于3小于9,否則重新輸入
2.編寫子程序,用算法實(shí)現(xiàn)每次形如矩形的輸出,直至輸出完畢
3.在輸出時(shí),如果是兩位十進(jìn)制數(shù),使用設(shè)計(jì)子程序分別輸出個(gè)位,十位值,若是一位十進(jìn)制數(shù),十位填充空格,輸出。

3  主要代碼實(shí)現(xiàn)

3.1 主模塊代碼
      主模塊主要完成的功能有:在屏幕顯示提示字符串、準(zhǔn)備接收用戶輸入的字符,若為Esc鍵,則推出程序;若為數(shù)字字符,則將其轉(zhuǎn)換成數(shù)字,并判斷數(shù)字是否在規(guī)定范圍內(nèi),然后根據(jù)數(shù)字大小調(diào)用相應(yīng)子模塊,顯示方陣。該模塊主要使用了進(jìn)棧、出棧,基本加減運(yùn)算,賦值運(yùn)算,比較運(yùn)算以及流程跳轉(zhuǎn)控制。
  1. PUSH      CS
  2.               POP       DS
  3.               MOV       AX,3
  4.               INT       10H         ;BIOS中斷,置文本顯示模式

  5.               MOV       AX,0B800H
  6.               MOV       ES,AX       ;定位顯存

  7.               MOV       DX,OFFSET MSG
  8.               MOV       AH,9
  9.               INT       21H         ;提示

  10.          T0:  MOV       AH,0
  11.               INT       16H         ;接收數(shù)據(jù)

  12.               CMP       AL,1BH      ;Esc鍵結(jié)束程序  esc(ascii=1Bh)
  13.               JZ        QUIT

  14.               CMP       AL,'3'      ;數(shù)據(jù)校驗(yàn),保證輸入3<al<9
  15.               JB        T0
  16.               CMP       AL,'9'
  17.               JA        T0

  18.               MOV       AH,0EH      ;在Teletype模式下顯示字符
  19.               INT       10H         ;顯示有效數(shù)

  20.               SUB       AL,30H      ;得到十進(jìn)制數(shù)字
  21.               PUSH      AX
  22.               MUL       AL          ;al*al
  23.               MOV       SI,AX       ;保存矩陣最大數(shù)到si中
  24.               POP       AX
  25.               CBW                   ;chang byte to word
  26.               MOV       BP,1        ;第一個(gè)元素值
  27.               MOV       DI,3*80*2
  28.        NEXT:
  29.               MOV       CNT1,AX     ;輸入數(shù)據(jù)保存到cnt1
  30.               DEC       AX          ;n-1
  31.               MOV       CNT2,AX
  32.               MOV       CNT3,AX
  33.               DEC       AX          ;(n-1)-1
  34.               MOV       CNT4,AX
  35.               ADD       DI,3*2
  36.               CALL      SHOW        ;輸出矩陣
  37.               MOV       AX,CNT1
  38.               SUB       AX,2
  39.               SUB       DI,3*2
  40.               CMP       BP,SI
  41.               JBE       NEXT        ;bp<si,則繼續(xù)執(zhí)行
  42.               MOV       AH,0
  43.               INT       16H         ;等待
  44.               JNZ       START
  45.        QUIT:
  46.               MOV       AX,4C00H
  47.               INT       21H

  48. 3.2 顯示方陣模塊代碼
  49.     顯示方陣模塊主要用于控制數(shù)字及其顯示位置[4],以達(dá)到題目要求的數(shù)字按照螺旋紋路填入n階方陣中。該模塊主要運(yùn)用了賦值運(yùn)算,循環(huán)控制,比較運(yùn)算及流程控制。
  50. SHOW:                            ;顯示方陣
  51.               MOV       CX,CNT1       ;right 向右賦值
  52.          M1:  CALL      CRT
  53.              INC       BP            ;下一個(gè)元素?cái)?shù)值
  54.               LOOP      M1
  55.               MOV       CX,CNT2       ;down 向下賦值
  56.               JCXZ      P2            ;cx=0,則轉(zhuǎn)p2處
  57.          M2:  ADD       DI,(80-3)*2
  58.               CALL      CRT
  59.               INC       BP
  60.               LOOP      M2
  61.               MOV       CX,CNT3        ;left 向左賦值
  62.               JCXZ      P2
  63.          M3:  SUB       DI,6*2         ;下一個(gè)元素位置
  64.               CALL      CRT
  65.               INC       BP
  66.               LOOP      M3
  67.               MOV       CX,CNT4       ;up 向上賦值
  68.               JCXZ      P2
  69.          M4:  SUB       DI,(80+3)*2
  70.               CALL      CRT
  71.               INC       BP
  72.               LOOP      M4
  73.          P2:  RET

  74. 3.3 顯示控制模塊代碼
  75.       控制模塊主要用于控制數(shù)字的顯示方式,若為一位數(shù),則顯示個(gè)位,并補(bǔ)充空格;若為兩位數(shù),則分別顯示十位和個(gè)位,以達(dá)到數(shù)字的正確顯示。主要進(jìn)行了數(shù)字的修正和各位數(shù)字的分離。
  76. CRT:
  77.               MOV       AX,BP
  78.               AAM                      ;調(diào)整指令
  79.               OR        AX,3030H
  80.               XCHG      AH,AL          ;交換ah和al
  81.               CMP       AL,'0'
  82.               JNZ       P1
  83.               MOV       AL,20H
  84.          P1:  STOSB                   ;顯示十位
  85.               INC       DI
  86.               MOV       AL,AH
  87.               STOSB                   ;顯示個(gè)位
  88.               INC       DI
  89.               MOV       AL,20H
  90.               STOSB                   ;顯示空格
  91.               INC       DI
  92.               RET
復(fù)制代碼

運(yùn)行結(jié)果分析
經(jīng)過上訴分析和模塊設(shè)計(jì),編寫出完整的程序代碼。經(jīng)過不斷的調(diào)試和修改得到最終程序設(shè)計(jì)。該程序能正常運(yùn)行,并完成規(guī)定的功能,F(xiàn)將運(yùn)行結(jié)果截圖如下:
程序開始運(yùn)行:

                         圖4.1
輸入3,運(yùn)行結(jié)果如下:

                        圖4.2
鍵入9,運(yùn)行結(jié)果如下:

                         圖4.3

全部資料51hei下載地址:
數(shù)字方正程序exe匯編.7z (92.81 KB, 下載次數(shù): 5)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表