微機(jī)原理第八章微型計算機(jī)的程序設(shè)計課件_第1頁
微機(jī)原理第八章微型計算機(jī)的程序設(shè)計課件_第2頁
微機(jī)原理第八章微型計算機(jī)的程序設(shè)計課件_第3頁
微機(jī)原理第八章微型計算機(jī)的程序設(shè)計課件_第4頁
微機(jī)原理第八章微型計算機(jī)的程序設(shè)計課件_第5頁
已閱讀5頁,還剩86頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第八章微型計算機(jī)的程序設(shè)計順序結(jié)構(gòu)程序分支結(jié)構(gòu)程序循環(huán)結(jié)構(gòu)程序子程序結(jié)構(gòu)第八章微型計算機(jī)的程序設(shè)計順序結(jié)構(gòu)程序重點:程序設(shè)計方法順序結(jié)構(gòu)程序分支結(jié)構(gòu)程序循環(huán)結(jié)構(gòu)程序子程序結(jié)構(gòu)重點:程序設(shè)計方法8.1程序設(shè)計步驟1.分析問題2.建立數(shù)學(xué)模型3.確定算法4.繪制程序流程圖5.內(nèi)存分配6.編制程序7.程序調(diào)試8.1程序設(shè)計步驟1.分析問題datasegmenta1db'hellon!',0dh,0ah,'$'dataendsStack1segmentparastack……..Stack1endscodesegmentassumecs:code,ds:data,ss:stack1

start:movax,datamovds,axmovah,4chint21hcodeends

endstart看一個例子數(shù)據(jù)段堆棧段代碼段datasegment看一個例子數(shù)據(jù)段堆棧段代碼段8-1順序程序設(shè)計補(bǔ)充:二進(jìn)制編碼的十進(jìn)制數(shù)二進(jìn)制編碼的十進(jìn)制數(shù)

就是BCD碼(BinaryCodedDecimal)。①壓縮BCD碼是用4位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù)。一個字節(jié)表示兩位十進(jìn)制數(shù)。如:10010110B表示96D②非壓縮BCD碼是用一個字節(jié)表示一位十進(jìn)制數(shù)。高4位總是0。如:00001001B表示9D

兩種BCD碼的編碼對照表8-1順序程序設(shè)計補(bǔ)充:二進(jìn)制編碼的十進(jìn)制數(shù)二進(jìn)制編碼的十兩種BCD碼的編碼對照表兩種BCD碼的編碼對照表1.BCD數(shù)加法調(diào)整指令DAA和AAA(P196)DAA-----兩個壓縮BCD數(shù)相加調(diào)整指令:(AL&0FH)>9或者AF=1,則AL加6;(AL&0F0H)>90H或CF=1,則AL加60H;如:MOVAX,3456HADDAL,AH;AL=8AHDAA;AL=90H1.BCD數(shù)加法調(diào)整指令DAA和AAA(P196)DAA-AAA-----兩個非壓縮BCD數(shù)相加調(diào)整指令若(AL&0FH)>9或AF=1,則(AL+6)&0FH送AL,AH加1且CF置1;否則:(AL&0F0H)送AL,AH不變且CF保持0不變;如:MOVAX,0806HADDAL,AH;AL=0EH,AH=08H(沒變)MOVAH,0AAA;屬于第1種情況,故AL為(AL+6)&0F=14H&0FH=04H;AH=01HAAA-----兩個非壓縮BCD數(shù)相加調(diào)整指令【例8.1】的程序段為:stacksegmentstack‘stackdw32dup(0)stackstackendsdatasegmentW1 DW8931HW2 DW5678HSUMDB 3DUP(0)data endscode segmentbegin procfar assumess:stack,cs:code,ds:data pushds subax,ax pushax

【例8.1】的程序段為:

movax,data movds,ax MOVAL,BYTEPTRW1;AL=31H(+78H) ADDAL,BYTEPTRW2;AL=A9H,CF=0,AF=0 DAA ;BCD數(shù)加法調(diào)整指令;AL=09H,CF=1 MOVSUM,AL MOVAL,BYTEPTRW1+1;AL=89H(+56H) ADCAL,BYTEPTRW2+1;AL=E0H,CF=0,AF=1 DAA ;AL=46H,CF=1 MOVSUM+1,AL MOVSUM+2,0;處理向萬位的進(jìn)位 RCLSUM+2,1;也可用指令A(yù)DCSUM+2,0 retbeginendpcodeends endbegin

