日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

當(dāng)前位置:電子發(fā)燒友網(wǎng) > 圖書頻道 > 電子 > 《計(jì)算機(jī)組成原理與匯編語言》 > 第3章 指令系統(tǒng)與匯編語言設(shè)計(jì)

第8節(jié) 程序設(shè)計(jì)方法

3.8.1 程序設(shè)計(jì)步驟

  在這里,我們不去涉及軟件工程的具體問題,只簡單介紹程序設(shè)計(jì)的入門知識。

      一般可以按下面的步驟進(jìn)行: 

          (1) 仔細(xì)了解問題的要求。 
          (2) 制定方案。 
          (3) 編寫程序。 
          (4) 查錯(cuò)。 
          (5) 測試。 
          (6) 形成文件。
    

3.8.2 程序設(shè)計(jì)的基本方法

        1.順序程序

  也有人稱之為簡單程序,它確實(shí)是程序中最簡單的形式。這種程序CPU執(zhí)行時(shí),是以指令的排列順序逐條執(zhí)行的。 
   
  若m,n,w分別為三個(gè)8位無符號數(shù),現(xiàn)欲求Q=m×n-w。若m,n,w存放在當(dāng)前DS所決定數(shù)據(jù)段、偏移地址為DATA的順序單元中,而且Q可放在AX中,則程序?yàn)?

            LEA SI,DATA
            MOV AL[SI]
            MOV BL,[SI+1]
            MUL BL
            MOV BX,0
            MOV BL,[SI+2]
            SUB AX,BX
            HLT

     2. 分枝程序

  分枝程序的基本結(jié)構(gòu)如圖3.20所示。由圖3.20可見,分枝程序的基本思路就是判斷條件A是否成立,若成立,則執(zhí)行P -1;若不成立,則執(zhí)行P -2。

           現(xiàn)舉例說明如下:

  從接口03F0H中取數(shù),若此數(shù)≥90,則將00H送接口03F7H;若此數(shù)<90,則將FFH送接口03F7H。

            程序如下:

                  MOV DX,03F0H
                  IN AL,DX
                  CMP AL,90
                  JNC NEXT1
                  MOV AL,0FFH
                  JMP NEXT2
                  NEXT1:MOV AL,00H
                  NEXT2:MOV DX,03F7H
                  OUT DX,AL
                  HLT

例:在DS數(shù)據(jù)段偏移地址為DATA開始的順序80個(gè)單元中,存放著某班80個(gè)同學(xué)的微型機(jī)原理考試成績?,F(xiàn)欲編程序統(tǒng)計(jì)≥90分、89分~70分,69分~60分和<60分的人

數(shù),并將統(tǒng)計(jì)的結(jié)果放在當(dāng)前數(shù)據(jù)段偏移地址為BUFFER的順序單元中。

程序如下:
   MOV DX,0000H
   MOV BX,0000H
   MOV CX,80
   LEA SI,DATA
   LEA DI,BUFFERGOON:MOV AL,[SI]
   CMP AL,90
   JC NEXT3
   INC DH
   JMP STOR
   NEXT3:CMP AL,70
   JC NEXT5
   INC DL
   JMP STOR
   NEXT5: CMP AL,60
   JC NEXT7
   INC BH
   JMP STOR
   NEXT7:INC BL
   STOR: INC SI
   LOOP GOON
   MOV [DI],DH
   MOV[DI+1],DL
   MOV[DI+2],BH
   MOV[DI+3],BL
   HLT

  3. 循環(huán)程序 

  循環(huán)程序是強(qiáng)制CPU重復(fù)執(zhí)行某一指令集合的一種程序結(jié)構(gòu)。它可以使許多重復(fù)性工作的程序大為簡化。 循環(huán)程序通常有兩種結(jié)構(gòu)方式,如圖3.22(a)和(b)所示。  

  在內(nèi)存40000H開始的順序30個(gè)單元中存放著8位無符號數(shù),若將它們的和放在DX中,試編程序。
  
  程序如下: 

  MOV AX,4000H
  MOV DS,AX   
  MOV SI,0000H 
  MOV CX,30 
  XOR AX,AX 
  GOON:ADD AL,[SI] 
  ADC AH,00H 
  INC SI
  DEC CX 
  JNZ GOON
  MOV DX,AX
  HLT
