微機(jī)原理PPT第五章 匯編語(yǔ)言程序設(shè)計(jì)_第1頁(yè)
微機(jī)原理PPT第五章 匯編語(yǔ)言程序設(shè)計(jì)_第2頁(yè)
微機(jī)原理PPT第五章 匯編語(yǔ)言程序設(shè)計(jì)_第3頁(yè)
微機(jī)原理PPT第五章 匯編語(yǔ)言程序設(shè)計(jì)_第4頁(yè)
微機(jī)原理PPT第五章 匯編語(yǔ)言程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩77頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章匯編語(yǔ)言程序設(shè)計(jì)一、程序設(shè)計(jì)基本步驟分析問題,明確要求。建立數(shù)學(xué)模型。確定算法。畫程序流程圖。編寫程序。上機(jī)調(diào)試。1、算法(Algorithm)算法是對(duì)特定問題求解步驟的一種描述,是指令的有限序列。每一條指令表示一個(gè)或多個(gè)操作。(1)有窮性。一個(gè)算法必須在有窮步之后結(jié)束,即必須在有限時(shí)間內(nèi)完成。(2)確定性。算法的每一步必須有確切的定義。算法的執(zhí)行對(duì)應(yīng)著的相同的輸人僅有惟一的一條路徑。(3)可行性。算法中的每一步都可以通過已經(jīng)實(shí)現(xiàn)的基本運(yùn)算的有限次執(zhí)行得以實(shí)現(xiàn)。(4)輸入。一個(gè)算法具有零個(gè)或多個(gè)輸人,這些輸人取自特定的數(shù)據(jù)對(duì)象集合。(5)輸出。一個(gè)算法具有一個(gè)或多個(gè)輸出,這些輸出同輸人之間存在某種特定的關(guān)系。一個(gè)好的算法通常要考慮以下的要求:(1)正確。算法的執(zhí)行結(jié)果應(yīng)當(dāng)滿足預(yù)先規(guī)定的功能和性能要求。(2)可讀。一個(gè)算法應(yīng)當(dāng)思路清晰、層次分明、簡(jiǎn)單明了、易讀易懂。(3)健壯。當(dāng)輸入不合法數(shù)據(jù)時(shí),能作正當(dāng)處理,不至引起嚴(yán)重后果。(4)高效。有效使用存儲(chǔ)空間和有較高的時(shí)間效率。2、程序流程圖程序流程圖是通過使用各種形狀的框,用來表示各種不同的操作,框內(nèi)文字由人們根據(jù)操作的需要指定,應(yīng)當(dāng)是明確而無“歧義性”的。帶箭頭的流程線,用來表示操作的順序,即指向下一步的操作,用流程圖表示算法形象直觀、流向清楚。程序流程圖潛在的缺點(diǎn):允許流程線向任意方向轉(zhuǎn)移,這可能出現(xiàn)“亂麻式”流程,有時(shí)使人難以看懂其來龍去脈(可用N-S結(jié)構(gòu)化流程圖)。3、基本程序結(jié)構(gòu)順序結(jié)構(gòu)也就是順序執(zhí)行結(jié)構(gòu),它是最基本、最常用的結(jié)構(gòu)。所謂順序執(zhí)行,就是按照程序語(yǔ)句行的自然順序,一條語(yǔ)句按一條語(yǔ)句地執(zhí)行程序。選擇結(jié)構(gòu)包括簡(jiǎn)單選擇和多分支選擇結(jié)構(gòu),這種結(jié)構(gòu)可以根據(jù)設(shè)定的條件,控制語(yǔ)句流程,有選擇地執(zhí)行不同的語(yǔ)句序列。重復(fù)結(jié)構(gòu)是用于在某些程序中,常常需要重復(fù)使用某一段相同的或類似的程序段,利用重復(fù)結(jié)構(gòu)可簡(jiǎn)化大量的程序行。二、順序結(jié)構(gòu)程序設(shè)計(jì)及實(shí)例沒有分支、循環(huán)等轉(zhuǎn)移指令的程序,會(huì)按指令書寫的前后順利依次執(zhí)行,這就是順序程序順序結(jié)構(gòu)是最基本的程序結(jié)構(gòu)完全采用順序結(jié)構(gòu)編寫的程序并不多見例1、將內(nèi)存單元DAT1中的組合BCD碼變換成兩個(gè)非組合BCD碼,存于其后面的兩個(gè)單元。

