微型計(jì)算機(jī)原理及接口技術(shù)_第1頁
微型計(jì)算機(jī)原理及接口技術(shù)_第2頁
微型計(jì)算機(jī)原理及接口技術(shù)_第3頁
微型計(jì)算機(jī)原理及接口技術(shù)_第4頁
微型計(jì)算機(jī)原理及接口技術(shù)_第5頁
已閱讀5頁,還剩148頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

微型計(jì)算機(jī)原理

及接口技術(shù)

授課教師:

第4章'4.4D0S與BIOS的調(diào)用

441述

H-

DOS是微型計(jì)算機(jī)磁盤操作系統(tǒng)(DiskOperationSystem),操作系

統(tǒng)是用以控制和管理計(jì)算機(jī)的硬件資源、方便用戶使用的程序的集

合。由于這些軟件程序放在硬盤或軟盤上,而且主要功能是進(jìn)行文

件管理和輸入、輸出設(shè)備管理,故而稱為磁盤操作系統(tǒng)。磁盤操作

系統(tǒng)是入和機(jī)器交互的界面,用戶通過操作系統(tǒng)使用和操作計(jì)算機(jī).

DOS所有軟件使用基礎(chǔ)的平臺(tái)。

第4章4.4D0S與BIOS的調(diào)用

4.述

DOS由三個(gè)層次的程序文件及一個(gè)BOOT引導(dǎo)程序構(gòu)成。三個(gè)層

次模塊文件:

10.SYS輸入/輸出管理系統(tǒng)

MSDOS-SYS文件管理系統(tǒng)

COMMAND.COM命令處理系統(tǒng)

DOS和ROMBIOS提供了大量的可供用戶直接使用的系統(tǒng)服務(wù)程序。

ROMBIOS(ROMBasicInputandOutputSystem)是固化在只讀存

儲(chǔ)器ROM中基本輸入/輸出的程序。它直接可對(duì)外部設(shè)備進(jìn)行設(shè)備升

級(jí)的控制,包括系統(tǒng)測(cè)試、初始化引導(dǎo)程序、控制I/O設(shè)備的服務(wù)

程序等。E

第4章4.4D0S與BIOS的調(diào)用

一般說來,用戶可以用四種方式控制PC機(jī)的硬件:

□第一種,應(yīng)用高級(jí)語言的相應(yīng)的功能語句進(jìn)行控制。

□第二種,應(yīng)用DOS提供的功能程序來控制硬件。

第三種,應(yīng)用ROMBIOS的程序控制硬件,這是低層次控制,要求編

程者對(duì)硬件有相當(dāng)深入了解。

第四種,直接使用匯編語言編程進(jìn)行控制,但是,要求編程者對(duì)

I/O設(shè)備的地址功能比較熟悉。

E匚

□4.4D0S與BIOS的調(diào)用

□4.4.2DOS系統(tǒng)功能調(diào)用

MS-DOS操作系統(tǒng)為程序設(shè)計(jì)者提供了可以直接調(diào)用的軟中斷處理

□程序,每一個(gè)中斷處理程序完成一個(gè)特定的功能操作,依據(jù)編程需

□要選擇適當(dāng)?shù)奶幚沓绦?,編程者不再重新編寫程序。這些功能處理

程序,使用的是INTn軟中斷指令,每執(zhí)行一種類型碼n的不同的軟

中斷指令,就執(zhí)行一個(gè)中斷處理程序。

這類功能程序的主要功能是:

①磁盤的讀/寫控制

②內(nèi)存管理、文件操作和目錄管理

③基本輸入/輸出(對(duì)鍵盤、打印機(jī)和顯示器控制),另外還有日期、

時(shí)間等。

第4章4.4D0S與BIOS的調(diào)用

4.4.2D0S系統(tǒng)功能調(diào)用

當(dāng)類型碼n=05H-1FH,調(diào)用ROMBIOS中的處理程序。

類型碼n=20H—3FH,調(diào)用的是DOS的中斷處理程序。

INT21H是一個(gè)大型的中斷處理程序,其中有大約100多種功能中斷

處理程序,可由程序設(shè)計(jì)者調(diào)用。

INT21H軟中斷指令對(duì)應(yīng)的功能子程序調(diào)用稱為DOS系統(tǒng)功能調(diào)用。

E匚

第4章4.4D0S與BIOS的調(diào)用

一、DOS軟中斷調(diào)用

贏萩子面藁法蝠靛茄藪芝就總.........................

其中,入口參數(shù)是使用該調(diào)用必須具備的條件;出口參數(shù)是表示軟

□中斷程序執(zhí)行結(jié)果放在何處或執(zhí)行該操作處理的特征。

DOS中斷調(diào)用方法:

按DOS中斷規(guī)定,用指令寫入口參數(shù),然后執(zhí)行INTn指令,執(zhí)行完