在圖3.22中所畫的是單一的循環(huán)。在解決問題中還會出現(xiàn)二重循環(huán)甚至多重循環(huán)的情況。只要單一循環(huán)的概念清楚,二重及多重循環(huán)也就容易解決。

在此僅以簡單的例子加以說明。

例:在DS所決定的數(shù)據(jù)段,從偏移地址BUFFER開始順序存放100個(gè)無符號16位數(shù)?,F(xiàn)欲編寫程序?qū)⑦@100個(gè)字按大小順序排序。

  程序如下:
   LEA DI,BUFFER
   MOV BL,99
   NEXT0:MOV SI,DI
   MOV CL,BL
   NEXT3:MOV AX,[SI]
   ADD SI,2
   CMP AX,[SI]
   JNC NEXT5
   MOV DX,[SI]
   MOV[SI-2],DX
   MOV[SI], AX
   NEXT5:DEC CL
   JNZ NEXT3
   DEC BL
   JNZ NEXT0
   HLT
4. 子程序
   
  使用子程序時(shí)應(yīng)注意的幾個(gè)問題:
  (1)子程序如何調(diào)用和如何返回。
   
  (2)子程序的入口條件(或稱入口信息)和出口條件(出口信息)。
   
  (3)子程序中使用了哪些寄存器,調(diào)用之前是否需要保護(hù)。
   
  (4)其他諸如占內(nèi)存多少、執(zhí)行時(shí)間長短、影響哪些標(biāo)志、出錯(cuò)如何處理等。 
   
在此我們只直接用來定義一個(gè)通過查詢向接口輸出數(shù)據(jù)的輸出子程序:
   
   SENDAT PROC FAR
   PUSH AX
   PUSH DX
   PUSH SI
   LEA SI,BUFR
   GOON:MOV DX,03FBH
   WAIT: IN AL,DX
   TEST AL,20H
   JZ WAIT
   MOV AL,[SI]
   MOV DX,03F8H
   OUT DX,AL
   INC SI
   CMP AL,0AH
   JNE GOON
   POP SI
   POP DX
   POP AX
   RET
   
SENDAT ENDP主程序在調(diào)用子程序時(shí),一方面初始數(shù)據(jù)要傳遞給子程序,另一方面子程序的運(yùn)行結(jié)果要傳遞給主程序。盡管沒有初始數(shù)據(jù)或沒有運(yùn)行

結(jié)果的情況也有,但一般情況下我們必須予以考慮。

  參數(shù)傳遞可用以下3種方式:
   
   ·利用寄存器
   
   ·利用內(nèi)存單元
   
   ·利用堆棧

 

5.表

在微型計(jì)算機(jī)應(yīng)用中,經(jīng)常用到表的運(yùn)算。例如,溫度傳 感器的一個(gè)溫度對應(yīng)輸出一個(gè)電壓,溫度值與電壓之間如果有 較復(fù)雜的函數(shù)關(guān)系,那么要計(jì)算出某一電壓(假定

用10位二進(jìn) 制數(shù)表示)的溫度值往往要進(jìn)行復(fù)雜運(yùn)算。 例如,在當(dāng)前數(shù)據(jù)段(DS所決定)偏移地址為TABLE開始的順序 單元中存放著用一個(gè)字(16位二進(jìn)制數(shù))所表示的溫

度值,此表 按順序?qū)?yīng)溫度傳感器電壓值的10位二進(jìn)制值:000H到3FFH。若 在當(dāng)前數(shù)據(jù)段偏移地址為DATAB的順序單元中已存放著溫度電壓 值的10位編碼。試編程

