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

下載本文檔

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

文檔簡(jiǎn)介

1、第5章 匯編語(yǔ)言程序設(shè)計(jì)教學(xué)目的:教學(xué)目的:熟悉80C51系列單片機(jī)的匯編語(yǔ)言,能夠熟練編寫(xiě)匯編語(yǔ)言源程序。教學(xué)重點(diǎn):教學(xué)重點(diǎn):常用匯編語(yǔ)言程序設(shè)計(jì)方法。教學(xué)難點(diǎn):教學(xué)難點(diǎn): 分支程序、散轉(zhuǎn)程序與子程序的設(shè)計(jì) 5. 1 概述概述5.1.1 程序設(shè)計(jì)語(yǔ)言 1. 機(jī)器語(yǔ)言 2. 匯編語(yǔ)言3. 高級(jí)語(yǔ)言圖51 源程序、匯編程序、目的程序之間關(guān)系示意圖 5.1.2 5.1.2 匯編語(yǔ)言規(guī)范匯編語(yǔ)言規(guī)范1. 1. 匯編語(yǔ)句格式匯編語(yǔ)句格式 標(biāo)號(hào):標(biāo)號(hào):指令助記符指令助記符 操作數(shù)操作數(shù);注釋;注釋 不同仿真器提供的匯編環(huán)境對(duì)標(biāo)號(hào)有不同的要求。不同仿真器提供的匯編環(huán)境對(duì)標(biāo)號(hào)有不同的要求。一般均應(yīng)符合如下要