畢后,依據(jù)結(jié)果進(jìn)行分析及處理。

執(zhí)行INTn指令,即分析處理

設(shè)置入

執(zhí)行中斷服務(wù)程序,出口參數(shù)

口參數(shù)

最后執(zhí)行IRET

□4.4D0S與BIOS的調(diào)用

□DOS軟中斷

軟中斷功能入口參數(shù)出口參數(shù)

INT20H程序正常退出

INT21H系統(tǒng)功能調(diào)用AH=功能號(hào)相應(yīng)處理結(jié)果參數(shù)

INT22H結(jié)束退出

INT23HCtl+break中斷退出

INT24H出錯(cuò)退出

INT27H駐留退出

INT25H的CX、DXCF=1出錯(cuò)

DS:BX、AL

INT25H寫盤CX、DX、CF=1出錯(cuò)

DS:BX、AL

第4章4.4D0S與BIOS的調(diào)用

二、DOS系統(tǒng)功能調(diào)用INT21H

INT^IH最早凝箕茄)贏菽],皤,不瑪茁時(shí)最“章:'KA

子功能程序分別予以編號(hào),稱為功能號(hào)。每個(gè)功能程序完成一種特

定的操作和處理。

主要功能包括:設(shè)備管理、目錄管理、文件管理等。

應(yīng)用INT21H系統(tǒng)功能調(diào)用方法:

MOVAL,OAH

①入口參數(shù)送指定的寄存器或內(nèi)存MOVAH,02H

②功能號(hào)送AH中。INT21H;換行

③執(zhí)行INT21H軟中斷指令。

MOVAH,4CH

INT21H;

4.4D0S與BIOS的調(diào)用

1.鍵盤輸入并顯示(1號(hào)功能調(diào)用)

功能:等待標(biāo)準(zhǔn)輸入設(shè)備送入一個(gè)字符,并放到

寄存器AL中,不需要入口參數(shù)。AL中放字符的

ASCH碼,并且CRT屏幕上顯示。

MOVAH,1

INT21H

4.4D0S與BIOS的調(diào)用

2.鍵盤輸入但不顯示輸入字符(8號(hào)功能調(diào)用)

功能:8號(hào)功能調(diào)用,系統(tǒng)將進(jìn)行鍵盤掃描,等

待鍵按下,一旦有鍵按下,將字符ASCH碼讀入,

放入AL中,但不在CRT屏幕上顯示。

MOVAH,8

INT21H

□4.4D0S與BIOS的調(diào)用

□3.CRT屏幕顯示一個(gè)字符(2號(hào)功能調(diào)用)

□功能:入口參數(shù):待顯示的字符ASCH碼放入DL

□中,功能號(hào)送AH。其功能把DL中的字符在屏幕上

顯示出來。

例如要顯示字符'A,程序段:

MOVDL,'A'

MOVAH,02H

INT21H

4.4D0S與BIOS的調(diào)用

4.打印輸出(5號(hào)眇調(diào)用)

功能:入口參數(shù):將要在打印機(jī)上打印的字

ASCH碼放入DL中,5號(hào)功能調(diào)用即把字符輸出到打

印機(jī)上予以打印。

例如:

MOV,DL,W

MOVAH,05H

INT21H

執(zhí)行后,打印機(jī)上即打印出字符A。

多4制4.4D0S與BIOS的調(diào)用

口5.CRT屏幕顯示字符串符號(hào)(9號(hào)可能調(diào)用)

功能:待顯示的字符串符號(hào)(ASCH

碼),定義在DS段且以'$,字符結(jié)束,

.□把段地址放入DS中,偏移地址放入

DX中,利用9號(hào)功能調(diào)用,可把字符

串符號(hào)顯示在屏幕上。

□4.4D0S與BIOS的調(diào)用

DATASEGMENT

□BUFDB6HOWDOYOUDO?9,OAH,ODH,'$'

DATAENDS

CODESEGMENT

MOVAX,DATA

MOVDS,AX執(zhí)行程序,在屏幕上顯示:

“HOWDOYOUDO?”

MOVDX,OFFSETBUF字符串符號(hào)。

MOVAH,09H

INT21H

CODEENDS

4.4D0S與BIOS的調(diào)用

6.字符串輸入功能調(diào)用(0AH功能調(diào)用)

功能:從鍵盤接收字符并且放入到內(nèi)存緩沖區(qū)。

第一個(gè)字節(jié):予留字節(jié):第三個(gè)字節(jié):

允許最多輸入在輸入結(jié)束接收字符

的字符數(shù)后輸入字符ASCCH碼

的個(gè)數(shù)

第4章4.4D0S與BIOS的調(diào)用

6受符串輸入功能調(diào)用(OAH*能調(diào)用)

功能:從鍵盤接收字符并且放入到內(nèi)存緩沖區(qū)。