DATASEGMENTDAT1DB76H,2DUP(?)

DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETDAT1DAT1DAT1+1DAT1+2760607

MOVAL,[SI]ANDAL,0FHMOV[SI+1],ALMOVAL,[SI]ANDAL,0F0HMOVCL,4RORAL,CLMOV[SI+2],ALHLTCODEENDSENDSTART問題一:如要將2個(gè)非組合BCD碼變?yōu)榻M合BCD碼怎么辦?問題二:如要將1個(gè)組合BCD碼變?yōu)?個(gè)ASCⅡ碼怎么辦?問題三:如要將2個(gè)ASCⅡ碼變?yōu)榻M合BCD碼怎么辦?DAT1DAT1+1DAT1+2060886DAT1DAT1+1DAT1+2543435二一DAT1DAT1+1DAT1+2323552三例2、從鍵盤中鍵入0~9中的任意自然數(shù)X,求其立方值。利用查表法,構(gòu)建0~9的立方表,字節(jié)變量X存放鍵入的自然數(shù),其立方值存于下面的單元。

DATASEGMENTTABDW0H,1H,8H,27H,64H,125H,

DW216H,

343H,512H,729HXDB?

XXXDW?

DATAENDS

CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,OFFSETTABMOVSI,OFFSETXMOVAH,1INT21HANDAL,0FHMOV[SI],AL

ADDAL,ALMOVAH,0ADDBX,AXMOVAX,[BX]MOV[SI+1],AXMOVAH,4CHINT21HCODEENDSENDSTART問題:可否直接查表指令?為什么?

三、分支程序設(shè)計(jì)及實(shí)例分支程序根據(jù)條件是真或假?zèng)Q定執(zhí)行與否判斷的條件是各種指令,如CMP、TEST等執(zhí)行后形成的狀態(tài)標(biāo)志轉(zhuǎn)移指令Jcc和JMP可以實(shí)現(xiàn)分支控制分支結(jié)構(gòu)有單分支結(jié)構(gòu)雙分支結(jié)構(gòu)多分支結(jié)構(gòu)1、單分支結(jié)構(gòu)條件成立跳轉(zhuǎn),否則順序執(zhí)行分支語(yǔ)句體注意選擇正確的條件轉(zhuǎn)移指令和轉(zhuǎn)移目標(biāo)地址例1、從端口地址為PORT1的輸入端口輸入數(shù)值,與預(yù)定值相比,將差額的絕對(duì)值反饋給控制端口PORT2DATASEGMENTADB50H;設(shè)預(yù)定值

DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAGO:MOVAX,DATAMOVDS,AX

MOVBL,AINAL,PORT1CMPAL,BLJGLB1XCHGAL,BLLB1:SUBAL,BLOUTPORT2,ALCODEENDSENDGO問題一:求差的絕對(duì)值還有其他方法嗎?解答:一、先減,為正即為絕對(duì)值,為負(fù),需求補(bǔ)。2、雙分支結(jié)構(gòu)條件成立跳轉(zhuǎn)執(zhí)行第2個(gè)分支語(yǔ)句體,否則順序執(zhí)行第1個(gè)分支語(yǔ)句體注意:第1個(gè)分支體后一定要有一個(gè)JMP指令跳到第2個(gè)分支體后問題:分支程序中最需要注意的指令是哪一條?JMP指令例、內(nèi)存單元中有一數(shù)X(8位無符號(hào)),按下式計(jì)算Y值,并將Y值存于X后面的單元

DATASEGMENTXDB42HYDW?DATAENDSY=3X+100X≧50X2-5X+20X<50CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,XMOVAH,0CMPAX,50JNBLOP1MOVBX,AXMULBX

MOVDX,BXMOVCL,2SHLBX,CLADDBX,DXSUBAX,BXADDAX,20

JMPLOP2LOP1:MOVBX,AXSHLAX,1ADDAX,BXADDAX,100

LOP2:MOVY,AXHLTCODEENDSENDSTART問題一:如X是有符號(hào)數(shù)怎么辦?問題二:如X是16位數(shù)怎么辦?問題三:如X是BCD碼怎么辦?3、多分支結(jié)構(gòu)多分支結(jié)構(gòu)是多個(gè)條件對(duì)應(yīng)各自的分支語(yǔ)句體,哪個(gè)條件成立就轉(zhuǎn)入相應(yīng)分支體執(zhí)行AH=0fuction0YNAH=1fuction1YNAH=2fuction2YN例、將某班同學(xué)的成績(jī)按優(yōu)、良、中、及格、不及格分類統(tǒng)計(jì)人數(shù)。設(shè)A:優(yōu)(5)B:良(4)C:中(3)