2、求:一般均應(yīng)符合如下要求:n指令助記符、寄存器名、偽指令記憶符等不能作標(biāo)號(hào);指令助記符、寄存器名、偽指令記憶符等不能作標(biāo)號(hào);n同一標(biāo)號(hào)在一個(gè)獨(dú)立程序中只能定義一次;同一標(biāo)號(hào)在一個(gè)獨(dú)立程序中只能定義一次;n標(biāo)號(hào)由標(biāo)號(hào)由1-81-8個(gè)個(gè)ASCIIASCII字符組成,第一個(gè)字符必須是字母。字符組成,第一個(gè)字符必須是字母。2. 80C512. 80C51匯編程序設(shè)計(jì)中常用的偽指令匯編程序設(shè)計(jì)中常用的偽指令(1 1)ORG ORG 匯編起始指令匯編起始指令 規(guī)定目標(biāo)程序的起始地址,格式如下:規(guī)定目標(biāo)程序的起始地址,格式如下: 標(biāo)號(hào)標(biāo)號(hào) 操作碼操作碼 操作數(shù)操作數(shù) ORG ORG 表達(dá)式(表達(dá)式(expe

3、xp)(2 2) EQU EQU 賦值指令賦值指令把操作數(shù)段中的地址或數(shù)據(jù)賦值給標(biāo)號(hào),格式如下:把操作數(shù)段中的地址或數(shù)據(jù)賦值給標(biāo)號(hào),格式如下: 標(biāo)號(hào)標(biāo)號(hào) 操作碼操作碼 操作數(shù)操作數(shù) 字符名稱字符名稱 EQU EQU 數(shù)或匯編符號(hào)數(shù)或匯編符號(hào) 例例1 AA 1 AA EQU R1 EQU R1 ;R1R1與與AAAA等值等值 則則 MOV AMOV A,AA AA 指令與指令與 MOV AMOV A,R1R1指令結(jié)果相同。指令結(jié)果相同。(3) DB定義字節(jié)指令 定義程序存儲(chǔ)器中存放的8位常數(shù)表,格式如下: 操作碼 操作數(shù) DB 字節(jié)常數(shù)或ASCII字符 例 ORG 1000H DB 76H,73

4、,C,B ;括號(hào) 表示ASCII字符 DB OACH (1000H)76H (1001H)49H(1002H)43H(1003H)42H(1004H)0ACH(4) DW 定義字指令 定義程序存儲(chǔ)器中存放的16位常數(shù)表格式 DW 例3 ORG 2200H DW 1246H,7BH,10 則 (2200H)12H (2201H)46H (2202H)00 (2203H)7BH (2204H)00 (2205H)0AH(5) BIT 定義位地址指令 格式 BIT 例4 ABC BIT P1.0 Q4 BIT P2.2 則匯編后,位地址P1.0,P1.2分別賦給變量ABC和Q4。(6 6) END

5、END 匯編結(jié)束指令匯編結(jié)束指令 5 52 2 順序與循環(huán)程序設(shè)計(jì)順序與循環(huán)程序設(shè)計(jì)5.2.1 順序程序設(shè)計(jì) 例1:將20H單元的兩個(gè)BCD碼拆開(kāi)并變成ASCII碼,存入21H、22H單元。注意ASCII碼09為30H39H。 解:采用先把20H中低4位BCD碼交換出來(lái)加以轉(zhuǎn)換、存放,然后再把高4位BCD碼交換至低4位加以轉(zhuǎn)換、存放。 地址 機(jī)器碼 周期數(shù) 源程序 ORG 0000H 0000H 02 02 00 3 LJMP MAIN MAIN: 200H 78 22 1 MOV R0,22H ;(R0)=22202H 76 00 1 MOV R0,0H ;(22)=0204H E5 20

6、1 MOV A,20H ;(A)=20206H D6 1 XCHD A, R0 ;A與(22)低 四位交換207H 43 22 30 2 ORL 22H,#30H 20AH C4 1 SWAP A20BH 44 30 1 ORL A,30H20DH F5 21 1 MOV 21H,A20FH 80 FE 2 SJMP $ END 5.2.2 循環(huán)程序設(shè)計(jì) 例3 已知:80C51單片機(jī)使用的晶振為6MHz,要求設(shè)計(jì)一個(gè)軟件延時(shí)程序,延時(shí)時(shí)間為10ms。 解:延時(shí)程序的延時(shí)時(shí)間主要與兩個(gè)因素有關(guān),一個(gè)是所用晶振,一個(gè)是延時(shí)程序中的循環(huán)次數(shù)。一旦晶振確定之后,則主要是如何設(shè)計(jì)與計(jì)算需給定的延時(shí)循環(huán)次

7、數(shù)。在本題中已知晶振為6MHz,則可知一個(gè)機(jī)器周期為2s,可預(yù)計(jì)采用單重循環(huán)是有可能實(shí)現(xiàn)1ms的延時(shí)的?,F(xiàn)根據(jù)題意編寫(xiě)源程序如下:周期數(shù) 1 MOV R0,0AH ;毫秒數(shù)R0 1 DL2:MOV R1,MT ;1ms延時(shí)的預(yù) 定值MTR1 1 DL1:NOP 1 NOP 2 DJNZ R1,DL1 ;lms延時(shí)循環(huán) 2 DJNZ R0,DL2 ;毫秒數(shù)減1,不等 于0,繼續(xù)循環(huán),等于0結(jié)束例4 從22H單元開(kāi)始有一個(gè)無(wú)符號(hào)數(shù)據(jù)塊,其長(zhǎng)度在20H單元。求出數(shù)據(jù)塊中最大值,并存入21H單元 ORG 200H CLR A ;清A作為初始最大值 MOV R2,20H ;數(shù)據(jù)個(gè)數(shù)初值 MOV R1,2

8、2H ;數(shù)據(jù)塊首地址初值LP:CLR C ;清進(jìn)位 SUBB A,R1 ;最大值減隊(duì)列中數(shù) JNC NEXT ;小于最大值繼續(xù) MOV A, R1 ;大于最大值,則用此值代換 SJMP NEXT1NEXT:ADD A,R1 ;小于最大值,則恢復(fù)NEXT1:INC R1 ;修改地址指針 DJNZ R2,LP ;依次重復(fù)比較,直至R20 MOV 21H ,A ;最大值存入21H單元5 53 3 分支程序設(shè)計(jì)分支程序設(shè)計(jì)5.3.1 分支程序設(shè)計(jì)綜述分支程序應(yīng)用要點(diǎn)是正確使用轉(zhuǎn)移指令,通常有如下3種指令。 1. 無(wú)條件轉(zhuǎn)移 2. 條件轉(zhuǎn)移 3. 散轉(zhuǎn) 例3 設(shè)5AH單元中有一變量X,請(qǐng)編寫(xiě)計(jì)算下述函數(shù)

9、式的程序,結(jié)果存入5BH單元Y= 3X , X 10Y= 2X +10 , 10= X 155.3.2 5.3.2 無(wú)條件無(wú)條件/ /條件轉(zhuǎn)移程序條件轉(zhuǎn)移程序 ORG 200H MOV A,5AH ADD A,5AH ;2XA MOV R1,A MOV A,5AH ;重新把X裝入A CJNE A,#10,L1 ;與10比較,不同轉(zhuǎn)L1L1:JC L2 ;X15 CJNE A,#10H,L3 ;與16比L3:JNC L4 ;X15轉(zhuǎn)L4 MOV A,R1 ;2X送入A ADD A,#10 ;10X15,Y2X10 MOV R0,A SJMP L4L2: MOV A,R1 ADD A,5AH ;X

10、10,Y=3X MOV R0,AL4 : MOV 5BH,R0 ;存結(jié)果 SJMP $ END5.3.3 散轉(zhuǎn)程序設(shè)計(jì) 例2 根據(jù)R3的內(nèi)容,轉(zhuǎn)向各個(gè)操作程序。 R30, 轉(zhuǎn)入OPR0 R31, 轉(zhuǎn)入OPR1. R3n, 轉(zhuǎn)入OPRn 解:程序清單如下。 MOV DPTR,TAB1 ;跳轉(zhuǎn)表首地址送數(shù)據(jù)指針 MOV A,R3 ;R32 A(修正變址值) ADD A,R3 JNC NOAD ;判有否進(jìn)位 INC DPH ;有進(jìn)位則加到高字節(jié)地址NOAD: JMP ADPTR ;轉(zhuǎn)向形成的散轉(zhuǎn)地址入口TAB1: AJMP OPR0 ;轉(zhuǎn)移到OPR0 AJMP OPR1. AJMP OPRn5 54

11、 4 查表程序設(shè)計(jì)查表程序設(shè)計(jì)5.4.1 查表程序綜述 為了實(shí)現(xiàn)查表功能,在80C51匯編語(yǔ)言中專門(mén)設(shè)置了兩條查表指令:MOVC A,A+DPTRMOVC A,A+PC 這2條指令特點(diǎn)不同,在應(yīng)用時(shí)要注意區(qū)別。為了便于查表,要求表中的數(shù)或符號(hào)按照便于查找的次序排列,并將它存放在從指定的首地址(或稱基地址)開(kāi)始的存儲(chǔ)單元。 例1 設(shè)計(jì)一個(gè)將16進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼的子程序,設(shè)16進(jìn)制數(shù)存放在R0的低4位,要求將轉(zhuǎn)換后的ASCII碼送回R0。ORG 30HMOV A,R0ANL A,0FH ; 保留低4位ADD A,2 ;變址調(diào)整MOVC A,APC;查表獲取ASCII碼值MOV R0,ARE

12、TTAB:DB 30H,31H,32H,33H,34H,35HDB 36H,37H,38H,39H,41H,42H,43H,44H,45H,46H 55 子程序設(shè)計(jì) 5.5.1 5.5.1 子程序結(jié)構(gòu)與設(shè)計(jì)注意事項(xiàng)子程序結(jié)構(gòu)與設(shè)計(jì)注意事項(xiàng) 一種能完成某一特定任務(wù)的程序段一種能完成某一特定任務(wù)的程序段。其資源要為所有調(diào)用程序共。其資源要為所有調(diào)用程序共享。因此,子程序在結(jié)構(gòu)上應(yīng)具有獨(dú)立性和通用性,享。因此,子程序在結(jié)構(gòu)上應(yīng)具有獨(dú)立性和通用性,在編寫(xiě)子程在編寫(xiě)子程序時(shí)應(yīng)注意以下問(wèn)題:序時(shí)應(yīng)注意以下問(wèn)題: 1 1子程序的第一條指令的地址稱為子程序的入口地址。該指令前子程序的第一條指令的地址稱為子程序

13、的入口地址。該指令前必必須有標(biāo)號(hào)須有標(biāo)號(hào)。 2 2主程序調(diào)用子程序兩條子程序調(diào)用指令:主程序調(diào)用子程序兩條子程序調(diào)用指令: (1 1)絕對(duì)調(diào)用指令:)絕對(duì)調(diào)用指令:ACALL addr11ACALL addr11 (2 2)長(zhǎng)調(diào)用指令:)長(zhǎng)調(diào)用指令:LCALL addr16LCALL addr163 3注意設(shè)置堆棧指針和現(xiàn)場(chǎng)保護(hù)注意設(shè)置堆棧指針和現(xiàn)場(chǎng)保護(hù)4 4最后一條指令必須是最后一條指令必須是RETRET指令指令5 5子程序可以嵌套,即子程序可以調(diào)用子程序子程序可以嵌套,即子程序可以調(diào)用子程序6 6在子程序調(diào)用時(shí),還要注意參數(shù)傳遞的問(wèn)題在子程序調(diào)用時(shí),還要注意參數(shù)傳遞的問(wèn)題 二、二、 子程序