要求執(zhí)行前:(1)先定義一個(gè)輸入緩沖區(qū),緩沖區(qū)內(nèi)第一個(gè)字

節(jié)定義為允許最多輸入的字符個(gè)數(shù),個(gè)數(shù)應(yīng)包括回車符ODH在

內(nèi),不能為。值。第二個(gè)字節(jié)保留,在執(zhí)行程序完畢后存入輸入

的實(shí)際的字符個(gè)數(shù)。從第三個(gè)字節(jié)開始存入從鍵盤上接收的字

符的ASCH碼。

(2)若實(shí)際輸入的字符個(gè)數(shù)少于定義的最大的字符個(gè)數(shù),則緩

沖區(qū)其他單元自動(dòng)清0值。若實(shí)際輸入的字符個(gè)數(shù)多于定義的字

符個(gè)數(shù),其后輸入的字符丟棄不用,且響鈴示警,一直到鍵入

回車(CR)為止。

第4皂4.4D0S與BIOS的調(diào)用

6受符串輸入功能調(diào)用(OAH*能調(diào)用)

整個(gè)緩沖區(qū)的長(zhǎng)度等于最大字符個(gè)數(shù)再加2。

調(diào)用時(shí)要求DS:DX指向緩沖區(qū)的首地址,即入口參數(shù)為段地

址放在DS中,緩沖區(qū)起始的偏移地址放入DX中。

□4.4D0S與BIOS的調(diào)用

□DATASEGMENT

BUFDB25;緩沖區(qū)長(zhǎng)度

□ACTHARDB?;保留單元,存放輸入的實(shí)際字符個(gè)數(shù)

□CHARDB25CUP(?);定義25個(gè)字節(jié)存儲(chǔ)空間:

DB$

DATAENDS

CODESEGMENT

MOVDX,OFFSETBUF

MOVAH,OAH

INT21H

CODEENDS

4.4D0S與BIOS的調(diào)用

7.返回DOS系統(tǒng)功能調(diào)用(4CH調(diào)用)

功能:4cH功能調(diào)用,其操作是終止當(dāng)前程序的運(yùn)行,并把

控制權(quán)交給調(diào)用的程序,即返回DOS系統(tǒng),屏幕出現(xiàn)DOS提示

符。

如C:\>,等待DOS命令。

格式:MOVAH,4CH

INT21H

第4章4.4D0S與BIOS的調(diào)用

8.直接控制臺(tái)輸入輸出(6號(hào)功能調(diào)用)

□功能:從標(biāo)準(zhǔn)輸入設(shè)備輸入字符,也可以向屏幕上輸出字符,

但不檢查CtrLBreak組合鍵是否按下。

(1)當(dāng)向DL送入一個(gè)OFFH時(shí),表示從鍵盤輸入字符。若

標(biāo)志ZF=O,AL中放入字符的ASCH碼;若ZF=1,表示

無鍵按下。這種調(diào)用檢測(cè)掃描鍵盤有無鍵按下,但不等

待鍵盤輸入。

例如:MOVDL,OFFH

MOVOAH,6H

INT21H

4.4D0S與BIOS的調(diào)用

功能:從標(biāo)準(zhǔn)輸入設(shè)備輸入字符,也可以向屏幕上輸出字符,

但不檢查CtrLBreak組合鍵是否按下。

(2)假如DL/0FFH,表示向屏幕輸出顯示,DL中要放的

是待顯示字符的ASCH碼值。

例如:MOVDL,A9

MOVAH,6H字符A顯示左

CRT屏幕上。

INT21H

第4壑4.4DOS與BIOS的調(diào)用

9.檢查鍵盤的工作狀態(tài)(OBH功能調(diào)用)

功能:調(diào)用此功能用以檢查是否有鍵盤輸入,若有鍵按下,

則使AL=OFFH,若無鍵按下,則AL=00H。對(duì)于利用操作鍵盤

退出循環(huán)或使程序結(jié)束這種調(diào)用是很方便實(shí)用的。

LOP:ADDAL,BL

MOVAH,OBH

INT21H;鍵掃描:無鍵入AL=00H;有鍵入AL=FFH

ADDAL,01H

JNZLOP;有鍵入,則退出循環(huán)

RET

第4章4.4.3R0MBI0S中斷調(diào)用

BIOS(BasicInut/OutputSystem,基本輸入/輸出系

統(tǒng))是固化在只讀存儲(chǔ)器ROM中的一系列輸入/輸出服務(wù)程

序,它存放于內(nèi)存的高地址區(qū)域內(nèi),處理系統(tǒng)中的全部?jī)?nèi)

部中斷,還提供了用戶常用的I/O接口的控制驅(qū)動(dòng)程序,

例如鍵盤、顯示器、磁盤和打印機(jī)等。BIOS采用模塊化

結(jié)構(gòu),每個(gè)功能模塊的入口地址都存于中斷向量表中。中