D:及格(2)E:不及格(1)

DATASEGMENTADB0BDB0CDB0DDB0EDB0

DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATAMOVDS,AXMOVAH,1INT21HA1:CMPAL,‘5’JNEB1INCAJMPNEXTB1:CMPAL,‘4’JNEC1INCBJMPNEXTC1:CMPAL,‘3’JNED1INCCJMPNEXTD1:CMPAL,‘2’JNEE1INCDJMPNEXTE1:CMPAL,‘1’JNENEXTINCENEXT:MOVAH,4CHINT21HCODEENDSENDBEGIN編寫分支程序要注意的問題1、條件轉(zhuǎn)移語(yǔ)句的轉(zhuǎn)移范圍在-128~+127字節(jié)之間,若超出此范圍要和無條件轉(zhuǎn)移語(yǔ)句聯(lián)合使用例JALOP1…LOP1:JMPLOP2…LOP2:…2、分支程序編寫時(shí)要注意每個(gè)分支的出口位置,如果程序復(fù)雜,要畫流程圖或N-S結(jié)構(gòu)化流程圖3、利用間接轉(zhuǎn)移的方式,可以實(shí)現(xiàn)動(dòng)態(tài)轉(zhuǎn)移如:SWDWLM0,LM1,LM2,…….,LMn

在:CODE中可使用以下語(yǔ)句

MOVSI,N;N為n的2倍

JMP[SW+SI]

三、循環(huán)程序設(shè)計(jì)循環(huán)程序結(jié)構(gòu)是滿足一定條件的情況下,重復(fù)執(zhí)行某段程序循環(huán)結(jié)構(gòu)的程序通常有3個(gè)部分:循環(huán)初始部分——為開始循環(huán)準(zhǔn)備必要的條件,如循環(huán)次數(shù)、循環(huán)體需要的數(shù)值等循環(huán)體部分——指重復(fù)執(zhí)行的程序部分,其中包括對(duì)循環(huán)條件等的修改程序段循環(huán)控制部分——判斷循環(huán)條件是否成立,決定是否繼續(xù)循環(huán)關(guān)鍵是什么?循環(huán)控制循環(huán)結(jié)構(gòu)程序的設(shè)計(jì)關(guān)鍵是循環(huán)控制部分循環(huán)控制可以在進(jìn)入循環(huán)之前進(jìn)行,也可以在循環(huán)體后進(jìn)行,于是形成兩種結(jié)構(gòu):“先判斷、后循環(huán)”結(jié)構(gòu)“先循環(huán)、后判斷”結(jié)構(gòu)循環(huán)結(jié)束的控制可以用循環(huán)次數(shù),還可以用特定條件等,于是又有:計(jì)數(shù)控制循環(huán)條件控制循環(huán)先循環(huán)后判斷的循環(huán)結(jié)構(gòu)

結(jié)束

初始化

循環(huán)的初始狀態(tài)

循環(huán)體

循環(huán)的工作部分及修改部分

計(jì)數(shù)控制循環(huán)條件控制循環(huán)修改部分控制條件YN1、計(jì)數(shù)控制循環(huán)計(jì)數(shù)控制循環(huán)利用循環(huán)次數(shù)作為控制條件易于采用循環(huán)指令LOOP和JCXZ實(shí)現(xiàn)初始化:將循環(huán)次數(shù)或最大循環(huán)次數(shù)置入CX循環(huán)體循環(huán)控制:用LOOP指令對(duì)CX減1、并判斷是否為0例1、數(shù)據(jù)塊是帶符號(hào)的8位二進(jìn)制數(shù),要求把其中的正負(fù)數(shù)分開,分別存在其后的存儲(chǔ)區(qū)中。

DATASEGMENTDA1DB25H,BDH,7FH,94H,65H,…,A5HDA2DB20DUP(?);正數(shù)

DA3DB20DUP(?);負(fù)數(shù)

DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXLEASI,DA1LEADI,DA2LEABX,DA3MOVCX,20GO1:LODSBTESTAL,80HJNZNEG1STOSBJMPNEXTNEG1:XCHGBX,DISTOSBXCHGBX,DINEXT:LOOPGO1