14、的基本結(jié)構(gòu)子程序的基本結(jié)構(gòu) MAINMAIN: ;MAINMAIN為主程序或調(diào)用程序標(biāo)號(hào)為主程序或調(diào)用程序標(biāo)號(hào) LCALL SUB LCALL SUB ;調(diào)用子程序;調(diào)用子程序SUBSUB SUBSUB:PUSH PSWPUSH PSW;現(xiàn)場(chǎng)保護(hù);現(xiàn)場(chǎng)保護(hù) PUSH ACCPUSH ACC; 子程序處理程序段子程序處理程序段 POP ACCPOP ACC;現(xiàn)場(chǎng)恢復(fù);現(xiàn)場(chǎng)恢復(fù) POP PSWPOP PSW; RETRET;最后一條指令必須為;最后一條指令必須為RETRET 5.5.2 子程序設(shè)計(jì) 例1 用程序?qū)崿F(xiàn)c a2b2。設(shè)a、b均小于10。a存在31H單元中,b存在32H單元,把c存入33

15、H單元。 解:因本題二次用到平方值,所以在程序中采用把求平方的程序段編為子程序的方法。依題意編寫(xiě)主程序和子程序如下: 地址 機(jī)器碼 源程序 ORG 200H 200 75 81 3F MOV SP,3FH ;設(shè)堆棧指針 203 E5 31 MOV A,31H ;取a值 205 12 04 00 LCALL SQR ;求a2 208 F9 MOV R1,A ;a2值暫存R1 209 E5 32 MOV A,32H ;取b值 20B 12 04 00 LCALL SQR ;求b2 20E 29 ADD A,R1 ;求a2b2 20F F5 33 MOV 33H,A ;存入33H ; 子程序子程序