斷調(diào)用通過軟中斷指令I(lǐng)NTn實(shí)現(xiàn),n為中斷類型碼。

4.4.3ROMBIOS中斷調(diào)用

ROMBIOS的調(diào)用方法與DOS系統(tǒng)功能調(diào)用方法相類似。

①置功能號(hào)一>AH

②置入口參數(shù)。

③執(zhí)行INTn。

④分析出口參數(shù)及狀態(tài)。

4.4.3ROMBIOS中斷調(diào)用

使用ROMBIOS中斷調(diào)用的優(yōu)越性在于:

(1)雖然BIOS中斷調(diào)用程序比調(diào)用DOS中斷程序要復(fù)雜,但

運(yùn)行速度快。,功能更強(qiáng)。

(2)DOS的中斷功能僅在DOS環(huán)境下適用,而ROMBIOS的

功能調(diào)用不受任何操作系統(tǒng)的約束。

(3)某些功能僅ROMBIOS具有。

4.4.3ROMBIOS中斷調(diào)用

1.鍵盤輸入(類型碼為16H的中斷調(diào)用)

一中斷調(diào)用有三個(gè)功能,功能號(hào)為0;1、2,且必須把

功能號(hào)放在AH中。

..................................

入口參數(shù)為AH=O,INT16H調(diào)用,從鍵盤讀入字符,并

且放在AL寄存器中。執(zhí)行時(shí),等待鍵盤輸入,一旦輸

入,字符的ASCH碼放入AL中。

若AL=O,則AH為鍵入的擴(kuò)展碼。

格式:MOVAH,OH

INT16H

4.4.3ROMBIOS中斷調(diào)用

1.鍵盤輸入(類型碼為16H的中斷調(diào)用)

(2)功能號(hào)01H調(diào)用

功能是用來查詢鍵盤緩沖區(qū),對(duì)鍵盤掃描,但不等待,

若有按鍵操作(即鍵盤緩沖區(qū)不空),則ZF=0,AL中存

放的是鍵入的ASCH碼,AH中存放鍵入字符的擴(kuò)展碼。

若無鍵按下,則標(biāo)志位ZF=1。

格式:MOVAH,01H

INT16H

□4.4.3ROMBIOS中斷調(diào)用

□1.鍵盤輸入(類型碼為16H的中斷調(diào)用)

(3)功能號(hào)02H調(diào)用

功能是檢查鍵盤上各特殊功能鍵的狀態(tài)。執(zhí)行后,各種

特殊功能鍵的狀態(tài)放入AL寄存器中。

格式:MOVAH,02H

INT16H

AL

□4.4.3ROMBIOS中斷調(diào)用

□1.鍵盤輸入(類型碼為16H的中斷調(diào)用)

例如程序段

MOVAH,02H

INT16H

ANDAL,00000100B;檢查Ctlr鍵是否按下

JNZCtrl-ON

Ctrl-ON:........

□4.4.3ROMBIOS中斷調(diào)用

□2.打印機(jī)輸出(INT17H)

:吊輸i商看三個(gè),能,,能號(hào)茄、1、2

□?.....

(1)0號(hào)功能

入口參數(shù)為AL中放入字符ASCII碼,,DX中放打印機(jī)(0-2)。

MOVAL,'A'

MOVDX,01H

MOVAH,0

INT17H

操作功能是打印一個(gè)字符,且返回打印機(jī)的狀態(tài)到AH中。

□第4重4.4.3ROMBIOS中斷調(diào)用

□2.打印機(jī)輸出(INT17H)

□打印機(jī)的狀態(tài)字意義如下:

D7=1打印機(jī)處于“忙“狀態(tài)。打印機(jī)目前正在打印或正在接

□收數(shù)據(jù)等

D6=1打印機(jī)已接收數(shù)據(jù),通知CPU可發(fā)送下一個(gè)數(shù)據(jù)

D5=1打印紙空

D4=1打印機(jī)已聯(lián)機(jī)

D3=1表示打印機(jī)出錯(cuò)

D2?D1未用,無意義

DO表示打印機(jī)超時(shí)錯(cuò)。打印機(jī)發(fā)回忙信號(hào)過長(zhǎng),CPU不

能再給它發(fā)送字符

第4章4.4.3ROMBIOS中斷調(diào)用

2?打印機(jī)輸出(INT17H)

(2)1號(hào)功能

MOVAH01H

INT17H

初始化打印機(jī),并返回打印機(jī)狀態(tài)到AH中。

第4章4.4.3ROMBIOS中斷調(diào)用

2.打印機(jī)輸出(INT17H)

(3)2號(hào)功能

MOVAH,02H

INT17H

返回打印機(jī)狀態(tài)到AH中。

第4章4.4.3ROMBIOS中斷調(diào)用

3.CRT顯示器顯示ROMBIOSINT10H中斷調(diào)用