HLTCODEENDSENDSTART問題:還需要要統(tǒng)計(jì)正、負(fù)數(shù)的個(gè)數(shù)該如何處理?例2:內(nèi)存中連續(xù)存放10個(gè)8位無符號(hào)數(shù),計(jì)算其平均值,并將其存入其后的一個(gè)單元。DATASEGMENTDA1DB35H,7BH,64H,89H,…,A2H

10個(gè)數(shù)DA2DB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATAMOVDS,AXLEABX,DA1;LEADI,DA2;MOVCX,10;XORAX,AX;LP1:ADDAL,[BX];JNCM1;INCAH;M1:INCBX;LOOPLP1;MOVBL,10;DIVBL;MOV[DI],ALCODEENDSENDBEGIN問題一:注意高8位的處理?問題二:如是BCD碼如何處理?

個(gè)數(shù)等于10

xorax,axmov

cl,4lp1:addal,[bx]shrax,cl

daa

mov[di],al

adcah,0incbxlooplp1

個(gè)數(shù)大于10

,求累加和

xorax,axlp1:addal,[bx]

daa

xchg

al,ah

adcal,0

daa

xchg

al,ahincbxlooplp12.條件控制循環(huán)條件控制循環(huán)需要利用特定條件判斷循環(huán)是否結(jié)束條件控制循環(huán)用條件轉(zhuǎn)移指令判斷循環(huán)條件轉(zhuǎn)移指令可以指定目的標(biāo)號(hào)來改變程序的運(yùn)行順序,如果目的標(biāo)號(hào)指向一個(gè)重復(fù)執(zhí)行的語(yǔ)句體的開始或結(jié)束,便構(gòu)成了循環(huán)控制結(jié)構(gòu)顯示以0結(jié)尾的字符串 ;數(shù)據(jù)段string db'Letushaveatry!',0

;代碼段

mov

bx,offsetstringagain:

mov

dl,[bx]

cmpdl,0

jzdone

;為0結(jié)束

movah,2 ;不為0,顯示

int21h incbx

;指向下一個(gè)字符

jmpagaindone: ……條件控制循環(huán)先判斷后循環(huán)記錄某個(gè)字存儲(chǔ)單元數(shù)據(jù)中1的個(gè)數(shù)

;數(shù)據(jù)段number dw1110111111100100B

;代碼段

mov

bx,number

xordl,dl ;循環(huán)初值:DL←0again: testbx,0ffffh ;也可以用cmpbx,0

jzdone

;全部是0就可以退出循環(huán),減少循環(huán)次數(shù)

shlbx,1 ;用指令shrbx,1也可以

adcdl,0

;利用ADC指令加CF的特點(diǎn)進(jìn)行計(jì)數(shù)

jmpagain條件控制循環(huán)先判斷后循環(huán)3、多重循環(huán)(循環(huán)嵌套)

循環(huán)之中還有循環(huán),可以多次嵌套,典型例子雙重循環(huán)。例:將一組數(shù)據(jù)按一定的順序(大?。┡帕小;痉椒ǎ?、兩兩相比(沉底法)大循環(huán)用交換標(biāo)志控制,有交換繼續(xù),否則停止。小循環(huán)利用循環(huán)次數(shù)控制,循環(huán)次數(shù)依次遞減。

2、依次相比法(冒泡法)大、小循環(huán)用都利用循環(huán)次數(shù)控制,大循環(huán)n-1次,小循環(huán)從n-1開始,并依次遞減

例、將一組16位有符號(hào)數(shù)按從大到小的順序排列DATASEGMENTARRAYDW1234H,5376H,796AH,...,0AB10HCOUNTEQULENGTHARRAYDATAENDSSTACKSEGMENTSTAPNDW100dup(?)TOPEQULENGTHSTAPNSTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXMOVBL,0FFH;

A1:CMPBL,0FFHJNEA4;XORBL,BLMOVCX,COUNT-1;XORSI,SI;A2:MOVAX,[SI+ARRAY];CMPAX,[SI+ARRAY+2];JGEA3XCHG[SI+ARRAY+2],AX;MOV[SI+ARRAY],AXMOVBL,0FFH;A3:INCSI;INCSI;LOOPA2;JMPA1;A4:HLTCODEENDSENDSTART循環(huán)程序應(yīng)用舉例例1:將存儲(chǔ)器AL中的二進(jìn)制數(shù)變?yōu)槭M(jìn)制后,取轉(zhuǎn)變后的百位數(shù)放在寄存器DL中