16、地址地址 機(jī)器碼機(jī)器碼 源程序源程序 ORG 400H 400 04 SQR: INC A 401 83 MOVC A,APC 402 22 RET 403 1 4 9 16 TAB: DB 0403 1 4 9 16 TAB: DB 0,1 1, 4 4, 9 9,16 16 408 25 36 49 DB 25408 25 36 49 DB 25,3636,494940B 64,81 DB 6440B 64,81 DB 64,81815.6 5.6 綜合編程舉例綜合編程舉例 例1 將R0所指出單元中的ASCII碼轉(zhuǎn)換成十六進(jìn)制數(shù),并把結(jié)果仍存于原單元中。 解:對(duì)于小于、等于 9的數(shù),ASCII代碼減去30H得一位十六進(jìn)制數(shù),對(duì)于大于9的ASCII代碼減去37H,則恰好是“0AH0FH”的結(jié)果。 編程如下: HEX: MOV A,R0 ;取操作數(shù) CLR C SUBB A,#30H ;09的轉(zhuǎn)換 MOV R0,A ;暫存結(jié)果 SUBB A,#0AH ;結(jié)果是否大于9 JC SB2 ;小于、等于9,則返回 XCH A,R0 SUBB A,#07H ;大于9,則減37H MOV R0,A ;存結(jié)果 SB2: RET 例2

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論