用以控制顯示器顯示,功能強(qiáng)大。主要包括設(shè)

置顯示方式,設(shè)置CRT屏幕光標(biāo)的大小與位置,

顯示字符及圖形,設(shè)置調(diào)色板等。但用匯編語言

寫程序過長(zhǎng),一般采用高級(jí)語言。

4.5匯編語言程序設(shè)計(jì)

軟件程序設(shè)計(jì)采用結(jié)構(gòu)化程序設(shè)計(jì)方法,這種設(shè)計(jì)方法

是指程序的設(shè)計(jì)、編寫和測(cè)試按一定規(guī)范的組織形式來進(jìn)行

而不能由編程者隨心所欲,從而滿足高質(zhì)量的標(biāo)準(zhǔn)化軟件程

序的要求。

□第4氫4.5匯編語言程序設(shè)計(jì)

一個(gè)高質(zhì)量的軟件程序應(yīng)具備的條件:

①運(yùn)行結(jié)果正確。

②具有良好的結(jié)構(gòu),清晰易讀。

③執(zhí)行速度快。

④占用內(nèi)存空間應(yīng)壓縮到合理的范圍之內(nèi)。

第4章4.5匯編語言程序設(shè)計(jì)

結(jié)構(gòu)化程序必須滿足以下要求:

(1)采用模塊化結(jié)構(gòu):

每一個(gè)模塊都是由三種基本結(jié)構(gòu)組成,并且只有一個(gè)入口和

一個(gè)出口,不含死循環(huán)和死語句。

三種結(jié)構(gòu)是順序結(jié)構(gòu)、條件分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。

(2)可以有控制地使用無條件轉(zhuǎn)移語句。程序要加以必要的注釋,

以增加程序的可讀性。

(3)要采用自頂向下、逐步細(xì)化和逐步求精的設(shè)計(jì)方法開發(fā)程序,

能方便地對(duì)源程序模塊進(jìn)行組裝及調(diào)試。

4.5.1匯編語言源程序的框架結(jié)構(gòu)

□NAME模塊名(可省略)

□EQU符號(hào)定義區(qū)(可依據(jù)需要而定)

EXTRN外部符號(hào)名說明(依實(shí)際需要而定)

PUBLIC公共符號(hào)名說明(依實(shí)際需要而定)

4.5.1匯編語言源程序的框架結(jié)構(gòu)

??

數(shù)據(jù)段名(如DATA)SEGMENT;參數(shù)(依據(jù)實(shí)際要求而定,可省略)

變量定義

預(yù)置存儲(chǔ)空間

數(shù)據(jù)段名(如DATA)ENDS

堆棧段名(如STACK)SEGMENT參數(shù)(依實(shí)際要求而定)

預(yù)置堆找空間

堆棧段名(如STACK)ENDS

□4.5.1匯編語言源程序的框架結(jié)構(gòu)

代碼段名(如CODE)SEGMENT參數(shù)(依實(shí)際需要而定)

□ASSUME段寄存器指派

START:MOVAX,DATA;段地址裝填

□MOVDSAX

MOVAX,STACK

□MOVSS,AX

主程序體

MOVAH,4CH

INT21H

過程名1PROC類型說明

過程體1

過程名1ENDP

過程名2PROC類型說明

過程體2

過程名2ENDP

代碼段名(如CODE)ENDS

ENDSTART

NAME模塊名(可省略)

EQU符號(hào)定義區(qū)(可依據(jù)需要而定)

EXTRN外部符號(hào)名說明(依實(shí)際需要而定)

PUBLIC公共符號(hào)名說明(依實(shí)際需要而定)

數(shù)據(jù)段名(如DATA)SEGMENT;參數(shù)(依據(jù)實(shí)際要求而定,可省略)

變量定義

預(yù)置存儲(chǔ)空間

數(shù)據(jù)段名(如DATA)ENDS

堆棧段名(如STACK)SEGMENT參數(shù)(依實(shí)際要求而定)

預(yù)置堆找空間

堆棧段名(如STACK)ENDS

代碼段名(如CODE)SEGMENT參數(shù)(依實(shí)際需要而定)

ASSUME段寄存器指派

START:MOVAX,DATA;段地址裝填

MOVDSAX

MOVAX,STACK

MOVSS,AX

主程序體

MOVAH,4CH

INT21H

過程名1PROC類型說明

過程體1

過程名1ENDP

過程名2PROC類型說明

過程體2

過程名2ENDP

代碼段名(如CODE)ENDS

ENDSTART

第4章4.5匯編語言程序設(shè)計(jì)

【例4.51多字節(jié)壓縮BCD碼加法程序。變量FIRST和

SECOND各存放著4個(gè)字節(jié)的壓縮BCD碼,求二者相加

之和,放入SUM開始的存儲(chǔ)單元(假定和仍為4個(gè)字節(jié)

的BCD碼),編程實(shí)現(xiàn)。