序?qū)⑵滢D(zhuǎn)換成實(shí)際的溫度值,放回原存貯 單元。 程序如下: START: LEA SI,TABLE MOV AX,DATAB ADD SI,AX MOV AX,[SI] MOV DATAB,AX HLT

  下面我們分別對這兩種功能調(diào)用作一簡要介紹。
 
     (1) 高級功能調(diào)用(DOS功能調(diào)用)
    
    (2) 低級功能調(diào)用
     
    (3) 功能調(diào)用實(shí)例

 

  例1 帶顯示的鍵盤輸入子程序KSDIN。功能:接收從鍵盤輸入的一個(gè)字符并在顯示器上顯示該字符。
   
   輸入:從鍵盤輸入一個(gè)ASCII碼字符。
   
   輸出:輸入字符送緩沖區(qū),并顯示該字符。
   
   KSDIN PROC NEAR
   MO VAH,1;置功能號
   INT 21H;輸入結(jié)果放AL中
   MOV IN BUFF,AL;輸入字符送緩沖區(qū)
   RET
   KSDIN ENOP
例2 設(shè)置系統(tǒng)日期的子程序SETTIME。
 
功能:將變量YEAR、MONTH、DAY的內(nèi)容作為時(shí)間設(shè)置系統(tǒng)日期。
  
   SETTIME PROC NEAR
   MOV AH,2BH ;置功能號
   MOV CX,YEAR ;置年參數(shù)(字)
   MOV DH,MONTH;置月參數(shù)(字節(jié))
   MOV DL,DAY;置日參數(shù)(字節(jié))
   INT 21H;
   OR AL,AL;檢查狀態(tài)
   JNZ ERROR;日期無效轉(zhuǎn)… RET
   ERROR:… RET
    …YEAR DW0
   MONTH DB0
   DAY DB0
   SETTIME ENDP
例3 用戶程序終止返回DOS。
   
  功能:用戶程序結(jié)束返回DOS操作系統(tǒng)。
   
   PROEND:MOV AH,0 ;置功能號
   INT 21H ;返回操作系統(tǒng)

例4 置CRT顯示方式子程序SETCRT。
   
功能:根據(jù)不同類型碼設(shè)置不同的顯示方式。
   
若本系統(tǒng)顯示卡為EGA卡,現(xiàn)要將顯示器設(shè)置成640×200、彩色16色圖形方式。
   
   SETCRT PROC NEAR
   MOV AH,0 ;設(shè)置功能類型
   MOV AL,0EH;設(shè)置調(diào)用參數(shù)
   INT10H ;調(diào)BIOS功能
   RET
   SETCRT ENDP

例5 寫一個(gè)字符到指定通信口子程序WCOMI。
   
功能:將緩沖區(qū)BUFF中的字符送串行通信口輸出。
   
  輸入:要發(fā)送的字符放于緩沖區(qū)BUFF。
   
  輸出:將緩沖區(qū)字符送COMI串行口輸出。
   
   WCOMI PROC NEAR
   MOV AH,01H;功能1為寫字符
   MOV AL,BUFF;字符送AL
   MOV DX,0;用COM1通信口發(fā)送
   INT 14H;調(diào)用BIOS功能
   RET
   WCOMI ENDP

 

?
邵武市| 长宁县| 土默特右旗| 宁明县| 六枝特区| 乌鲁木齐市| 翁源县| 东明县| 托克逊县| 乌海市| 濮阳县| 加查县| 儋州市| 新晃| 庆城县| 安康市| 巴彦县| 奉新县| 黄冈市| 尼木县| 泾阳县| 邯郸县| 靖州| 丰顺县| 吉木萨尔县| 崇仁县| 汉川市| 宁明县| 施甸县| 新营市| 镇远县| 四会市| 叙永县| 永福县| 从江县| 巴马| 惠水县| 曲松县| 托里县| 新兴县| 六安市|