KIOKDB100LEABX,KIOK;MOVAL,0F3H;CVDEC:MOVDL,30H;CVDEC1:SUBAL,[BX]JBCVDEC2;INCDL;JMPCVDEC1;例2:兩個(gè)非組合BCD碼相乘,數(shù)的ASCII碼形式存于內(nèi)存(低位在上)

如:94573X6DATASEGMENTADB‘3’,‘7’,‘5’,‘4’,‘9’BDB‘6’CDBLENGTH(A)+1DUP(?)DATAENDS

CODESEGUMEASSUMECS:CODE,DS:DATAGO:MOVAX,DATAMOVDS,AXMOVES,AXCLDMOVSI,OFFSETAMOVDI,OFFSETCMOVCX,LENGTHAMOVBL,BYTEPTR[B];ANDBL,0FH;MOVBYTEPTR[DI],0CYCLE:LODSB;ANDAL,0FHMULBL;AAMADDAL,[DI];AAA;STOSB;MOV[DI],AH;LOOPCYCLEHLTCODEENDSENDGO四、子程序設(shè)計(jì)把功能相對(duì)獨(dú)立的程序段單獨(dú)編寫和調(diào)試,作為一個(gè)相對(duì)獨(dú)立的模塊供主程序使用,就形成子程序子程序可以實(shí)現(xiàn)源程序的模塊化,可簡(jiǎn)化源程序結(jié)構(gòu),可以提高編程效率主程序(調(diào)用程序)需要利用CALL指令調(diào)用子程序(被調(diào)用程序)子程序需要利用RET指令返回主程序過程定義和子程序編寫匯編語(yǔ)言中,子程序要用一對(duì)過程偽指令PROC和ENDP聲明,格式如下:

過程名

PROC[NEAR|FAR] …… ;過程體

過程名

ENDP可選的參數(shù)指定過程的調(diào)用屬性。沒有指定過程屬性,則采用默認(rèn)屬性NEAR屬性(段內(nèi)近調(diào)用)的過程只能被相同代碼段的其他程序調(diào)用FAR屬性(段間遠(yuǎn)調(diào)用)的過程可以被相同或不同代碼段的程序調(diào)用子程序編寫注意事項(xiàng)⑴子程序要有一定的通用性,準(zhǔn)確、精確,可以被反復(fù)調(diào)用。⑵子程序最后利用RET指令返回主程序,主程序執(zhí)行CALL指令調(diào)用子程序。⑶子程序中對(duì)堆棧的壓入和彈出操作要成對(duì)使用,保持堆棧的平衡。⑷子程序開始應(yīng)該保護(hù)使用到的寄存器,子程序返回前應(yīng)進(jìn)行恢復(fù)。⑸子程序應(yīng)必須寫明入口、出口條件,以方便調(diào)用。例1:將5位十進(jìn)制數(shù)(<65535)轉(zhuǎn)換為二進(jìn)制數(shù)方法:(abcde)=ax104+bx103+cx102+dx10+e=(((((ax10)+b)x10+c)x10)+d)x10+e)在運(yùn)算過程中不調(diào)整,結(jié)果即為二進(jìn)制數(shù)

入口條件:5位的十進(jìn)制數(shù)以ASCII碼的形式存于內(nèi)存,SI為高位首地址,CX為n-1