多,制4.5匯編語言程序設(shè)計(jì)

I-12?..........???

■NAMEMADD

口DATASEGMENT

FIRSTDB11H,22H,33H,44H;壓縮BCD碼被加數(shù)

SECONDDB55H,66H,77H,33H;壓縮BCD碼加數(shù)

SUMDB20DUP(?);和存放單元

DATAENDS

STACKSEGMENTSTACK'STACK'

SATDB100DUP(?);預(yù)置堆找區(qū)空間

TOPEQULENGTHSTA

STACKENDS

CODESEGMENT

ASSUMCS:CODE,DS:DATA,SS:STACK,ES:

4.5.2程序設(shè)計(jì)基本步驟

對(duì)于給定的課題進(jìn)行程序設(shè)4,”一般應(yīng)按下述步驟進(jìn)行

■1.分析課題

2,確定算法

3.畫出流程圖

4,存儲(chǔ)器資源分配

5,編寫程序

6.上機(jī)調(diào)試

4.5.3匯編語言程序設(shè)計(jì)應(yīng)注意的問題

1.程序模塊化。

2?程序正確完整,具有容錯(cuò)功能。

3?算法的可靠性和合理性。

4.實(shí)時(shí)性要求高的工程控制程序,要充分考慮軟件執(zhí)行速度。

??

4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

基本程序結(jié)構(gòu)有三種:

順序結(jié)構(gòu)、分支選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。

任何一個(gè)復(fù)雜問題的設(shè)計(jì),基本上都可

以由上述三種基本邏輯結(jié)構(gòu)綜合而成。

第4章4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

一、順序結(jié)構(gòu)與簡(jiǎn)單程序設(shè)計(jì)

順序結(jié)構(gòu)程序又稱簡(jiǎn)單程序,

這種程序是按指令的順序執(zhí)行的,

指令指針I(yè)P內(nèi)容為線性增加,流

程圖由一個(gè)一個(gè)的處理框構(gòu)成,

中間無分支、無轉(zhuǎn)移、無循環(huán),

程序本身邏輯結(jié)構(gòu)簡(jiǎn)單。應(yīng)用的

指令多為傳送類、運(yùn)算類和位移

類指令。

.

4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

【例4.6]編寫計(jì)算Z=(X*X-3*Y)/2的程序。設(shè)X、Y均為單字節(jié)整

數(shù),結(jié)果Z仍為1個(gè)字節(jié)。

???????????????????????????____

開始

計(jì)算x*x

計(jì)算3*Y

計(jì)算(X*X-3*Y)12

結(jié)束

第4氫4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

????????????,

DATASEGMENT

XDB25

YDB32

.zDW?

?DATAENDS

□4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

CODESEGMENT

□ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA;初始化

□MOVDS,AX

MOVAL,X

□MULAL;AX=X*X

MOVBX,0

MOVBL,Y

ADDBL,BL

ADCBH,0

ADDBL,Y;3*Y

SUBAX,BX;X2-3Y.

SHRAX,1;(X2-3Y)/2.

MOVZ,AX;保存結(jié)果!

MOVAH,4CH

INT21H;返;回DOS

CODEENDS

ENDSTART

第4章4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

[例4.7]在存儲(chǔ)變量DAT1開始有兩個(gè)字節(jié)的

無符號(hào)加數(shù),在存儲(chǔ)變量DAT2開始有兩個(gè)字DAT15EH

節(jié)的無符號(hào)被加數(shù),求兩個(gè)數(shù)和放入DAT3單

89H

元中,設(shè)二進(jìn)制數(shù)在存儲(chǔ)單元存放的順序,

低字節(jié)數(shù)放在低地址上,高字節(jié)數(shù)放在高地

址上。DAT240H

OAH

分析:多字節(jié)相加,應(yīng)先從低字節(jié)開始相加,

然后高字節(jié)相加。

DAT3

□4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

CODESEGMENT

ASSUMEOS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

MOVSL0;位移量初值

MOVAL,DAT1[SI];取被加數(shù)

ADDAL,DAT2[SI];二數(shù)相加

MOVDAT3[SI],AL

INCSI;調(diào)整位移量

MOVAL,DAT1[SI];取被加數(shù)高位

ADCAL,DAT2[SI];帶進(jìn)位加

MOVDAT3[SI],AL

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

第4章4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

0

TABL

2.查表程序1

求平方值的程序如下。

【例4.8]內(nèi)存中自TABL開9

始的16個(gè)單元中連續(xù)存放自16

然數(shù)。?15的平方值,任意給

定一個(gè)數(shù)X(其值O=vX=<15)

在XD單元,求得平方值放入

YD單元中。255

XD

YD

第4邕454程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

NAMEMYPROG

DATASEGMENT

TABLDB0,1,4,9,16,25,36,49;定義平方表

