微型計(jì)算機(jī)原理及應(yīng)用課件:第4章 匯編語言程序設(shè)計(jì)



《微型計(jì)算機(jī)原理及應(yīng)用課件:第4章 匯編語言程序設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《微型計(jì)算機(jī)原理及應(yīng)用課件:第4章 匯編語言程序設(shè)計(jì)(81頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、匯編語言概述匯編語言概述4.1匯編語言源程序格式匯編語言源程序格式4.2匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)4.3DOS功能調(diào)用功能調(diào)用4.4機(jī)器指令機(jī)器指令:用二進(jìn)制編碼的指令如:如:1000 1001 1101 1000機(jī)器語言編寫程序煩瑣,難記憶,易出錯(cuò)。符號(hào)指令符號(hào)指令:由助記符、符號(hào)組成,與機(jī)器指令一一對(duì)應(yīng)MOV AX,BX1000 1001 1101 1000匯編:匯編:機(jī)器只能識(shí)別機(jī)器指令,所以需要將符號(hào)指令翻譯成機(jī)器指令,翻譯的過程稱作匯編。匯編程序:匯編程序:完成匯編任務(wù)的程序。匯編語言源程序:匯編語言源程序:用符號(hào)指令書寫的程序。用符號(hào)指令書寫的程序。1EPUSH DS2BC0
2、SUB AX,AX50PUSH AXB83412MOV AX,12348ED8MOV DS,AX 匯編語言源程序匯編語言源程序匯編程序匯編程序目標(biāo)文件目標(biāo)文件圖4.1匯編語言源程序結(jié)構(gòu)采用分段式結(jié)構(gòu)。一個(gè)匯編語言源程序由若干段組成,一般有數(shù)據(jù)段、代碼段、擴(kuò)展段和堆棧段四種類型,源程序可以根據(jù)實(shí)際需要確定段的數(shù)目。匯編語言的語句格式匯編語言的語句格式4.2.1偽指令偽指令4.2.2匯編語言源程序的結(jié)構(gòu)匯編語言源程序的結(jié)構(gòu)4.2.3匯編語言的語句分類匯編語言的語句分類1匯編語言語句的格式匯編語言語句的格式2匯編語言有三種基本語句:指令語句指令語句偽指令語句偽指令語句宏指令語句宏指令語句指令語句是指
3、在匯編時(shí)產(chǎn)生目標(biāo)代碼對(duì)應(yīng)著機(jī)器某種操作的語句,每條指令語句都對(duì)應(yīng)著CPU的一條機(jī)器指令。偽指令語句不產(chǎn)生任何目標(biāo)代碼,它是一種指示性語句,只是指示匯編程序如何進(jìn)行匯編,只有在匯編和連接時(shí)才起作用。宏指令語句是以宏名定義的一段指令序列,是一般性指令語句的擴(kuò)展。在匯編時(shí),凡是出現(xiàn)宏指令語句的地方全部用其對(duì)應(yīng)指令序列的目標(biāo)代碼代替。指令語句的格式為:指令語句的格式為:標(biāo)號(hào):助記符號(hào) 操作數(shù);注釋偽指令語句的格式為:偽指令語句的格式為:名稱 定義符號(hào) 參數(shù),參數(shù);注釋標(biāo)號(hào)和名稱標(biāo)號(hào)和名稱助記符和定義符助記符和定義符操作數(shù)操作數(shù)注釋注釋標(biāo)號(hào)和名稱代表該語句的存儲(chǔ)器地址。n標(biāo)號(hào)后面要緊跟一個(gè)冒號(hào)“:”。標(biāo)
4、號(hào)在一些指令中充當(dāng)操作數(shù),用來表示轉(zhuǎn)移地址。n名稱可以是變量名、段名、過程名等。匯編語言中標(biāo)識(shí)符的命名規(guī)則為:標(biāo)識(shí)符的第一個(gè)字符必須是字母、問號(hào)?、或下劃線四者之一;從第二個(gè)字符開始可以是字母、問號(hào)?、下劃線或數(shù)字;標(biāo)識(shí)符不能是保留字(例如MOV、STACK)。在給標(biāo)識(shí)符命名時(shí),應(yīng)使標(biāo)識(shí)符命名與它代表的內(nèi)容相符。指令語句中的助記符,規(guī)定了該指令語句的操作。例如ADD、XOR等。偽指令語句中的定義符對(duì)應(yīng)于8086宏匯編中提供的偽操作功能。根據(jù)不同的指令,可能是單操作數(shù)或雙操作數(shù),也可能不帶操作數(shù)。偽指令語句中的操作數(shù)可以是一個(gè)或多個(gè),操作數(shù)之間用逗號(hào)隔開。操作數(shù)可以是:常量常量變量變量標(biāo)號(hào)標(biāo)號(hào)寄
5、存器寄存器表達(dá)式表達(dá)式常量:指令中出現(xiàn)的固定不變的值。可分為:n數(shù)值常量n字符常量數(shù)值常量允許使用二進(jìn)制、十進(jìn)制、十六進(jìn)制數(shù),但要注意應(yīng)以B、D、H字符結(jié)尾。十六進(jìn)制數(shù)如果以字母開頭,則必須在該數(shù)前面加0,以區(qū)別于標(biāo)識(shí)符,如0F5H。ASCII碼常數(shù)可將字符放在單引號(hào)內(nèi),如A。變量:指存放在某些存儲(chǔ)單元中的值,這些值是可變的??梢杂貌煌膶ぶ贩绞綄?duì)其存取。變量具有如下三種屬性:n段屬性:段屬性:指變量所在段的段基址。n偏移量屬性:偏移量屬性:指變量單元地址與段的起始地址之間的地址偏移量。n類型屬性:類型屬性:是指變量所占存儲(chǔ)單元的字節(jié)數(shù)。類型有字節(jié)(BYTE)、字(WORD)、雙字(DWORD
6、)等。標(biāo)號(hào)有三種屬性:n段屬性:段屬性:定義標(biāo)號(hào)的程序段的段基址,當(dāng)程序中引用一個(gè)標(biāo)號(hào)時(shí),該標(biāo)號(hào)的段地址應(yīng)在CS寄存器中。n偏移量屬性:偏移量屬性:標(biāo)號(hào)所在段的起始地址與定義標(biāo)號(hào)的地址之間的字節(jié)數(shù)。n標(biāo)號(hào)的類型屬性:標(biāo)號(hào)的類型屬性:NEAR和FAR。nNEAR標(biāo)號(hào)可以在段內(nèi)被引用,它所代表的地址指針為兩個(gè)字節(jié);nFAR標(biāo)號(hào)可以跨段引用,它所代表的地址指針為四個(gè)字節(jié)。操作數(shù)部分是寄存器名,如AX、BX、SI等。表達(dá)式:由常數(shù)、變量、操作符和運(yùn)算符組成。有三種運(yùn)算符:n算術(shù)運(yùn)算符n邏輯運(yùn)算符n關(guān)系運(yùn)算符有兩種操作符:n分析運(yùn)算符n合成運(yùn)算符表達(dá)式分為數(shù)值表達(dá)式和地址表達(dá)式。n數(shù)值表達(dá)式只產(chǎn)生數(shù)值結(jié)
7、果。n地址表達(dá)式不是單純的數(shù)值,而是具有不同屬性的存儲(chǔ)器地址變量或標(biāo)號(hào),屬性包括:段、偏移量和類型。包括:(加)、(減)、(乘)、(除)、MOD(取模)等。算術(shù)運(yùn)算符可用于數(shù)值表達(dá)式,運(yùn)算結(jié)果為數(shù)值。在地址表達(dá)式中,只能使用“”、“”運(yùn)算符。包括:AND(與)、OR(或)、XOR(異或)、NOT(非)。注意:邏輯運(yùn)算符只適用于數(shù)字操作,對(duì)存儲(chǔ)器地址操作不適用。例:MOV AX,789AH XOR 000FH 該指令實(shí)際等價(jià)于 MOV AX,7895H。包括:EQ(等于)、NE(不等于)、LT(小于)、GT(大于)、LE(小于等于)、GE(大于等于)。關(guān)系運(yùn)算符所連接的兩個(gè)操作數(shù),必須是數(shù)字或是
8、同一段內(nèi)的存儲(chǔ)器地址。運(yùn)算結(jié)果為數(shù)字值。當(dāng)關(guān)系不成立,則結(jié)果為0;當(dāng)關(guān)系成立,則結(jié)果為全1。例:MOV AL,5 NE 2;關(guān)系成立,故(AL)=0FFH MOV AL,5 LT 2;關(guān)系不成立,故(AL)=00H取地址偏移量運(yùn)算符取地址偏移量運(yùn)算符OFFSET取段基址運(yùn)算符取段基址運(yùn)算符SEG取類型運(yùn)算符取類型運(yùn)算符TYPE取變量單元數(shù)運(yùn)算符取變量單元數(shù)運(yùn)算符LENGTH取變量字節(jié)數(shù)運(yùn)算符取變量字節(jié)數(shù)運(yùn)算符 SIZE格式:OFFSET 變量或標(biāo)號(hào)例:MOV SI,OFFSET BUF 等價(jià)于 LEA SI,BUF注意:OFFSET后面只能是變量或標(biāo)號(hào)。格式:SEG 變量或標(biāo)號(hào)例:MOV AX
9、,SEG BUF;將BUF所在段的段基址送入寄存器AX。格式:TYPE 變量或標(biāo)號(hào)該算符返回的結(jié)果為一數(shù)值。格式:LENGTH 變量如果一個(gè)變量已用重復(fù)操作符DUP說明其變量的個(gè)數(shù),則利用LENGTH算符可以得到這個(gè)變量的個(gè)數(shù)。如果未用DUP說明,則得到結(jié)果總為1。格式:SIZE 變量如果一個(gè)變量已用重復(fù)操作符DUP說明其變量的個(gè)數(shù),則利用SIZE算符可以得到這個(gè)變量的字節(jié)總數(shù)。如果未用DUP說明,則得到的結(jié)果和TYPE算符所得結(jié)果相同??蓪?duì)變量、標(biāo)號(hào)或存儲(chǔ)器操作數(shù)的類型屬性進(jìn)行修改。類型設(shè)置運(yùn)算符類型設(shè)置運(yùn)算符PTR定義類型運(yùn)算符定義類型運(yùn)算符THIS格式:類型 PTR 表達(dá)式其中類型可以是
10、BYTE、WORD、DWORD、NEAR、FAR。該算符強(qiáng)制設(shè)置表達(dá)式類型為算符前的規(guī)定類型。例:MOV BYTE PTR SI,200格式:THIS 類型該運(yùn)算符的功能是將類型符后面的類型屬性賦予當(dāng)前的存儲(chǔ)單元。例4.2 DATA1 EQU THIS WORD DATA2 DB 12H,34H,56H,78HDATA1變量是字類型,而DATA2為字節(jié)類型,它們具有同樣的段和偏移量。注釋由分號(hào)“;”引導(dǎo),用來說明一段程序、一條或幾條指令的功能,使程序便于閱讀。匯編程序?qū)ψ⑨尣贿M(jìn)行匯編。偽指令是給匯編程序的控制命令,在匯編過程中由匯編程序進(jìn)行處理。翻譯成目標(biāo)程序后,這些偽指令就不存在了。符號(hào)定義
11、偽指令符號(hào)定義偽指令1數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令2段定義偽指令段定義偽指令3過程定義偽指令過程定義偽指令4源程序結(jié)束偽指令源程序結(jié)束偽指令5符號(hào)定義偽指令用來給一個(gè)符號(hào)重新命名,或定義新的類型屬性等。這些符號(hào)包括匯編語言中所用的變量名、標(biāo)號(hào)名、過程名、寄存器名以及指令的助記符等。符號(hào)定義偽指令有:等價(jià)偽指令等價(jià)偽指令等號(hào)偽指令等號(hào)偽指令格式:符號(hào)名 EQU 表達(dá)式例:A EQU 5*3+2利用EQU偽指令,可以用一個(gè)名字代表一個(gè)數(shù)值。如該數(shù)值在程序中多次被引用,這種方法可以使程序更加簡(jiǎn)潔,并且將來修改數(shù)值時(shí),只要修改一處,而不必修改多處,提高了修改的效率。利用EQU偽指令,也可以用一個(gè)較短的
12、名字來代表一個(gè)較長(zhǎng)的名字。EQU偽操作不能對(duì)同一個(gè)符號(hào)重復(fù)定義。格式:符號(hào)名 =表達(dá)式等號(hào)偽指令主要用來定義符號(hào)常量。其功能與EQU類似,而與EQU的唯一區(qū)別是它能對(duì)符號(hào)進(jìn)行再定義。數(shù)據(jù)定義偽指令用來定義一個(gè)變量,為變量分配存儲(chǔ)空間,賦初值等。格式:格式:變量名變量名 偽指令偽指令 表達(dá)式表達(dá)式,表達(dá)式,表達(dá)式變量名字段為可選項(xiàng),可有可無。表達(dá)式可以不止一個(gè),但相互之間應(yīng)以逗號(hào)分開。偽指令表達(dá)式例4.4例4.5例4.8 用DB定義的變量類型為字節(jié)(BYTE);用DW定義的變量類型為字(WORD);用DD定義的變量類型為雙字(DWORD);用DQ定義的變量類型為四字(QWORD);用DT定義的變
13、量類型為10個(gè)字節(jié)(TBYTE)。表達(dá)式可以是以下幾種:常量或常量表達(dá)式。ASCII碼字符或字符串。問號(hào)“?”表示初值未確定,常用來預(yù)留存儲(chǔ)空間。重復(fù)子句DUP格式格式為:N DUP (表達(dá)式)其中N為重復(fù)次數(shù),括號(hào)內(nèi)的表達(dá)式為重復(fù)的內(nèi)容。地址表達(dá)式。即用變量名來表示的變量地址。X1 DB 08HBUF DW 01H,02H,03H,04HX108H01H存儲(chǔ)器存儲(chǔ)器00HBUF02H00H03H00H04H00H01H02H03H04HBUF1 DB HELLOBUF2 DB ABBUF3 DW ABBUF1HE存儲(chǔ)器存儲(chǔ)器LBUF2LOABBABUF3BUF1 DB HELLOSA_BUF
14、 DW BUF1LA_BUF DD BUF1BUF1HE存儲(chǔ)器存儲(chǔ)器LSA_BUFLOLA_BUFBUF1的偏移地址BUF1的偏移地址BUF1的段基址一個(gè)匯編語言源程序由若干個(gè)邏輯段組成,所有的指令、變量分別存放在各個(gè)邏輯段中。段定義偽指令用來定義匯編語言源程序的邏輯段。常用的段定義偽指令有:SEGMENT/ENDSASSUMEORG格式:段名格式:段名 SEGMENT 定位方式定位方式 組合方式組合方式 類別類別 段名段名 ENDSSEGMENT為段定義符,ENDS為段結(jié)束符,它們必須成對(duì)出現(xiàn)。省略號(hào)部分:省略號(hào)部分:n對(duì)于數(shù)據(jù)段、擴(kuò)展段和堆棧段來說,一般是存儲(chǔ)單元的定義、分配等偽指令;n對(duì)
15、于代碼段來說,一般是完成程序功能的指令語句和偽指令語句。段名是程序員為該段定義的名字,不可省略。定位方式、組合方式、類別是賦給段名的屬性。通過建立段與段寄存器之間的對(duì)應(yīng)關(guān)系,明確源程序中邏輯段與物理段之間的關(guān)系。格式:ASSUME 段寄存器名:段名段寄存器名:段名,段寄存器名:段名,段寄存器名:段名其中段寄存器名必須是CS、DS、ES、SS中的一個(gè),段名必須是由SEGMENT和 ENDS偽指令定義的段名。ASSUME偽指令只指定所定義的段和段寄存器的對(duì)應(yīng)關(guān)系,并不能將段基址裝入段寄存器中。數(shù)據(jù)段、擴(kuò)展段、堆棧段寄存器的初值應(yīng)該在代碼段中由程序?qū)懭?,代碼段CS寄存器的初值由系統(tǒng)自動(dòng)裝入。例4.9
16、DSEG SEGMENT DATA1 DB 02HBUF1 DW 01H,02H,03HDSEG ENDSESEG SEGMENT DATA2 DB 3 DUP(03H)SUM DB?ESEG ENDSSSEG SEGMENT STACK STK DB 100 DUP(?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,SS:SSEG,DS:DSEG,ES:ESEGSTART:MOV AX,DSEG MOV DS,AX ;將DSEG段的段基址裝入DS MOV AX,ESEG MOV ES,AX ;將ESEG段的段基址裝入ES MOV AX,SSEG MOV SS,AX
17、;將SSEG段的段基址裝入SS CSEG ENDS END START匯編地址計(jì)數(shù)器保存當(dāng)前正在被匯編程序翻譯的指令或偽指令的地址。用符號(hào)$來代表當(dāng)前匯編地址計(jì)數(shù)器中的值。定位偽指令ORG可以設(shè)置當(dāng)前匯編地址計(jì)數(shù)器中的值。格式:ORG 數(shù)值表達(dá)式數(shù)值表達(dá)式例4.11DSEG SEGMENTORG 10HBUF DB 1234ORG$+5NUM DW 50DSEG ENDSBUF12存儲(chǔ)器存儲(chǔ)器34NUM0010H0014H0019H32H00H50格式:過程名過程名 PROC NEAR/FAR 過程名過程名 ENDP如沒有指明類型,則默認(rèn)為NEAR類型。PROC和ENDP必須成對(duì)出現(xiàn)。當(dāng)一個(gè)程
18、序段被定義為過程后,在其它地方就可以通過CALL指令來調(diào)用這段程序。格式:END 標(biāo)號(hào)標(biāo)號(hào)/過程名過程名該語句為源程序的最后一個(gè)語句,表示源程序的結(jié)束。其中標(biāo)號(hào)對(duì)應(yīng)程序開始執(zhí)行的起始地址。若有多個(gè)模塊相連接,則只有主模塊要使用標(biāo)號(hào),其他模塊只使用END而不必指定標(biāo)號(hào)。例4.13:兩數(shù)求和的程序段DSEG SEGMENT DATA;定義數(shù)據(jù)段DATA1 DB 15H;被加數(shù)SUM DB 00H;和DSEG ENDS;數(shù)據(jù)段結(jié)束CSEG SEGMENT CODE;定義代碼段ASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEG MOV DS,AX;裝入數(shù)據(jù)段DS初值 MOV
19、 AL,DATA1;被加數(shù)送AL ADD AL,12H;(AL)+12H AL MOV SUM,AL;和送SUM HLT;暫停指令CSEG ENDS;代碼段結(jié)束 END START;源程序結(jié)束匯編語言程序的結(jié)構(gòu)是分段結(jié)構(gòu)形式,一個(gè)匯編語言源程序由若干段組成,每個(gè)段以SEGMENT開始,以ENDS結(jié)束。整個(gè)源程序以END結(jié)束。每個(gè)段均有若干行指令,每一條指令占一行。程序設(shè)計(jì)的基本步驟程序設(shè)計(jì)的基本步驟4.3.1順序結(jié)構(gòu)順序結(jié)構(gòu)4.3.2分支結(jié)構(gòu)分支結(jié)構(gòu)4.3.3循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)4.3.4子程序結(jié)構(gòu)子程序結(jié)構(gòu)4.3.5分析問題,建立數(shù)學(xué)模型確定算法繪制流程圖分配存儲(chǔ)器及寄存器編制程序調(diào)試程序整理開
20、發(fā)文檔、投入使用程序的基本結(jié)構(gòu)有三種形式:順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。順序程序是指程序在執(zhí)行時(shí)完全按照指令的存放順序從第一條開始逐條執(zhí)行,直到最后一條指令為止。順序程序能較好地完成一些基本功能,例如數(shù)據(jù)的傳送和交接、查找和算術(shù)運(yùn)算等。順序程序是構(gòu)成復(fù)雜程序的基礎(chǔ)。例4.14設(shè)內(nèi)存單元DATA存放一字節(jié)無符號(hào)數(shù),編程將其拆成二個(gè)一位十六進(jìn)制數(shù),HEX單元存放低 位 十 六 進(jìn) 制 數(shù),HEX+1單元存放高位十六進(jìn)制數(shù)。DSEG SEGMENTDATA DB 8AHHEX DB 0,0DSEG ENDSSSEG SEGMENT STACKSTK DB 100 DUP(?)SSEG ENDSCSE
21、G SEGMENTASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART:MOV AX,DSEG MOV DS,AX MOV AL,DATA;無符號(hào)數(shù)送AL MOV AH,AL;保存副本到AH AND AL,0FH;屏蔽高四位 MOV HEX,AL;保存低四位 AND AH,0F0H;屏蔽低四位 MOV CL,4 SHR AH,CL;右移四位 MOV HEX+1,AH;保存高四位 MOV AH,4CH INT 21H;返回操作系統(tǒng)CSEG ENDS END START 在很多實(shí)際問題中,都是根據(jù)不同的情況進(jìn)行不同的處理。這種思想體現(xiàn)在程序設(shè)計(jì)中,就是根據(jù)不同條件而跳到不同的程序
22、段去執(zhí)行,這就構(gòu)成了分支程序。分支程序結(jié)構(gòu)有不完全分支結(jié)構(gòu)和完全分支結(jié)構(gòu)兩種基本形式。例子設(shè)內(nèi)存中有三個(gè)互不相等的有符號(hào)字?jǐn)?shù)據(jù),分別存放在X、Y、Z字單元中,編程將其中最小值存入MIN單元。DSEG SEGMENTX DW 4321HY DW 7658HZ DW 9B00HMIN DW?DSEG ENDSSSEG SEGMENT STACKSTK DB 100 DUP(?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART:MOV AX,DSEG MOV DS,AX MOV AX,X CMP AX,Y JL NEXT MOV AX,
23、YNEXT:CMP AX,Z JL DONE MOV AX,ZDONE:MOV MIN,AX MOV AH,4CH INT 21H CSEG ENDS END START 在程序設(shè)計(jì)中,經(jīng)常遇到一個(gè)程序段需要多次重復(fù)執(zhí)行。對(duì)這類問題采用循環(huán)程序結(jié)構(gòu),可以使程序代碼縮短,并節(jié)省內(nèi)存。四部分:n循環(huán)初始部分:建地址指針、置計(jì)數(shù)初值、設(shè)置必要的常數(shù)、對(duì)工作寄存器及工作單元置初值或清0等。n循環(huán)操作部分:重復(fù)執(zhí)行的部分,循環(huán)的核心。n循環(huán)修改部分:修改計(jì)數(shù)器、寄存器、地址指針、恢復(fù)某些參數(shù)。n循環(huán)控制部分:判斷控制循環(huán)是否結(jié)束或繼續(xù).循環(huán)程序有兩個(gè)基本結(jié)構(gòu):n先處理后判斷結(jié)構(gòu)n先判斷后處理結(jié)構(gòu)例4.1
24、7圖4.4例4.18試編程統(tǒng)計(jì)由DATA單元開始的數(shù)據(jù)塊中能被3整除的無符號(hào)字節(jié)數(shù)據(jù)的個(gè)數(shù)。結(jié)果存于COUNT單元中。(設(shè)數(shù)據(jù)塊中共有10個(gè)無符號(hào)字節(jié)數(shù))分析:可以采用除法指令,對(duì)待判斷的無符號(hào)數(shù)做除3操作,然后檢查余數(shù)是否為零,若為零,則該數(shù)能被3整除。流程圖源程序DSEG SEGMENTDATA DB 41,9,33H,0F0H,32,0AH,0FFH,99,68,23HCOUNT DW?DSEG ENDS SSEG SEGMENT STACKSTK DB 100 DUP(?)SSEG ENDSCSEG SEGMENT ASSUME DS:DSEG,SS:SSEG,CS:CSEG STAR
25、T:MOV AX,DSEG MOV DS,AX LEA SI,DATA MOV CX,10 MOV DX,0 MOV BL,3LP:MOV AL,SI MOV AH,0 DIV BL AND AH,AH JNZ NEXT INC DX NEXT:INC SI LOOP LP MOV COUNT,DX MOV AH,4CH INT 21HCSEG ENDS END START 試編程統(tǒng)計(jì)DA1字單元中二進(jìn)制數(shù)據(jù)中含1的個(gè)數(shù),結(jié)果存于DA2單元中。分析:可以利用移位指令,將待判斷的字?jǐn)?shù)據(jù)一位一位地移到進(jìn)位位中,然后判斷進(jìn)位位是1還是0,以此實(shí)現(xiàn)對(duì)二進(jìn)制數(shù)據(jù)中含1的個(gè)數(shù)統(tǒng)計(jì)。流程圖源程序DSEG S
26、EGMENT DA1 DW 3F28HDA2 DB?DSEG ENDSSSEG SEGMENT STACKSTK DB 100 DUP(?)SSEG ENDSCSEG SEGMENT ASSUME DS:DSEG,SS:SSEG,CS:CSEGSTART:MOV AX,DSEG MOV DS,AX XOR BL,BL MOV AX,DA1LP:AND AX,AX JZ DONE SHL AX,1 JNC LP INC BL JMP LP DONE:MOV DA2,BL MOV AH,4CH INT 21HCSEG ENDS END START 在編寫程序時(shí),經(jīng)常在不同的位置或不同的程序段中存在
27、相同語句串,可以將它們抽取出來,組成子程序,供其它程序調(diào)用,調(diào)用子程序的程序被稱為主程序。不但使主程序結(jié)構(gòu)清晰,而且節(jié)省了內(nèi)存空間。編寫子程序的注意事項(xiàng)例4.19例4.21主程序和子程序之間的信息交換主要通過參數(shù)的傳遞來實(shí)現(xiàn)。參數(shù)傳遞的方法有三種:寄存器傳遞法 存儲(chǔ)器傳遞法 堆棧傳遞法。注意保護(hù)和恢復(fù)現(xiàn)場(chǎng)。所謂現(xiàn)場(chǎng),就是指調(diào)用程序當(dāng)前CPU狀態(tài),包括標(biāo)志寄存器、通用寄存器、段寄存器以及指令指針寄存器的內(nèi)容。保護(hù)和恢復(fù)的操作一般在子程序中進(jìn)行,進(jìn)入子程序后,就應(yīng)該把子程序中所使用到的寄存器內(nèi)容保存在堆棧中,而在子程序返回主程序之前根據(jù)堆棧中的內(nèi)容恢復(fù)原來的狀態(tài)。編制程序?qū)崿F(xiàn)兩數(shù)據(jù)塊的傳送。子程序
28、的入口參數(shù)SI和DI分別指向源數(shù)據(jù)塊和目的數(shù)據(jù)塊的首地址,CX用來存放數(shù)據(jù)塊的長(zhǎng)度。本例采用寄存器傳遞參數(shù)的方法來完成主程序與子程序之間的傳遞參數(shù)。源程序DSEG SEGMENTSOURCE DB 1,2,3,4,5,6,7,8,9,10,11,12LENT EQU$-SOURCEDEST DB LENT DUP(?)DSEG ENDSSSEG SEGMENT STACKSTK DB 100 DUP(?)SSEG ENDSCSEG SEGMENT ASSUME DS:DSEG,SS:SSEG,CS:CSEGSTART:MOV AX,DSEG MOV DS,AX LEA SI,SOURCE;源數(shù)
29、據(jù)塊的首地址送SI LEA DI,DEST;目的數(shù)據(jù)塊的首地址送DI MOV CX,LENT;數(shù)據(jù)塊的長(zhǎng)度送CX CALL MOVSTR MOV AH,4CH INT 21H;子程序名:MOVSTR;功能:完成數(shù)據(jù)塊的傳送;入口參數(shù):SI源數(shù)據(jù)塊的首地址;DI目的數(shù)據(jù)塊的首地址;CX數(shù)據(jù)塊的長(zhǎng)度MOVSTR PROC NEAR PUSH AXLP1:MOV AL,SI MOV DI,AL INC SI INC DI LOOP LP1 POP AX RETMOVSTR ENDPCSEG ENDS END START將內(nèi)存中的兩個(gè)數(shù)組的對(duì)應(yīng)單元求和,其結(jié)果存放到另一個(gè)數(shù)組中,要求求和部分由子程序完
30、成。需要注意,由于CALL指令將返回地址存放在堆棧的頂部,故在子程序中,從堆棧中取參數(shù),不能使用POP指令,應(yīng)該使用MOV指令直接到堆棧中取出參數(shù)。源程序DSEG SEGMENTA1 DW 100H,300H,1128H,40,55,121,39,21,39,3165HA2 DW 20H,102H,2218H,33,65,141,1,155,18,2120HA3 DW 10 DUP(0)DSEG ENDSSSEG SEGMENT STACKSTK DB 100 DUP(?)SSEG ENDSCSEG SEGMENT ASSUME DS:DSEG,SS:SSEG,CS:CSEGSTART:MOV
31、 AX,DSEG MOV DS,AX MOV CX,10 MOV SI,OFFSET A1 MOV DI,OFFSET A2 MOV BX,OFFSET A3LOP:PUSH WORD PTR SI PUSH WORD PTR DI CALL SUM MOV BX,AX ADD BX,2 ADD SI,2 ADD DI,2 LOOP LOP MOV AH,4CH INT 21H SUM PROC NEAR PUSH BP MOV BP,SP MOV AX,BP+4 ADD AX,BP+6 POP BP RET SUM ENDPCSEG ENDS END START DOS(Disk Opera
32、tion System)和BIOS(Basic Input and Output System)為用戶提供兩組系統(tǒng)服務(wù)程序。用戶程序可以調(diào)用這些系統(tǒng)服務(wù)程序。DOS提供若干功能調(diào)用。包括基本輸入/輸出管理、內(nèi)存儲(chǔ)器讀/寫管理、磁盤文件的讀/寫管理、時(shí)間和日期的設(shè)置功能。BIOS在較低層次上為用戶提供一組I/O程序,要求用戶對(duì)硬件有一定的了解,但也不要求用戶直接控制外設(shè)。BIOS駐留在ROM中,獨(dú)立于操作系統(tǒng)。用戶通過軟中斷指令I(lǐng)NT n去調(diào)用DOS和BIOS中的服務(wù)程序來訪問系統(tǒng)。系統(tǒng)功能調(diào)用的方法系統(tǒng)功能調(diào)用的方法4.4.1常用的系統(tǒng)功能調(diào)用常用的系統(tǒng)功能調(diào)用4.4.2INT 21H是一個(gè)具
33、有多個(gè)子功能的中斷服務(wù)程序,這些子功能的編號(hào)稱為功能號(hào)。INT 21H一般稱為系統(tǒng)功能調(diào)用。調(diào)用步驟:調(diào)用步驟:置入口參數(shù)置入口參數(shù)功能號(hào)功能號(hào)AH執(zhí)行執(zhí)行INT 21H分析出口參數(shù)分析出口參數(shù)視具體情況而定視具體情況而定返回操作系統(tǒng)返回操作系統(tǒng)(4CH功能功能)6在屏幕上輸出字符串在屏幕上輸出字符串(09H功能功能)4字符串輸入字符串輸入(0AH功能功能)5在打印裝置上輸出單個(gè)字符在打印裝置上輸出單個(gè)字符(05H功能功能)3在屏幕上輸出單個(gè)字符在屏幕上輸出單個(gè)字符(02H功能功能)2讀取鍵盤單個(gè)字符并回顯讀取鍵盤單個(gè)字符并回顯(01H功能功能)1調(diào)用方式:MOV AH,1;子功能號(hào)送AH I
34、NT 21H說明:該調(diào)用沒有入口參數(shù),執(zhí)行時(shí),系統(tǒng)掃描鍵盤,等到鍵盤按下,先檢查是否是CTRL-BREAK鍵,如是則退出命令執(zhí)行,否則將按下鍵對(duì)應(yīng)ASCII碼送入AL寄存器,并在屏幕上顯示該字符。調(diào)用方式:MOV AH,2;子功能號(hào)送AH MOV DL,A INT 21H;將字符A在屏幕上顯示出來說明:該調(diào)用無出口參數(shù),入口參數(shù)(待顯示字符的ASCII碼)送DL,如DL中的字符為CTRL-BREAK,則終止程序執(zhí)行。調(diào)用方式:MOV AH,5;子功能號(hào)送AH MOV DL,A INT 21H;將字符A在打印機(jī)上打印出來 功能:在輸出設(shè)備上顯示一個(gè)以$為結(jié)束標(biāo)志的字符串。入口參數(shù):DS:DX指向
35、一個(gè)以$為結(jié)束標(biāo)志的字符串。例:BUF DB WELCOME TO OUR SYSTEM$.MOV DX,OFFSET BUF MOV AH,9 INT 21H 運(yùn)行后,在屏幕上顯示“WELCOME TO OUR SYSTEM”。功能:將從鍵盤上輸入的一串字符送到指定的內(nèi)存緩沖區(qū)。入口參數(shù):DS:DX指向內(nèi)存緩沖區(qū)。緩沖區(qū)的第一個(gè)字節(jié):放緩沖區(qū)能容納的最大字符個(gè)數(shù)(1-255),不能為零。緩沖區(qū)的第二個(gè)字節(jié):是保留來填寫實(shí)際輸入的字符個(gè)數(shù),由計(jì)算機(jī)自動(dòng)填入。緩沖區(qū)的第三字節(jié)開始,存放從鍵盤接收到的字符,最后結(jié)束字符串的回車符也包括在內(nèi)。如實(shí)際鍵入的字符數(shù)少于定義的字節(jié)數(shù),緩沖區(qū)內(nèi)其余字節(jié)填零,若多于定義的字節(jié)數(shù),則后來的輸入字符丟掉并響鈴。例子DSEG SEGMENTBUF DB 30 ;定義緩沖區(qū)的長(zhǎng)度 DB?;保留為填入實(shí)際輸入的字符個(gè)數(shù) DB 30 DUP(?);定義30個(gè)字節(jié)存儲(chǔ)空間,用以存放鍵入的字符DSEG ENDSCSEG SEGMENT .LEA DX,BUF MOV AH,0AH INT 21H .CSEG ENDS 無入口參數(shù)。功能:結(jié)束當(dāng)前程序,返回操作系統(tǒng)。調(diào)用方式:MOV AH,4CH INT 21H
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度組織生活會(huì)個(gè)人“4個(gè)方面”對(duì)照檢查材料文稿
- 2024年組織生活會(huì)個(gè)人對(duì)照檢查發(fā)言材料(普通黨員)例文
- 2025年旅游業(yè)高質(zhì)量發(fā)展行動(dòng)方案文稿
- 2025年機(jī)關(guān)組織生活會(huì)班子對(duì)照檢查材料范文
- 普通黨員2024年組織生活會(huì)個(gè)人發(fā)言提綱(圍繞“四個(gè)帶頭”方面)文稿
- 鄉(xiāng)班子領(lǐng)導(dǎo)干部2024年度民主生活會(huì)“四個(gè)帶頭”對(duì)照檢查發(fā)言材料文稿
- 2024年度黨員領(lǐng)導(dǎo)干部民主生活會(huì)整改落實(shí)方案例文
- 關(guān)于2024年度民主生活會(huì)個(gè)人問題的整改方案例文
- 2025年醫(yī)療保障工作要點(diǎn)范文
- 青年人才“育苗蹲苗”培養(yǎng)實(shí)施方案范文
- 2025駐村第一書記組織生活會(huì)對(duì)照檢查材料例文
- 國(guó)企公司2025年安全生產(chǎn)工作要點(diǎn)范文
- 2024年度國(guó)企個(gè)人組織生活會(huì)前準(zhǔn)備情況、上年度整改落實(shí)情況范文
- 2024年度組織生活會(huì)黨支部委員會(huì)全年工作開展情況匯報(bào)例文
- 機(jī)關(guān)黨組2024年度從案件中汲取教訓(xùn)做好以案促改專題民主生活會(huì)整改落實(shí)情況報(bào)告例文
相關(guān)資源
更多