版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 匯編語(yǔ)言程序:匯編語(yǔ)言程序:用匯編語(yǔ)言編寫(xiě)的、用匯編語(yǔ)言編寫(xiě)的、完成特定功能的指令序列。完成特定功能的指令序列。匯編程序:匯編程序:能將匯編語(yǔ)言能將匯編語(yǔ)言源程序源程序轉(zhuǎn)換成機(jī)器語(yǔ)言轉(zhuǎn)換成機(jī)器語(yǔ)言目標(biāo)目標(biāo)程序的程序的系統(tǒng)軟件。系統(tǒng)軟件。 匯編語(yǔ)言程序到機(jī)器語(yǔ)言程序的轉(zhuǎn)換過(guò)程稱為匯編。匯編語(yǔ)言程序到機(jī)器語(yǔ)言程序的轉(zhuǎn)換過(guò)程稱為匯編。1.手工匯編手工匯編:人工查指令表匯編。用于設(shè)計(jì)短小程序:人工查指令表匯編。用于設(shè)計(jì)短小程序或調(diào)試程序的場(chǎng)合?;蛘{(diào)試程序的場(chǎng)合。2. .機(jī)器匯編機(jī)器匯編:用匯編程序進(jìn)行匯編:用匯編程序進(jìn)行匯編。源程序使用機(jī)器匯編要考慮匯編程序的約定。源程序使用機(jī)器匯編要考慮匯編程序的
2、約定。1 1按指令格式和語(yǔ)法規(guī)則編寫(xiě)程序。按指令格式和語(yǔ)法規(guī)則編寫(xiě)程序。常數(shù)的表示:常數(shù)的表示:十進(jìn)制數(shù):十進(jìn)制數(shù):2020十六進(jìn)制數(shù):十六進(jìn)制數(shù):8787H H,0F0H0F0H二進(jìn)制數(shù):二進(jìn)制數(shù):0101100101011001B B字符:字符:HH字符串:字符串:“Hello”“Hello”。 2 2使用宏指令提供匯編信息使用宏指令提供匯編信息。匯編的主要任務(wù):匯編的主要任務(wù):1 1)確定程序中每條匯編語(yǔ)言指令所對(duì)應(yīng)的機(jī)器碼。確定程序中每條匯編語(yǔ)言指令所對(duì)應(yīng)的機(jī)器碼。2 2)確定每條指令在存儲(chǔ)器中的確定每條指令在存儲(chǔ)器中的存放地址存放地址。3 3)提供出錯(cuò)信息。提供出錯(cuò)信息。4 4)提供
3、目標(biāo)執(zhí)行文件()提供目標(biāo)執(zhí)行文件(* *. .OBJOBJ/ /* *. .HEX)HEX)和列表文件和列表文件(* *. .LSTLST)。)。b一一. . 匯編語(yǔ)言指令類型匯編語(yǔ)言指令類型1 1 機(jī)器指令機(jī)器指令: 指令系統(tǒng)中的全部指令,每條指令有對(duì)應(yīng)的機(jī)器代碼。指令系統(tǒng)中的全部指令,每條指令有對(duì)應(yīng)的機(jī)器代碼。2 2 偽指令偽指令: 匯編控制指令,僅提供匯編信息,沒(méi)有指令代碼。匯編控制指令,僅提供匯編信息,沒(méi)有指令代碼。常用偽指令及其功能:常用偽指令及其功能: 1. 1. ORGORG起始地址指令:指明程序和數(shù)據(jù)塊起始地址。起始地址指令:指明程序和數(shù)據(jù)塊起始地址。指令地址指令地址 機(jī)器碼機(jī)
4、器碼 源程序源程序 ORGORG 2000H 2000H 2000H 78 30 2000H 78 30 MAIN:MOV R0,#30H MAIN:MOV R0,#30H 2002H E6 2002H E6 MOV A,R0 MOV A,R0 (請(qǐng)手工匯編上面請(qǐng)手工匯編上面3 3句程序)句程序) ORG 3000H ORG 3000H 3000H 23 3000H 23 DB 23H,100,A DB 23H,100,A 3001H 100 3001H 100 3002H A 3002H A b2.2.DB DB 定義字節(jié)型常數(shù)指令。定義字節(jié)型常數(shù)指令。例:例: DB 12H,100,DB
5、12H,100,A A 4.4. EQU EQU 等值。為標(biāo)號(hào)或標(biāo)識(shí)符賦值。等值。為標(biāo)號(hào)或標(biāo)識(shí)符賦值。 X1 X1 EQU 2000HEQU 2000HX2 X2 EQU 0FHEQU 0FH MAIN:MAIN:MOV DPTR,#X1MOV DPTR,#X1b 5. 5. ENDEND 結(jié)束匯編指令。結(jié)束匯編指令。b例:例:START: START: b b END ENDb3. 3. DW DW 定義雙字節(jié)型常數(shù)指令。定義雙字節(jié)型常數(shù)指令。例:例: DW 1234H,5678HDW 1234H,5678H7 7. . BITBIT 位定義。位定義。b例:例:BNAM BIT 30HBNA
6、M BIT 30Hb6 6. . DS DS 定義存儲(chǔ)區(qū)域的大小。定義存儲(chǔ)區(qū)域的大小。例:例: ORG 0350HORG 0350HDS 3 DS 3 則則03500350H,0351H,0352H H,0351H,0352H 3 3個(gè)單元就預(yù)留下來(lái)了個(gè)單元就預(yù)留下來(lái)了一一. .確定方案和計(jì)算方法確定方案和計(jì)算方法二二. .了解應(yīng)用系統(tǒng)的硬件配置、性能指標(biāo)。了解應(yīng)用系統(tǒng)的硬件配置、性能指標(biāo)。三三. .建立系統(tǒng)數(shù)學(xué)模型,確定控制算法和操作步驟。建立系統(tǒng)數(shù)學(xué)模型,確定控制算法和操作步驟。四四. .畫(huà)程序流程圖畫(huà)程序流程圖 表示程序結(jié)構(gòu)和程序功能表示程序結(jié)構(gòu)和程序功能 五五. . 編制源程序編制源程
7、序1.1.合理分配存儲(chǔ)器單元和了解合理分配存儲(chǔ)器單元和了解I/OI/O接口地址。接口地址。2.2.按功能設(shè)計(jì)程序,明確各程序之間的相按功能設(shè)計(jì)程序,明確各程序之間的相互關(guān)系。互關(guān)系。3.3.用注釋行說(shuō)明程序,便于閱讀和修改和用注釋行說(shuō)明程序,便于閱讀和修改和調(diào)試。調(diào)試。開(kāi)始開(kāi)始1 YN? : 直線程序、分支程序、直線程序、分支程序、循環(huán)程序、子程序循環(huán)程序、子程序b直線程序又稱簡(jiǎn)單程序,直線程序又稱簡(jiǎn)單程序,b程序走向只有一條路徑。程序走向只有一條路徑。例例1:設(shè)變量存放在:設(shè)變量存放在RAM20HRAM20H單元,單元,其取值分別為其取值分別為0000H,01H,02H,03H,H,01H,
8、02H,03H,04H,05H04H,05H,要求編制一段查表程序,要求編制一段查表程序,查出變量的平方值,查出變量的平方值,并放在片內(nèi)并放在片內(nèi)RAM21HRAM21H單元。單元。 程序代碼:程序代碼: ORG 1000H ORG 1000HSTARTSTART:MOV DPTR,#2000H:MOV DPTR,#2000H MOV A,20H MOV A,20H MOVC A,DPTR+A MOVC A,DPTR+A MOV 21H,A MOV 21H,A SJMP $ SJMP $ ORG 2000H ORG 2000HTABLETABLE:DB 00H,01H,04H,09H,10H,
9、25H:DB 00H,01H,04H,09H,10H,25H END END例例2:編制一段程序,要求在端口線:編制一段程序,要求在端口線P1.0,P1.1上分別產(chǎn)生周期為上分別產(chǎn)生周期為200us和和400us的方波。設(shè)單片機(jī)的外接頻率為的方波。設(shè)單片機(jī)的外接頻率為12MHz。 分析:利用定時(shí)器產(chǎn)生方波,將定時(shí)器設(shè)置成為工作方式分析:利用定時(shí)器產(chǎn)生方波,將定時(shí)器設(shè)置成為工作方式3,將寄,將寄存器存器T0定時(shí)定時(shí)100us,T1定時(shí)定時(shí)200us,達(dá)到定時(shí)時(shí)間后引起中斷,在中達(dá)到定時(shí)時(shí)間后引起中斷,在中斷服務(wù)程序中各自將斷服務(wù)程序中各自將P1.0和和P1.1引腳取反。引腳取反。 定時(shí)器預(yù)設(shè)值的
10、設(shè)置:定時(shí)器預(yù)設(shè)值的設(shè)置:?jiǎn)纹瑱C(jī)的晶體振蕩頻率為單片機(jī)的晶體振蕩頻率為12MHz,計(jì)時(shí)器的計(jì)時(shí)頻率為計(jì)時(shí)器的計(jì)時(shí)頻率為1MHz,機(jī)機(jī)器周期為器周期為1us。 T0定時(shí)定時(shí)100us,因此寄存器因此寄存器T0需要計(jì)數(shù)需要計(jì)數(shù)100次次 ,其預(yù),其預(yù)置值為置值為64H+1=9CH。 T1定時(shí)定時(shí)200us,因此寄存器因此寄存器T1需要計(jì)數(shù)需要計(jì)數(shù)200次次 ,其預(yù)置值為,其預(yù)置值為C8H+1=38H。定時(shí)器定時(shí)器T0,T1的工作方式設(shè)置:的工作方式設(shè)置:T0采用工作方式采用工作方式3,因此,因此TMOD寄存器的值設(shè)置為寄存器的值設(shè)置為#22H。定時(shí)器定時(shí)器T0,T1的控制設(shè)置:的控制設(shè)置:打開(kāi)打開(kāi)
11、T0,T1;要求要求TCON寄存器的值設(shè)置為寄存器的值設(shè)置為#50H。ORG0002HMOV SP, #40H;置堆棧指針MOV TMOD, #22H;T0及T1為工作方式2MOV TL0, #9CH;確定T0的時(shí)間常數(shù)MOV TL1, #38H;確定T1的時(shí)間常數(shù)MOV TCON, #50H;啟動(dòng)T0及T1,開(kāi)始定時(shí)MOV IE, #8AH ;允許T0,T1的中斷ORG000BH ;T0的中斷入口地址IT0: MOV TL0, #9CH ;重置時(shí)間常數(shù)CPLP1.0;P1.0取反RETI;中斷返回ORG001BH ;T1的中斷入口地址IT1: MOV TL1, #38H;重置時(shí)間常數(shù)CPLP
12、1.1;P1.1取反RETI;中斷返回END3-43-4分支程序分支程序由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成程序分支結(jié)構(gòu)。由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成程序分支結(jié)構(gòu)。例題:設(shè)變量例題:設(shè)變量x x以以補(bǔ)碼補(bǔ)碼數(shù)的形式存放在片內(nèi)數(shù)的形式存放在片內(nèi)RAM30HRAM30H單元,函數(shù)單元,函數(shù)y y與與x x有如下關(guān)系式有如下關(guān)系式(此題關(guān)鍵在于識(shí)別(此題關(guān)鍵在于識(shí)別X X的模態(tài))的模態(tài))y yX,x0X,x0#20#20H,x=0H,x=0X+5,x0X+5,x0試編制程序,根據(jù)試編制程序,根據(jù)x x的的值求出值求出y y并放回原單并放回原單元元(30(30H)H)。80H=1000 0
13、000 程序代碼:程序代碼: ORG 1000HORG 1000HMOVMOVA,30HA,30HJZJZNEXTNEXTANLANLA,#80HA,#80HJZJZEDEDMOVMOVA,#05HA,#05HADDADDA,30HA,30HMOV 30H,AMOV 30H,ASJMPSJMPEDEDNEXT:NEXT: MOV 30H,#20HMOV 30H,#20HEDED: :SJMPSJMP$ $80H=1000 0000rel包含多次重復(fù)執(zhí)行的程序段,循環(huán)結(jié)構(gòu)使程序緊湊。包含多次重復(fù)執(zhí)行的程序段,循環(huán)結(jié)構(gòu)使程序緊湊。3-5-13-5-1 循環(huán)程序的構(gòu)成循環(huán)程序的構(gòu)成循環(huán)控制 ?循環(huán)工
14、作循環(huán)結(jié)束循環(huán)初始化YN各個(gè)環(huán)節(jié)任務(wù):各個(gè)環(huán)節(jié)任務(wù):一初始化部分一初始化部分循環(huán)準(zhǔn)備工作。如:循環(huán)準(zhǔn)備工作。如:清清結(jié)果單元、結(jié)果單元、設(shè)指針、設(shè)循環(huán)控制變量初值等。設(shè)指針、設(shè)循環(huán)控制變量初值等。二循環(huán)體二循環(huán)體循環(huán)工作部分循環(huán)工作部分:需多次重復(fù)處理的工作。需多次重復(fù)處理的工作。循環(huán)控制部分循環(huán)控制部分:1.1.修改指針或循環(huán)控制變量。修改指針或循環(huán)控制變量。2.2.檢測(cè)循環(huán)條件:滿足循環(huán)條件,繼續(xù)循環(huán),否則退出循環(huán)。檢測(cè)循環(huán)條件:滿足循環(huán)條件,繼續(xù)循環(huán),否則退出循環(huán)。三三. .結(jié)束部分結(jié)束部分 處理和保存循環(huán)結(jié)果。處理和保存循環(huán)結(jié)果。允許允許0 0次循環(huán)的循環(huán)結(jié)構(gòu):在循環(huán)工作之前檢測(cè)循環(huán)條
15、件。次循環(huán)的循環(huán)結(jié)構(gòu):在循環(huán)工作之前檢測(cè)循環(huán)條件。3-5-23-5-2 單重循環(huán)單重循環(huán)簡(jiǎn)單循環(huán)結(jié)構(gòu):循環(huán)體中不套循環(huán)。簡(jiǎn)單循環(huán)結(jié)構(gòu):循環(huán)體中不套循環(huán)。b例:求例:求n n個(gè)單字節(jié)數(shù)據(jù)的累加,設(shè)數(shù)據(jù)串起始單元為個(gè)單字節(jié)數(shù)據(jù)的累加,設(shè)數(shù)據(jù)串起始單元為43H43H,數(shù)據(jù),數(shù)據(jù)串長(zhǎng)度在串長(zhǎng)度在4242H H單元,累加和不超過(guò)單元,累加和不超過(guò)2 2個(gè)字節(jié)(個(gè)字節(jié)(SUMSUMH H,SUM,SUML L)。)。SUM: MOV R0,#42H SUM: MOV R0,#42H ;設(shè)指針設(shè)指針MOVMOVA,R0A,R0MOVMOVR2,AR2,A ; ;循環(huán)計(jì)數(shù)器循環(huán)計(jì)數(shù)器n nCLRCLRA A
16、; ;結(jié)果單元清結(jié)果單元清0 0MOVMOVR3,A R3,A 使高位存儲(chǔ)單元使高位存儲(chǔ)單元R3R3清零清零ADD1:INCADD1:INCR0R0 ; ;修改指針修改指針ADDADDA,R0 ;A,R0 ;累加累加JNC NEXTJNC NEXT ; ;處理進(jìn)位:無(wú)進(jìn)位則轉(zhuǎn)走處理進(jìn)位:無(wú)進(jìn)位則轉(zhuǎn)走INCINCR3R3 ; ;有進(jìn)位,高字節(jié)加有進(jìn)位,高字節(jié)加1 1NEXT:DJNZ NEXT:DJNZ R2,ADD1 ;R2,ADD1 ;循環(huán)控制:數(shù)據(jù)是否加完循環(huán)控制:數(shù)據(jù)是否加完?MOVMOV40H,A ;40H,A ;循環(huán)結(jié)束,保存結(jié)果循環(huán)結(jié)束,保存結(jié)果MOVMOV41H,R341H,R3
17、RETRET循環(huán)控制方法:計(jì)數(shù)控制、特征標(biāo)志控制。循環(huán)控制方法:計(jì)數(shù)控制、特征標(biāo)志控制。一一. .計(jì)數(shù)控制計(jì)數(shù)控制:設(shè)循環(huán)計(jì)數(shù)器控制循環(huán)次數(shù)。設(shè)循環(huán)計(jì)數(shù)器控制循環(huán)次數(shù)。正計(jì)數(shù)和倒計(jì)數(shù)兩種方式。正計(jì)數(shù)和倒計(jì)數(shù)兩種方式。正計(jì)數(shù)正計(jì)數(shù)每循環(huán)一次,循環(huán)計(jì)數(shù)器加每循環(huán)一次,循環(huán)計(jì)數(shù)器加1 1(k k)INCINC法法倒計(jì)數(shù)倒計(jì)數(shù)每循環(huán)一次,循環(huán)計(jì)數(shù)器減每循環(huán)一次,循環(huán)計(jì)數(shù)器減1 1(k k)DJNZDJNZ法法二二. .特征控制特征控制:設(shè)定循環(huán)結(jié)束標(biāo)志實(shí)現(xiàn)循環(huán)控制。:設(shè)定循環(huán)結(jié)束標(biāo)志實(shí)現(xiàn)循環(huán)控制。CJNECJNE法法例:例:找正數(shù)表最小值找正數(shù)表最小值。正數(shù)表存在。正數(shù)表存在片外片外RAMRAM中以中
18、以LISTLIST為為起始單元,用起始單元,用-1-1作為結(jié)束標(biāo)志。作為結(jié)束標(biāo)志。START: MOVSTART: MOVDPTR,#LISTDPTR,#LIST ; ;數(shù)表首地址數(shù)表首地址 MOVMOVB,#127HB,#127H ; ;預(yù)置最大值預(yù)置最大值NEXT: MOVX A,DPTRNEXT: MOVX A,DPTR ; ;取數(shù)取數(shù) INCINCDPTRDPTR ; ;修改指針修改指針 CJNE A,#-1,NEXT1; CJNE A,#-1,NEXT1; 是否為數(shù)表結(jié)尾?是否為數(shù)表結(jié)尾? SJMP DONESJMP DONE ; ;循環(huán)結(jié)束循環(huán)結(jié)束NEXT1: CJNE A,B,N
19、EXT1: CJNE A,B,NEXT2NEXT2 ; ;比較比較NEXT2NEXT2:JNC:JNCNEXT NEXT :不出現(xiàn)借位標(biāo)記說(shuō)明:不出現(xiàn)借位標(biāo)記說(shuō)明A A大于或等于大于或等于B B MOV MOVB,AB,A ; ;保存較小值保存較小值 SJMP NEXTSJMP NEXTDONE: SJMP DONEDONE: SJMP DONE習(xí)題:習(xí)題:統(tǒng)計(jì)一班考試為統(tǒng)計(jì)一班考試為100100分和不及格人數(shù),成績(jī)單在分和不及格人數(shù),成績(jī)單在4141H H起始單起始單元。元。1 1班的人數(shù)在班的人數(shù)在4040H H里里說(shuō)明此時(shí)的說(shuō)明此時(shí)的A不必保留不必保留3-5-33-5-3 多重循環(huán)多重循
20、環(huán)循環(huán)體中套循環(huán)結(jié)構(gòu)。以雙重循環(huán)使用較多。循環(huán)體中套循環(huán)結(jié)構(gòu)。以雙重循環(huán)使用較多。例:例:將內(nèi)存一串單字節(jié)無(wú)符號(hào)數(shù)升序排序。將內(nèi)存一串單字節(jié)無(wú)符號(hào)數(shù)升序排序。步驟步驟:每次取相鄰單元的兩個(gè)數(shù)比較,決定是否需要交換數(shù):每次取相鄰單元的兩個(gè)數(shù)比較,決定是否需要交換數(shù)據(jù)位置。據(jù)位置。第一次循環(huán),比較第一次循環(huán),比較N-1N-1次,取到數(shù)據(jù)表中最大值。次,取到數(shù)據(jù)表中最大值。第二次循環(huán),比較第二次循環(huán),比較N-2N-2次,取到次大值。次,取到次大值。 第第N-1N-1次循環(huán):比較一次,排序結(jié)束。次循環(huán):比較一次,排序結(jié)束。片內(nèi)RAMMAX5241TAB3內(nèi)循環(huán)控制內(nèi)循環(huán)控制 ?循環(huán)工作循環(huán)工作循環(huán)結(jié)束
21、循環(huán)結(jié)束外循環(huán)控制外循環(huán)控制 ?內(nèi)循環(huán)初始化內(nèi)循環(huán)初始化開(kāi)始開(kāi)始外循環(huán)初始化外循環(huán)初始化SORTSORT: MOV MOV A A,#N-1#N-1;N N個(gè)數(shù)據(jù)排序個(gè)數(shù)據(jù)排序 MOVMOV R4 R4,A A ;外循環(huán)次數(shù)外循環(huán)次數(shù)LOOP1LOOP1: MOV MOV A A,R4R4 MOV MOV R3 R3,A A;內(nèi)循環(huán)次數(shù)內(nèi)循環(huán)次數(shù) MOVMOV R0 R0,#TAB#TAB;設(shè)數(shù)據(jù)指針設(shè)數(shù)據(jù)指針LOOP2LOOP2: MOV MOV A A,R0R0;取二數(shù)取二數(shù) MOVMOV B B,A A INC INC R0 R0 MOV MOV A A,R0R0 CJNE A CJNE
22、 A,B B,L1L1;比較比較L1L1: JNC JNC UNEX UNEX;ABAB,不交換不交換 DECDEC R0 R0;否則交換數(shù)據(jù)否則交換數(shù)據(jù) XCHXCH A A ,R0R0 INC INC R0 R0 MOV MOV R0 R0,A AUNEXUNEX: DJNZ R3 DJNZ R3,LOOP2LOOP2;內(nèi)循環(huán)結(jié)束??jī)?nèi)循環(huán)結(jié)束? DJNZ R4DJNZ R4,LOOP1LOOP1;外循環(huán)結(jié)束?外循環(huán)結(jié)束? RETRETR3R3-1=0 ?B (R0) A ( R0 + 1 )循環(huán)結(jié)束循環(huán)結(jié)束外循環(huán)次數(shù)外循環(huán)次數(shù)R4R4R4-1=0 ?內(nèi)循環(huán)次數(shù)內(nèi)循環(huán)次數(shù)R3表首表首TABR
23、0開(kāi)始開(kāi)始A BA B?( (R0)(R0+1)R0)(R0+1)R0 R0+1R0 R0+1Y YN N軟件延時(shí)程序。軟件延時(shí)程序。用循環(huán)程序?qū)⒅噶钪貜?fù)多次執(zhí)行,實(shí)現(xiàn)軟件延時(shí)。用循環(huán)程序?qū)⒅噶钪貜?fù)多次執(zhí)行,實(shí)現(xiàn)軟件延時(shí)。試計(jì)算延時(shí)程序的執(zhí)行時(shí)間。試計(jì)算延時(shí)程序的執(zhí)行時(shí)間。源程序源程序 指令周期指令周期( (M) M) 指令執(zhí)行次數(shù)指令執(zhí)行次數(shù)DELAY:MOV R6,#64HDELAY:MOV R6,#64H1 1I1:MOV R7,#0FFHI1:MOV R7,#0FFH1 1I2:DJNZ R7,I2I2:DJNZ R7,I22 2 DJNZ R6,I1 DJNZ R6,I12 2 RE
24、T RET2 2延時(shí)時(shí)間計(jì)算:(設(shè)時(shí)鐘延時(shí)時(shí)間計(jì)算:(設(shè)時(shí)鐘f=12MHzf=12MHz)t=(1t=(11+11+1100+2100+2100100255+2255+2100+2100+21)1)M=51.3 msM=51.3 ms1 11001001001002552551001001 1子程序:能完成某項(xiàng)特定功能的獨(dú)立程序段,可被反復(fù)調(diào)用。子程序:能完成某項(xiàng)特定功能的獨(dú)立程序段,可被反復(fù)調(diào)用。3-6-1 3-6-1 子程序設(shè)計(jì)子程序設(shè)計(jì)一子程序入口用標(biāo)號(hào)作為子程序名。一子程序入口用標(biāo)號(hào)作為子程序名。二調(diào)用子程序之前設(shè)置好堆棧。二調(diào)用子程序之前設(shè)置好堆棧。三用返回指令三用返回指令RETRE
25、T結(jié)束子程序,并保結(jié)束子程序,并保 證堆棧棧頂為調(diào)用程序的返回地址。證堆棧棧頂為調(diào)用程序的返回地址。四四. .子程序嵌套須考慮堆棧容量。子程序嵌套須考慮堆棧容量。五五. .提供足夠的調(diào)用信息提供足夠的調(diào)用信息: :如:子程序名、子程序功能、入口如:子程序名、子程序功能、入口參數(shù)和出口參數(shù)、子程序占用的硬參數(shù)和出口參數(shù)、子程序占用的硬件資源、子程序中調(diào)用的其他子程件資源、子程序中調(diào)用的其他子程序名。序名。主程序 CALL S CALL S 子程序S RET 3-6-2 子程序的入口及出口參數(shù)按子程序與主程序之間傳遞參數(shù)的方式分類。按子程序與主程序之間傳遞參數(shù)的方式分類。入口參數(shù):調(diào)用子程序之前,
26、需要傳給子程序的參數(shù)或者所在單元。入口參數(shù):調(diào)用子程序之前,需要傳給子程序的參數(shù)或者所在單元。出口參數(shù):子程序送回調(diào)用程序的結(jié)果參數(shù)或者所在單元。出口參數(shù):子程序送回調(diào)用程序的結(jié)果參數(shù)或者所在單元。選用不同的參數(shù)傳遞方式。選用不同的參數(shù)傳遞方式。 1.1.寄存器傳送參數(shù)寄存器傳送參數(shù)2.2.存儲(chǔ)器傳送參數(shù)存儲(chǔ)器傳送參數(shù)3.3.堆棧傳送參數(shù)堆棧傳送參數(shù)設(shè)計(jì)子程序應(yīng)滿足通用性的要求,不針對(duì)具體數(shù)據(jù)的編程。設(shè)計(jì)子程序應(yīng)滿足通用性的要求,不針對(duì)具體數(shù)據(jù)的編程。如:如:1.1.子程序功能為求單字節(jié)數(shù)的立方值:子程序功能為求單字節(jié)數(shù)的立方值: A A A A3 3,入口參數(shù)和出口參數(shù)為入口參數(shù)和出口參數(shù)為
27、A A。 2. 2.子程序功能為求單字節(jié)數(shù)的子程序功能為求單字節(jié)數(shù)的n n次方:次方:(41(41H)(42H)H)(42H) (40H)(40H)A A,入口參數(shù)為入口參數(shù)為(40(40H)H)和和A A,出口參數(shù)為出口參數(shù)為(42(42H)(41H)H)(41H)。例:將例:將R4R5R6R4R5R6中三個(gè)字節(jié)數(shù)據(jù)對(duì)半分解,變成中三個(gè)字節(jié)數(shù)據(jù)對(duì)半分解,變成6 6個(gè)字節(jié),個(gè)字節(jié), 存入顯示緩沖區(qū)存入顯示緩沖區(qū)( (DISMEM0DISMEM0DISMEM5)DISMEM5)。1 1)子程序)子程序UFOR1UFOR1的功能:將的功能:將A A累加累加器中單字節(jié)數(shù)據(jù),對(duì)半分解成器中單字節(jié)數(shù)據(jù),
28、對(duì)半分解成兩個(gè)字節(jié),存入兩個(gè)字節(jié),存入R0R0所指向的相所指向的相鄰兩個(gè)單元鄰兩個(gè)單元UFOR1: MOV R0,#00HUFOR1: MOV R0,#00H XCHD A,R0 ; XCHD A,R0 ;保存低半字節(jié)保存低半字節(jié) INC R0INC R0 ; ;修改指針修改指針 MOV R0,#00HMOV R0,#00H SWAP A SWAP A XCHD A,R0 ; XCHD A,R0 ;保存高半字節(jié)保存高半字節(jié) RETRET2 2)調(diào)用子程序)調(diào)用子程序UFOR1UFOR1之前,將待之前,將待分解的內(nèi)容送分解的內(nèi)容送A A,存放地址送存放地址送R0R0。3 3)輸出結(jié)果放在)輸出結(jié)
29、果放在DISMEM0DISMEM05 5RAMR0+10 AH R00 ALLED 數(shù)碼管 5 4 3 2 1 0RAM顯示緩沖區(qū)地址數(shù)據(jù)DISMEM 50 R6HDISMEM 40 R6LDISMEM 30 R5HDISMEM 20 R5LDISMEM 10 R4HDISMEM 00 R4L例例 子程序:比較兩個(gè)數(shù)據(jù)串是否完全相等,若完全相等,子程序:比較兩個(gè)數(shù)據(jù)串是否完全相等,若完全相等,A=0A=0;否則否則A=FFHA=FFH。PMT: MOVPMT: MOVR2,AR2,A; ;設(shè)數(shù)串長(zhǎng)度設(shè)數(shù)串長(zhǎng)度CHC: MOVCHC: MOVA,R0A,R0; ;各取數(shù)串中的一個(gè)數(shù)各取數(shù)串中的一
30、個(gè)數(shù)MOVMOV42H,R142H,R1CJNE CJNE A,42H,NOMA,42H,NOM; ;是否相等?不相等轉(zhuǎn)移是否相等?不相等轉(zhuǎn)移INCINCR0R0; ;相等,修改指針相等,修改指針I(yè)NCINCR1R1DJNZ DJNZ R2,CHCR2,CHC; ;全部比較完?全部比較完?MOVMOVA,#0A,#0; ;完全相等完全相等SJMP SJMP PENDPENDNOM:MOV A,#0FFHNOM:MOV A,#0FFH; ;不完全相等不完全相等PEND:RETPEND:RET思考題:思考題:兩個(gè)數(shù)據(jù)串的起始地址在什么地方?(兩個(gè)數(shù)據(jù)串的起始地址在什么地方?(R0R0)例例:查表求
31、出數(shù)據(jù)的:查表求出數(shù)據(jù)的ASCIIASCII碼,再以字符形式輸出。碼,再以字符形式輸出。1 1)子程序)子程序HEXASCHEXASC功能:取出堆棧中數(shù)據(jù),查表將低功能:取出堆棧中數(shù)據(jù),查表將低半字節(jié)轉(zhuǎn)換成半字節(jié)轉(zhuǎn)換成ASCIIASCII碼送累加器碼送累加器A A。2 2)分別將待轉(zhuǎn)換數(shù)據(jù)入棧,然后調(diào)用子程序)分別將待轉(zhuǎn)換數(shù)據(jù)入棧,然后調(diào)用子程序HEXASCHEXASC。33H32H31H30HR A M4 1 H2 34 0 H0 1 MOV SP,#30HMOV SP,#30H PUSH 40H PUSH 40H ; ;入口參數(shù)入棧入口參數(shù)入棧 LCALL HEXASCLCALL HEXA
32、SC POP POP A AHEXASC:DECHEXASC:DEC SP SP ; ;跳過(guò)返回地址跳過(guò)返回地址 DECDEC SP SP POP POP A A ; ;取入口參數(shù)取入口參數(shù) ; ;查表求查表求ASCIIASCII碼碼 PUSH APUSH A ; ;保存出口參數(shù)保存出口參數(shù) INCINC SP SP ; ;指向返回地址指向返回地址 INCINC SP SP RET RET DB DB 0 0, , 1 1, , ; ;ASCIIASCII碼表碼表3-7-13-7-1 多字節(jié)加減運(yùn)算程序多字節(jié)加減運(yùn)算程序1.1.多字節(jié)加法子程序,多字節(jié)加法子程序,Z=X+YZ=X+Y。ADDS
33、: CLRADDS: CLRC CLOOP: MOVLOOP: MOVA,R0A,R0ADDC ADDC A,R1 A,R1 ; ;加一字節(jié)加一字節(jié)MOVMOVR1,A R1,A ; ;存和一字節(jié)存和一字節(jié)INCINCR0R0 ; ;修改指針修改指針I(yè)NCINCR1R1DJNZ DJNZ R2,LOOP R2,LOOP ; ;全部字節(jié)加完?全部字節(jié)加完?RETRETYHR1YLXHR0XL習(xí)題習(xí)題1 1 編寫(xiě)十進(jìn)制多字節(jié)加法子程序,編寫(xiě)十進(jìn)制多字節(jié)加法子程序,Z=X+YZ=X+Y。習(xí)題習(xí)題2 2 編寫(xiě)多字節(jié)減法子程序,編寫(xiě)多字節(jié)減法子程序,Z=X-YZ=X-Y。思考題思考題 修改程序使運(yùn)算結(jié)果保存到其他存儲(chǔ)單元。修改程序使運(yùn)算結(jié)果保存到其他存儲(chǔ)單元。3-7-23-7-2 多字節(jié)無(wú)符號(hào)數(shù)乘除運(yùn)算多字節(jié)無(wú)符號(hào)數(shù)乘除運(yùn)算相加計(jì)算多字節(jié)乘法程序,步驟:相加計(jì)算多字節(jié)乘法程序,步驟:1.1.部分積清零。部分積清零。2.2.檢測(cè)乘數(shù)各位,檢測(cè)乘數(shù)各位,為為1 1則部分積對(duì)位加被乘數(shù),否則加則部分積對(duì)位加被乘數(shù),否則加0 0。3.3.對(duì)位方法:被乘數(shù)左移或
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年陜西陜能投資管理有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年浙江海寧鵑湖科技城開(kāi)發(fā)投資有限責(zé)任公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年度店面租賃合同附贈(zèng)營(yíng)銷活動(dòng)支持服務(wù)2篇
- 江蘇省常州市2024-2025學(xué)年第一學(xué)期高三期末質(zhì)量調(diào)研語(yǔ)文試題及答案解析
- 2025年個(gè)人所得稅贍養(yǎng)老人子女贍養(yǎng)義務(wù)協(xié)議書(shū)4篇
- 2024年科普知識(shí)競(jìng)賽試題庫(kù)及答案(共50題)
- 2025版?zhèn)€人入股協(xié)議書(shū)模板及股權(quán)變更流程指南3篇
- 觀瀾湖圣安德魯斯別墅營(yíng)銷策劃報(bào)告
- 二零二五年度廚師職業(yè)資格認(rèn)證聘用合同3篇
- 2025年智慧城市建設(shè)項(xiàng)目合同范本2篇
- GB/T 16895.3-2024低壓電氣裝置第5-54部分:電氣設(shè)備的選擇和安裝接地配置和保護(hù)導(dǎo)體
- 安徽省合肥市2025年高三第一次教學(xué)質(zhì)量檢測(cè)地理試題(含答案)
- 計(jì)劃合同部部長(zhǎng)述職報(bào)告范文
- 統(tǒng)編版八年級(jí)下冊(cè)語(yǔ)文第三單元名著導(dǎo)讀《經(jīng)典常談》閱讀指導(dǎo) 學(xué)案(含練習(xí)題及答案)
- 風(fēng)光儲(chǔ)儲(chǔ)能項(xiàng)目PCS艙、電池艙吊裝方案
- 人教版高一地理必修一期末試卷
- GJB9001C質(zhì)量管理體系要求-培訓(xùn)專題培訓(xùn)課件
- 二手車車主寄售協(xié)議書(shū)范文范本
- 窗簾采購(gòu)?fù)稑?biāo)方案(技術(shù)方案)
- 基于學(xué)習(xí)任務(wù)群的小學(xué)語(yǔ)文單元整體教學(xué)設(shè)計(jì)策略的探究
- 人教版高中物理必修一同步課時(shí)作業(yè)(全冊(cè))
評(píng)論
0/150
提交評(píng)論