DB64,81,100,121,144,169,225

XDDB?

YDDB?

DATAENDS

STACKSEGMENTSTACK'STACK'

STADB50DUP(?)

TOPEQULENGTHSTA

STACKENDS

□4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

CODESEGMENT

□TABL

ASSUMECS:CODE,DS:DATA,SS:STACK

START:MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVSP,TOP

MOVBX,OFFSETTABL;置平方表地址指針

N“CY7A”A

MOVAL,XD;給定單元中的X數(shù)

XLAT

,

MOVYDAL;取平方值到AL中

;存放平方值'

XD

MOVAH,4CH;返回DOS'

INT21HYD

CODEENDS

ENDSTART

第4章4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

二、分支選擇結(jié)構(gòu)程序(簡(jiǎn)稱分支程序)

□在實(shí)際的程序設(shè)計(jì)中,常常會(huì)遇到各種條件判斷和比較

□操作:“相等”或“不相等”;“大于”或“小于”;“滿足

條件”或不滿足條件等。依據(jù)給定的條件進(jìn)行判斷作出不同

的處理,執(zhí)行不同的程序段。每一種處理程序稱為一個(gè)分

支,一次判斷產(chǎn)生兩個(gè)分支,多次判斷產(chǎn)生多個(gè)分支,這

樣就構(gòu)成了分支結(jié)構(gòu)程序。

4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

二、分支選擇結(jié)構(gòu)程序(簡(jiǎn)稱分支程序)

IF....THEN..…ELSE語句CASE語句

0

第4章4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

二、分支選擇結(jié)構(gòu)程序(簡(jiǎn)稱分支程序)

分支程序的兩個(gè)要素:

□(1)判斷:依據(jù)運(yùn)算結(jié)果影響狀態(tài)標(biāo)志位,使用條件轉(zhuǎn)移指

□令使程序產(chǎn)生分支,當(dāng)條件滿足時(shí),改變程序走向發(fā)生轉(zhuǎn)

移,否則按指令順序執(zhí)行。但是特別注意,條件判斷前,

一定要進(jìn)行必要的運(yùn)算,用來影響標(biāo)志寄存器的標(biāo)志位,

標(biāo)志位反映了運(yùn)算的結(jié)果和特征。

(2)轉(zhuǎn)移:主要由條件轉(zhuǎn)移指令來實(shí)現(xiàn)(也可以應(yīng)用無條件轉(zhuǎn)

移指令)。

4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

二、分支選擇結(jié)構(gòu)程序(簡(jiǎn)稱分支程序)

????????????????????????????????????????

【例4.9]比較存儲(chǔ)單元中的兩個(gè)8位無符號(hào)數(shù),大者

放在AL寄存器中。已知存儲(chǔ)變量的偏移地址已經(jīng)放在

BX中,其對(duì)應(yīng)的程序段如下:

4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

二、分支選擇結(jié)構(gòu)程序(簡(jiǎn)稱分支程序)

MOVAL,[BX]

INCBX

CMPAL,[BX]

JAEBIGER;前元素>=后元素,轉(zhuǎn)

EXCH:MOVAL,[BX];否則,取后元素到AL

BIGER:...............

第4章4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

二、分支選擇結(jié)構(gòu)程序(簡(jiǎn)稱分支程序)

[例4.10]數(shù)據(jù)區(qū)中進(jìn)行數(shù)據(jù)塊傳送,源數(shù)據(jù)塊BL0CK1,目

的數(shù)據(jù)塊BL0CK2,但源數(shù)據(jù)塊和目的數(shù)據(jù)塊有地址重疊,

在傳送前必須進(jìn)行判別,決定使用增址傳送,還是減址傳

送,利用串傳送指令編寫程序。

第.

4章

□_】

LBL0CK2

□_LOW

□_

>*BLOCK1

□_

ABLOCK2

HIGH

BL0CK2BLOCK1

第4皂

?

?

□?DATASEGMENT

?;數(shù)據(jù)區(qū)

?STRGDB1000DUP(?)

□?BLOKIEQUSTRG+5;源塊首地址

??

BLOIK2EQUSTRG+10;目的塊首址

BLENGEQU100;數(shù)據(jù)塊長(zhǎng)度

DATAENDS

100字節(jié)

第4皂

?

?

□?DATASEGMENT

?;數(shù)據(jù)區(qū)

?STRGDB1000DUP(?)

□?BLOKIEQUSTRG+10;源塊首地址

??

BLOIK2EQUSTRG+5;目的塊首址

BLENGEQU100;數(shù)據(jù)塊長(zhǎng)度

DATAENDS

100字節(jié)

CODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:DATA

START:MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVCX,BLENG;設(shè)置計(jì)數(shù)器

MOVSLOFFSETBLOKI;指向源塊

MOVDI,OFFSETBLOCK2;指向目的塊