出口條件:結(jié)果存于AX中ZH1PROCZH1:PUSHBXPUSHDXMOVBX,000AHMOVAH,0;MOVAL,BYTEPTR[SI];ANDAL,0FH;AA1:MULBX;ADDAL,BYTEPTR[SI+1];SUBAL,30H;INCSI;LOOPAA1;POPDX;POPBX;RETZH1ENDP主程序(子程序的調(diào)用):DATASEGMENTBUFFDB‘3’,‘6’,‘4’,‘1’,‘5’SUMDW2DUP(?)COUNTEQULENGTHBUFFDATAENDSSTACKSEGMENTSTAPWDW100DUP(?)TOPEQULENGTHSTAPNSTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXMOVSI,OFFSETBUFFMOVDI,OFFSETSUMMOVCX,COUNT-1CALLZH1MOV[DI],AXHLTCODEENDSENDSTART例2、將二進(jìn)制轉(zhuǎn)換為十進(jìn)制,除10取余法(亦可用乘法)入口條件:要轉(zhuǎn)換的數(shù)在DX中出口條件:結(jié)果存于SI指明的內(nèi)存中(ASCII碼的形式)XXXXHXXXH0AH0AH00AH余D0....余D1余DnZH2PROCZH2:PUSHAXPUSHCXPUSHDXA1:MOVAX,DXMOVDX,0MOVCX,000ADIVCXXCHGAX,DXADDAL,30HMOVBYTEPTR[SI],ALINCSICMPDX,0JNZA1B1:CMPSI,BUF2JZDONEINCSIMOVAL,30HMOVBYTEPRE[SI],ALJMPB1DONE:POPDXPOPCXPOPAXRETZH2ENDP參數(shù)傳遞主程序與子程序間一個(gè)主要問題是參數(shù)傳遞入口參數(shù)(輸入?yún)?shù)):主程序調(diào)用子程序時(shí),提供給子程序的參數(shù)出口參數(shù)(輸出參數(shù)):子程序執(zhí)行結(jié)束返回給主程序的參數(shù)參數(shù)的具體內(nèi)容傳數(shù)值:傳送數(shù)據(jù)本身傳地址:傳送數(shù)據(jù)的主存地址常用的參數(shù)傳遞方法寄存器共享變量堆棧

用寄存器傳遞參數(shù)最簡(jiǎn)單和常用的參數(shù)傳遞方法是通過寄存器,只要把參數(shù)存于約定的寄存器中就可以了由于通用寄存器個(gè)數(shù)有限,這種方法對(duì)少量數(shù)據(jù)可以直接傳遞數(shù)值,而對(duì)大量數(shù)據(jù)只能傳遞地址采用寄存器傳遞參數(shù),注意帶有出口參數(shù)的寄存器不能保護(hù)和恢復(fù),帶有入口參數(shù)的寄存器可以保護(hù)、也可以不保護(hù),但最好能夠保持一致用共享變量傳遞參數(shù)子程序和主程序使用同一個(gè)變量名存取數(shù)據(jù)就是利用共享變量(全局變量)進(jìn)行參數(shù)傳遞如果變量定義和使用不在同一個(gè)源程序中,需要聲明如果主程序還要利用原來的變量值,則需要保護(hù)和恢復(fù)利用共享變量傳遞參數(shù),子程序的通用性較差,但特別適合在多個(gè)程序段間、尤其在不同的程序模塊間傳遞數(shù)據(jù)用堆棧傳遞參數(shù)參數(shù)傳遞還可以通過堆棧這個(gè)臨時(shí)存儲(chǔ)區(qū)。主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧取得它們采用堆棧傳遞參數(shù)是程式化的,它是編譯程序處理參數(shù)傳遞、以及匯編語(yǔ)言與高級(jí)語(yǔ)言混合編程時(shí)的常規(guī)方法使用堆棧傳遞參數(shù),其子程序返回時(shí)要使用指令

RETn第四章習(xí)題1、下面程序段的功能是將內(nèi)存單元DAT1起始的20個(gè)8位二進(jìn)制數(shù),按正、負(fù)分別存放,正數(shù)存于BUF1開始的單元,負(fù)數(shù)存于BUF2開始的單元,仔細(xì)閱讀程序,改正其中的錯(cuò)誤。

CLDSTOSWMOVSI,DAT1JMPGONDMOVDI,BUF1MIUS:XCHGBX,SIMOVBX,BUF2STOSBLOP1:LODSBXCHGBX,DIMOVCX,20GOND:LOOPLOP1TESTAL,80HLTJZMIUS

2、下面程序段的功能是將SI=2000H為起始的6個(gè)單元的組合BCD碼累加,其結(jié)果仍在SI為指針的內(nèi)存中,仔細(xì)閱讀程序,改正其中的錯(cuò)誤。

MOVSI,2000HMOVSI,ALMOVCX,6INCSIXORAL,ALLOOPLOP1LOP1:ADDAL,[SI]MOV[SI],AHAAAHLTADDAH,03、下面程序段的功能是將SI=1000H為起始的2個(gè)單元的ASCⅡ碼(個(gè)位數(shù)

溫馨提示

  • 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. 人人文庫(kù)網(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)論