例8.2非壓縮BCD數(shù)W1與W2(均為字變量)相加,將其和送到SUM字節(jié)變量中。datasegmentW1 DW0809H;即89DW2 DW0607H;即67DSUMDB 3DUP(0);一個字節(jié)放1位BCD碼,用來放加完后的值156data ends例8.2非壓縮BCD數(shù)W1與W2(均為字變量)相加,將其 MOVAX,W1;AX=0809H,W2為0607H ADDAL,BYTEPTRW2;AL=10H,CF=0,AF=1 AAA ;屬于第一種情況,故;AL為(AL+06H)&0FH=10H+06H)&0FH;=16H&0FH=06H=AL;;AH加1且CF置CF=1,所以AH=08H+1=09H,則AX=0906H MOVSUM,AL;(SUM)=06H MOVAL,AH;AL=09H ADDAL,BYTEPTRW2+1

;AL=09H+06H=0FH,屬于第1種情況 MOVAH,0 AAA ;AL=05H,AH=01H;第一種情況處理:AL=(AL+06H)&0FH,因0FH+06H=15H,故AL=05H,AH=AH+1=0+1=01H,所以AX=0105H MOVWORDPTRSUM+1,AX;(SUM+1)=05,(SUM+2)=01

此句也可表達(dá)為MOV[SUM],AL;見P151 MOVAX,W1;AX=2.BCD數(shù)減法調(diào)整指令DAS和DAA(自看,P198)DAS-----兩個壓縮BCD數(shù)相減調(diào)整指令:(AL&0FH)>9,則AL減6;(AL&0F0H)>90H,則AL減60H;如:MOVAX,5634HSUBAL,AH;AL=DEH,有借位DAS;AL=78H,保持借位即134-56AAS-----兩個非壓縮BCD數(shù)相減調(diào)整指令2.BCD數(shù)減法調(diào)整指令DAS和DAA(自看,P198)D3.非壓縮BCD數(shù)乘除法調(diào)整指令A(yù)AM和AAD(P199,自看)3.非壓縮BCD數(shù)乘除法調(diào)整指令A(yù)AM和AAD(P199,順序程序設(shè)計舉例:

例7.7鏡子程序,P183-184datasegmentOBUFDB‘>’0DH,0AH,‘$’IBUFDB0FFH,0,255DUP(0)data ends順序程序設(shè)計舉例:

例7.7鏡子程序,P183-184daMOVDX,OFFSETOBUF;顯示提示符“>”并回車換行MOVAH,O9INT21HMOVDX,OFFSETIBUF;輸入并顯示字符串MOVAH,10INT21HMOVBL,IBUF+1MOVBH,0MOVIBUF[BX+2],‘$’MOVDL,0AH;換行MOVAH,2INT21HMOVDX,OFFSETIBUF+2;再顯示輸入的字符串MOVAH,9INT21HMOVDX,OFFSETOBUF;顯示提示8.2分支程序設(shè)計特點:利用改變標(biāo)志位的指令和轉(zhuǎn)移指令來實現(xiàn)。無條件轉(zhuǎn)移指令:JMP(見P207)條件轉(zhuǎn)移指令:Jcondshort-label(偏移地址送到IP)特點:滿足條件,則實現(xiàn)段內(nèi)轉(zhuǎn)移;80386開始才可以轉(zhuǎn)移到代碼段的任何位置。8.2分支程序設(shè)計特點:利用改變標(biāo)志位的指令和轉(zhuǎn)移指令來微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件8.3循環(huán)程序設(shè)計8.3循環(huán)程序設(shè)計微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件8.3.2重復(fù)控制指令LOOPshort-labelLOOPZshort-label或LOOPEshort-labelLOOPNZshort-label或LOOPNEshort-labelJCXZshort-labelJECXZshort-label共同點:均受CX或EXC的值控制,詳見P214-2158.3.2重復(fù)控制指令LOOPshort-lab8.3.3單重循環(huán)設(shè)計舉例例8.11計算Z=X+Y,其中X和Y是雙字變量分析:雙字變量是4個字節(jié),則和可能占5個字節(jié)8.3.3單重循環(huán)設(shè)計舉例例8.11計算Z=X+Y,微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件作業(yè)8.4編寫求兩個4位非壓縮BCD數(shù)之和,將和送顯示器顯示的程序。(P261)分析:兩加數(shù)各要4個字節(jié)單元,可以為DD類型;考慮到進(jìn)位,和要5個字節(jié)單元,另外,輸出到顯示器的結(jié)束符號’$’需要一個單元存放,故共需6個字節(jié)。因此,數(shù)據(jù)段定義為:datasegment

W1DD01020304H W2DD05060708H SUMDB5DUP(0) DB‘$’dataends作業(yè)8.4編寫求兩個4位非壓縮BCD數(shù)之和,將和送顯示器代碼段中的核心語句MOVCX,4MOVSI,0MOVDI,4;要在[SUM+4]中放個位,[SUM+0]中放最高位的進(jìn)位。XORAX,AX;清CFA1:MOVAL,BYTEPTRW1[SI]; ADCAL,BYTEPTRW2[SI] AAA MOVSUM[DI],AL INCSI DECDI LOOPA1 MOVSUM[DI],0 RCLSUM[DI];以上是得到加的結(jié)果,放在SUM中。下面是輸出到顯示器的程序語句

MOVDX,OFFSETSUM MOVAH,09 INT21H

代碼段中的核心語句MOVCX,4作業(yè)8.5編寫求兩個4位壓縮BCD數(shù)之和,將和送顯示器顯示的程序。(P261)分析:兩個加數(shù)各要2個字節(jié)單元,可以為DW類型;考慮到進(jìn)位,和要3個字節(jié)單元,另外,輸出到顯示器的結(jié)束符號’$’需要一個單元存放,故共需4個字節(jié)。因此,數(shù)據(jù)段定義為:datasegment

W1DW1234H W2DW5678H SUMDB3DUP(0) DB‘$’dataends作業(yè)8.5編寫求兩個4位壓縮BCD數(shù)之和,將和送顯示器顯代碼段中的核心語句MOVCX,2MOVSI,0MOVDI,2;要在[SUM+2]中放個位,[SUM+0]中放最高位的進(jìn)位。XORAX,AX;清CFA1:MOVAL,BYTEPTRW1[SI]; ADCAL,BYTEPTRW2[SI] DAA MOVSUM[DI],AL INCSI DECDI LOOPA1 MOVSUM[DI],0 RCLSUM[DI];以上是得到加的結(jié)果,放在SUM中。下面是輸出到顯示器的程序語句

MOVDX,OFFSETSUM MOVAH,09 INT21H

代碼段中的核心語句MOVCX,2作業(yè)8.17編寫求輸入算式’加數(shù)1+加數(shù)2’的和并送顯。(加數(shù)及其和均為4位(即指壓縮)BCD數(shù),P262)

分析:要求先有屏幕顯示輸出‘加數(shù)1+加數(shù)2:’,然后從鍵盤輸入兩個4個字節(jié)的BCD數(shù),加完后送顯。用到的變量:W1和W2因為從鍵盤輸入,均不確定是幾位十進(jìn)制,故需確定其最大位數(shù)不超過要用W1作業(yè)8.17編寫求輸入算式’加數(shù)1+加數(shù)2’的和并送顯。例6.2將內(nèi)存(10050)單元的內(nèi)容拆成兩段,每段4位,并將它們分別存入內(nèi)存(10051)和(10052)單元。即(10050)單元中的低4位放入(10051)單元中的低4位,而(10050)單元中的高4位放入(10052)單元中的低4位。例6.2將內(nèi)存(10050)單元的內(nèi)容拆成兩段,每段4位,并開始初始化用間址方法取數(shù)到AL用AND指令將該數(shù)“與”O(jiān)FH取得低4位,存入內(nèi)存(10051)單元再取出原始數(shù)到AL邏輯右移得高4位,存入內(nèi)存(10052)單元暫停邏輯右移得高4位,存入內(nèi)存(10052)單元開始初始化用間址方法取數(shù)到AL用AND指令將該數(shù)“與”O(jiān)FH程序段如下:MOVAX,1000HMOVDS,AX;給段寄存器DS賦值MOVSI,50HMOVAL,[SI];把物理地址為10000H+0050H=10050H

;中的存儲內(nèi)容給ALANDAL,0FH;把AL中的前4位清0,取得低4位值MOV[SI+1],AL;把得到的低4位放到(10051H)單元MOVAL,[SI];再取出需拆字節(jié)放到AL中MOVCL,4SHRAL,CL;邏輯右移4次,前4位補(bǔ)0;MOV[SI+2],AL;放入(10052)單元ANDAL,F(xiàn)0HMOVE[SI+2],AL程序段如下:MOVAX,1000HANDAL6-3、分枝結(jié)構(gòu)程序兩分支結(jié)構(gòu)6-3、分枝結(jié)構(gòu)程序兩分支結(jié)構(gòu)多分支結(jié)構(gòu)

多分支結(jié)構(gòu)例6.3求AX累加器和BX寄存器中兩個無符號數(shù)之差的絕對值,結(jié)果放在內(nèi)存(2800)單元中。分析:不知AX與BX中數(shù)的大小,故需先判斷誰大,然后用大的減小的才可求得絕對值,其流程圖如圖6-5例6.3求AX累加器和BX寄存器中兩個無符號數(shù)之差的絕對值開始初始化,清CFAX-BXAXAX內(nèi)存(2800和(2801)單元暫停邏輯右移得高4位,存入內(nèi)存(10052)單元AX-BX≥0AX-BXAXBX內(nèi)存(2800和(2801)單元否是開始初始化,清CFAX-BXAXAX內(nèi)存相應(yīng)程序段如下(p141)

CLCSUBAX,BXJCAA;進(jìn)位位為1,就轉(zhuǎn)移到AAMOVDI,2800HMOV[DI],AXHLTAA:SUBBX,AXMOVDI,2800HMOV[DI],BXHLT相應(yīng)程序段如下(p141)例6.4從外設(shè)71號中取一個數(shù)M,判斷其值是否在10和20之間,即10≤M<20.

如果M≥20H,則送0FFH給外設(shè)73H;

如果M<10,則送00H給外設(shè)73H;

如果10≤M<20,則送88H給外設(shè)73H.

分析:根據(jù)題意,我們可以看出這是一個需要兩次判斷M大小的問題。我們可以先判M是否大于10,再判M是否大于20。

(2)根據(jù)解決問題的思路,我們先畫出程序流程圖,如下圖所示。從圖6中程序流程圖來看,兩個分支都要“回歸”原程序。

(3)編制的程序如下:例6.4從外設(shè)71號中取一個數(shù)M,判斷其值是否在10和20微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件相關(guān)程序段如下(p142)

START:INAL,71H;將71H端口的字節(jié)讀入AL

CLC;清除CF

CMPAL,10;AL-10,結(jié)果不返回

JCLP1;小于10轉(zhuǎn)LP1

CMPAL,20;AL-20,結(jié)果不返回

JCLP2;10AL<20

轉(zhuǎn)LP2

MOVBL,0FFH;將0FFH送入BL寄存器

LP3:OUT73H,BL;將0FFH輸出到73H端口

HLT;暫停

LP1:MOVBL,00

JMPLP3

LP2:MOVBL,88H

JMPLP3

只能用累加器AX/AL作為執(zhí)行輸入/輸出過程的機(jī)構(gòu),故要改為AL。故OUT73H,BL替換為:MOVAL,BLOUT73H,AL相關(guān)程序段如下(p142)START:賦初值條件循環(huán)體修改YN開始6-4、循環(huán)程序設(shè)計1、先判斷條件,然后執(zhí)行循環(huán)體。賦初值條件循環(huán)體修改YN開始6-4、循環(huán)程序設(shè)計1、先判斷條賦初值循環(huán)體修改條件?NY開始2、先執(zhí)行循環(huán)體,然后判斷條件。特點:至少執(zhí)行一次循環(huán)體。賦初值循環(huán)體修改條件?NY開始2、先執(zhí)行循環(huán)體,然后判斷條例6.5求兩個多字節(jié)數(shù)之和,這兩個數(shù)在10050H地址開始的內(nèi)存單元中,連續(xù)存放,低位在小地址一端,結(jié)果放在這兩個數(shù)之后。設(shè)這兩個多字節(jié)數(shù)均為8個字節(jié)。流程圖如下:例6.5求兩個多字節(jié)數(shù)之和,這兩個數(shù)在10050H地址開始初始化段地址DS:1000H第一個數(shù)指針SI=50H第二個數(shù)指針DI=58H結(jié)果指針BX=60H循環(huán)次數(shù)CX=4清除進(jìn)位位CF取一個字AXCX=0YN開始和數(shù)=前一次+(指針)即AXAX+[DI]+CF

SISI+2修改指針DIDI+2計數(shù)器CXCX-1暫停結(jié)果和的指針起始值應(yīng)該為60H,請分析!初始化取一個字AXCX=0YN開始和數(shù)相關(guān)程序段如下(p144)START:MOVAX,1000HMOVDS,AXMOVSI,50H;第一個指數(shù)指針SI=50HMOVDI,58H;第二個指數(shù)指針DI=58HMOVBX,60H;結(jié)果指針60HCLC;清進(jìn)位CF=0AA:MOVAX,[SI];取一個字到AXADCAX,[DI];AX=AX+[DI]+CFMOV[BX],AX;存一個字到BX;

PUSHF;保護(hù)進(jìn)位CF;

ADDSI,2;修改第一個數(shù)的指針SI=SI+2ADDDI,2;修改第二個數(shù)的指針DI=DI+2ADDBX,2;修改結(jié)果指針BX=BX+2POPF;恢復(fù)標(biāo)志寄存器

LOOPAA;CX=CX-1,若CX≠0,轉(zhuǎn)AAHLT;CX=0,暫停相關(guān)程序段如下(p144)START:MOV例2、編程序統(tǒng)計AX寄存器中1的個數(shù)。(采用AX=0?做為循環(huán)的條件)(本題即書上第六章習(xí)題第6.6題,見P152)其程序流程圖如下圖例2、編程序統(tǒng)計AX寄存器中1的個數(shù)。(采用AX微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件程序如下:CODESEGMENTASSUMECS:CODESTART:MOVCX,0

;存1的個數(shù)AGAIN:TESTAX,0FFFFHJZBSALAX,1;算術(shù)左移一位,此處用SHL(邏輯左移)也可JNCA;進(jìn)位不等于1,則轉(zhuǎn)A;INCCX;進(jìn)位為1,CX=CX+1;A:JMPAGAINB:MOVAH,4CH;相當(dāng)于B:HLTINT21HCODEENDS ENDSTART程序如下:CODESEGMENT例6.6要求設(shè)計一個軟件延時程序,延時時間約1ms左右。

(1)分析題目:此題是想讓計算機(jī)做一些無用的操作,來拖延時間。我們可以從指令手冊中查得各條指令所需的時間節(jié)拍,但一般指令執(zhí)行時間只有幾個時鐘周期,亦即只有幾個微秒,為了能用較少的指令來編較長時間的延時,我們可以利用循環(huán)程序結(jié)構(gòu)。(2)程序流程圖如圖6-11所示。例6.6要求設(shè)計一個軟件延時程序,延時時間約1m微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件

在這個框圖中,初始化部分由于沒有數(shù)據(jù)操作問題,因此也就不用設(shè)置間接地址指針。另外,延時的時間主要取決于循環(huán)體及循環(huán)次數(shù)。我們從手冊上可以查得PUSHF和POPF指令分別為10和8個時鐘節(jié)拍,LOOPBX指令為3.4個時鐘節(jié)拍在此循環(huán)體需要用10+8+3.4=21.4拍,而每個時鐘節(jié)拍是根據(jù)此系統(tǒng)的晶振頻率而定的。假設(shè)此系統(tǒng)用的是8Hz的晶振,則每個時鐘節(jié)拍需要0.125微秒因此我們可以根據(jù)下列公式算出循環(huán)次數(shù):在這個框圖中,初始化部分由于沒有數(shù)據(jù)微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件6-5子程序子程序:相對主程序而言,是被主程序調(diào)用的程序.子程序調(diào)用示意圖:

6-5子程序子程序:相對主程序而言,是被主程序調(diào)用子程序是程序設(shè)計中經(jīng)常使用的程序結(jié)構(gòu),通過把一些固定的、經(jīng)常使用的功能做成子程序的形式,可以使源程序及目標(biāo)程序大大縮短,提高程序設(shè)計的效率和可靠性。對于一個子程序,應(yīng)該注意它的入口參數(shù)和出口參數(shù)。入口參數(shù)是由主程序傳給子程序的參數(shù),而出口參數(shù)是子程序運算完傳給主程序的結(jié)果。另外,子程序所使用的寄存器和存儲單元往往需要保護(hù),以免影響返回后主程序的運行。主程序在調(diào)用子程序時,一方面初始數(shù)據(jù)要傳給子程序,另一方面子程序運行結(jié)果要傳給主程序,因此,主子程序之間的參數(shù)傳遞是非常重要的。子程序是程序設(shè)計中經(jīng)常使用的程序結(jié)構(gòu),通過把一些固定的、經(jīng)常參數(shù)傳遞一般有三種方法實現(xiàn)。

(1)利用寄存器。這是一種最常見方法,把所需傳遞的參數(shù)直接放在主程序的寄存器中傳遞給子程序。(2)利用存儲單元。這種參數(shù)傳遞方法,把所需傳遞的參數(shù)直接放在子程序調(diào)用指令代碼之后。(3)利用堆棧。這種方法將參數(shù)壓入堆棧,在子程序運行時從堆棧中取參數(shù),其程序流程圖如下圖所示。參數(shù)傳遞一般有三種方法實現(xiàn)。

(1)利用寄存器。這是一種最堆棧程序流程圖堆棧程序流程圖例6.7延時1秒的子程序段(見P148)DELAYS:PUSHFPUSHBXPUSHCXMOVBX,3E8HMOVCX,176HLP2:MOVCX,176HLP1:PUSHFPOPFLOOPLP1DECBXJNZLP2POPCXPOPBXPOPFRETSUB_DELAYSPROCNEARSUB_DELAYSENDP把寄存器FR、BX、CX的內(nèi)容壓進(jìn)堆棧,以保護(hù)CPU現(xiàn)場按“先入后出”原則把棧中內(nèi)容彈回到寄存器中去,以恢復(fù)CPU現(xiàn)場。例6.7延時1秒的子程序段(見P148)SUB_DELAYS例6.8

找一個數(shù)據(jù)塊中的最大數(shù),其中數(shù)據(jù)塊的長度>1,并且放在內(nèi)存(2001)單元中,而數(shù)據(jù)塊本身是從(2002)單元開始存放的,最后,把找出的最大值放到(2000)單元中。假設(shè)這段數(shù)據(jù)塊中的數(shù)都是無符號的8位數(shù)。(1)分析題目:此題必定是個循環(huán)程序,而且在處理部分應(yīng)包括判斷分支環(huán)節(jié)。(2)根據(jù)指令系統(tǒng),我們可以采用尋找最大值的計算方法。例6.8找一個數(shù)據(jù)塊中的最大數(shù),其中數(shù)據(jù)塊的長度>1,并

首先,我們用00值放在AL累加器中作為最大值;然后,用數(shù)據(jù)塊的第一個數(shù)和AL中的數(shù)做比較,如果比00大,則用這個數(shù)取代00,放入AL中;接著取出第二個數(shù)與AL中的數(shù)做比較,如果比它大,取而代之,否則不取代,如此往復(fù),直至最后一個數(shù)。這樣,最后AL累加器中必定存放著最大的數(shù)。這就是尋找最大值的方法,而數(shù)據(jù)塊的總長度(數(shù)的個數(shù))就是循環(huán)次數(shù)。(3)繪制出此計算過程的程序流程如圖6-l5所示。首先,我們用00值放在AL累加器中作微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件改為子程序時的

程序段MAX:PUSHFPUSHAXPUSHCXPUSHSISTART:MOVSI,2001HMOVCL,[SI]INCSIMOVAL,00MOVCH,00HLP:CLCCMPAL,[SI]JCBBJMPAABB:MOVAL,[SI]AA:INCSILOOPLPMOV[2000H],ALHLTPOPSIPOPCXPOPAXPOPFRETSUB1PROCNEAR/FARSUB1ENDP改為子程序時的

程序段SUB1PROC微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件1、調(diào)用程序和子程序在同一代碼段子程序的類型應(yīng)為NEARcod1segment………

CALLSUB1…..

SUB1PROCNEAR…….RETSUB1ENDP

cod1ends紅色部分為子程序子程序調(diào)用方式介紹:1、調(diào)用程序和子程序在同一代碼段紅色部分為子程序子程序調(diào)用方2、調(diào)用程序和子程序不在同一代碼段子程序的類型應(yīng)為FAR。子程序SUB1的類型是FAR,可段間調(diào)用,也可段內(nèi)調(diào)用.CODE2SEGMENT……..

SUB1PROCNEAR

…….RETSUB1ENDP……..

CALLSUB1

…….CODE2ENDSCODE1SEGMENT………

CALLFARPTRSUB1……..

CODE1ENDS2、調(diào)用程序和子程序不在同一代碼段子程序的類型應(yīng)為FAR。C

CODE2SEGMENT……..

SUB1PROCNEAR

…….SUB1ENDP……..

CALLSUB1;段內(nèi)調(diào)用

…….CODE2ENDS

子程序SUB1的類型是FAR,可段間調(diào)用,也可段內(nèi)調(diào)用.微機(jī)原理第八章微型計算機(jī)的程序設(shè)計ppt課件6.6查表程序要點:1)確定表格的起始地址(或稱基地址)給BX2)確定要查找對象在表中的序號,(或稱索引值)給AL。3)要用到換碼指令XLAT,將累加器中的值變?yōu)閮?nèi)存表格中的某一個值。注:表格的起始地址為內(nèi)存物理地址中的偏移地址6.6查表程序要點:例6.9:在5.2節(jié)中表5-2所列的十進(jìn)制的7段顯示碼實例,用程序來實現(xiàn),假設(shè)這段數(shù)據(jù)存放在2000H開始的內(nèi)存中,取出“5”所對應(yīng)的7段碼。程序段為:START:MOVBX,2000HMOVAL,5XLATHLT例6.9:在5.2節(jié)中表5-2所列的十進(jìn)制的7段顯示碼實例例2編一子程序利用XLAT指令把十六進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼。假設(shè)ASCII碼存放在以DAT1為首地址的數(shù)據(jù)區(qū)中,對應(yīng)的十六進(jìn)制數(shù)放在以DAT2為首地址的數(shù)據(jù)區(qū)中,轉(zhuǎn)換結(jié)果送以DAT3為首地址的數(shù)據(jù)區(qū)中。分析:首地址即基址DAT1送給BX,ASCII碼表總共有7FH(即128)個字符。所以索引值要從0變到128(存放在DAT2為首地址的數(shù)據(jù)區(qū)中),需要用到循環(huán)將得到的值送到以DAT3為首地址的數(shù)據(jù)區(qū)中。查表核心程序語句為:

MOVBX,2000H(表的首地址)

MOVAL,5(表中對應(yīng)的偏移量,即索引值)

XLAT此程序段的結(jié)果是將查到的結(jié)果送到累加器AX中例2編一子程序利用XLAT指令把十六進(jìn)制數(shù)轉(zhuǎn)換成ASCISUB1PROCNEARSTART:LEASI,[DAT2];或為MOVSI,DAT2LEADI,[DAT3];或為MOVDI,DAT3MOVBX,DAT1MOVCX,16LP1:MOVAL,[SI];或為LODSB,即從RAMAX/ALXLATMOV[DI],AL;STOSB,即從AX/ALRAM

INCSI;若用了LODSB與STOSB,則不用此兩句,

INCDI

;因為串操作時SI和DI作自動增量修改

LOOPLP1

RETSUB1ENDP

POPALP0PCXPOPDIPOPSIPOPBXPUSHBXPUSHSIPUSHDIPUSHCXPUSHALSUB1PROCNEARPOPALPUSHBX第六章習(xí)題與思考題1、用串操作指令實現(xiàn):先將100H個數(shù)從2170H單元處搬到1000H1單元處,然后從中檢索等于AL中字符的單元,并將此單元換成空格字符.2、從60H個元素中尋找一個最大的值,并放到AL中.假設(shè)這60個元素防在DATA1開始的單元中.3、在DS段有一個從TABLE開始的由160個字符組成的鏈表,設(shè)計一個程序,實現(xiàn)對此表進(jìn)行搜索,找到第一個非零元素后,將此單元和下一個單元清零.第六章習(xí)題與思考題1、用串操作指令實現(xiàn):先將100H個

題1:用串操作指令實現(xiàn):先將100H個數(shù)從2170H單元處搬到1000H1單元處,然后從中檢索等于AL中字符的單元,并將此單元換成空格字符.

溫馨提示

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

最新文檔

評論

0/150

提交評論