CLD;DF=0增址方式

PUSHSI

ADDSI,BLENG-1;得源塊末地址

CMPSI,DI;源數(shù)據(jù)塊末地址與目的數(shù)據(jù)塊的起始地址比較

POPSI;恢復(fù)源數(shù)據(jù)塊地起始地址到SI

JBGO;小于則轉(zhuǎn)移

STD;減址傳送

ADDSLBLENG-1;SI指向源數(shù)據(jù)塊末地址

ADDDI,BLENG-1;DI指向目的數(shù)據(jù)塊的末地址

GO:REPMOVSB

MnvAH.ACH

CODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:DATA

START:MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVCX,BLENG;設(shè)置計(jì)數(shù)器

MOVSLOFFSETBLOKI;指向源塊

MOVDI,OFFSETBLOCK2;指向目的塊

CLD;DF=0增址方式

PUSHSI

ADDSLBLENG-1;得源塊末地址

CMPSI,DI;源數(shù)據(jù)塊末地址與目的數(shù)據(jù)塊的起始地址比較

POPSI;恢復(fù)源數(shù)據(jù)塊地起始地址到SI

JBGO;小于則轉(zhuǎn)移

STD;減址傳送

ADDSLBLENG-1;SI指向源數(shù)據(jù)塊末地址

Annni.RIFNH.I.m格白曰的和提母的未世出卜

第4邕454程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

二、分支選擇結(jié)構(gòu)程序(簡(jiǎn)稱分支程序)

□[例4.11]在以BLOCK開始的存儲(chǔ)區(qū)域內(nèi)存放著100個(gè)字

□節(jié)的8位帶符號(hào)數(shù),在該存儲(chǔ)區(qū)域內(nèi)找出其中最大的數(shù)和

最小的數(shù),分別放在MAX和MIN單元中,編程實(shí)現(xiàn)。

□分析:由于100個(gè)8位帶符號(hào)數(shù),從第一個(gè)數(shù)開始逐個(gè)比較,

搜索其中的大數(shù)和小數(shù),因?yàn)槠渲凶止?jié)長(zhǎng)度已知,可以用

個(gè)數(shù)作為循環(huán)控制的計(jì)數(shù)器。那么,每次比較得到一個(gè)大

數(shù)和小數(shù),循環(huán)完畢,即可找到最大數(shù)和最小數(shù)。

AL:放大數(shù)

BL:放小數(shù)

開始

SI―數(shù)據(jù)偏移地址,CX—循環(huán)次數(shù)

MAX-AL

□AL—[SI],BL—[SI]

MIN—BL

□SI<-SI+1

結(jié)束

cx=o?

4?.5?.?4?程?序??的??基■本■■結(jié)?■構(gòu)?'與??基??本?程??序??設(shè)?計(jì)??

□NAMEFOUND

DATASEGMENT

□BUFDB-2,+5...,-128;定義100個(gè)字節(jié)數(shù)據(jù)

COUNEQU$-BUF;數(shù)據(jù)個(gè)數(shù)

MAXDB?;放最大值的存儲(chǔ)單元

MINDB?;放最小值的存儲(chǔ)單元

DATAENDS;數(shù)據(jù)段結(jié)束

STACKSEGMENTSTACK;堆棧區(qū)定義

STRDB64HDUP(?);堆棧區(qū)占64個(gè)單元

STACKENDS

4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

MYCODESEGMENT;代碼段

■ASSUMEDS:MYCODE,DS:DATA,SS:STACK

START:MOVAX,DATA

MOVDS,AX;DS賦初值

MOVAX,STACK

MOVSS,AX;ss賦初值

MOVSP,LENGTHSTR;設(shè)堆找指針

MOVCX,COUN-1;實(shí)際比較次數(shù),

□MOVSI,OFFSETBUF;建立地址指針

□MOVAL,[SI];取第一個(gè)數(shù)放AL中,大數(shù)放AL內(nèi)

MOVBL,[SI];取第一個(gè)數(shù)放BL中,小數(shù)放BL內(nèi)

INCSI

LOP:CMPALJSI]

JGENEXT1小!_>=下一個(gè)數(shù),不交換?

MOVAL,[SI];否則交換,大數(shù)在AL中

NEXT1:CMPBL,[SI];最小數(shù)與下一單元數(shù)比較

JLNEXT;最小值比較小,BLv二下一個(gè)數(shù),不交換

MOVBL,[SI]

NEXT:INCSI

LOOPLOP;CX—CX?1,CX#O轉(zhuǎn)LOP

MOVMAX,AL;存大數(shù)到MAX

MOVMIN,BL;存小數(shù)到MIN

第4

4.5.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì)

1

2.三路分支結(jié)構(gòu)程序

[例4.12]符號(hào)處理函數(shù)。有一個(gè)符號(hào)函數(shù).

1(X>0)

y=0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論