單片機(jī)基礎(chǔ)及應(yīng)用C單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)PPT課件_第1頁(yè)
單片機(jī)基礎(chǔ)及應(yīng)用C單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)PPT課件_第2頁(yè)
單片機(jī)基礎(chǔ)及應(yīng)用C單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)PPT課件_第3頁(yè)
單片機(jī)基礎(chǔ)及應(yīng)用C單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)PPT課件_第4頁(yè)
單片機(jī)基礎(chǔ)及應(yīng)用C單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)PPT課件_第5頁(yè)
已閱讀5頁(yè),還剩41頁(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、2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 5.1 5.1 單片機(jī)程序設(shè)計(jì)語(yǔ)言概述單片機(jī)程序設(shè)計(jì)語(yǔ)言概述第第5 5章章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 第1頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 單片機(jī)常用的三種程序設(shè)計(jì)語(yǔ)言單片機(jī)常用的三種程序設(shè)計(jì)語(yǔ)言 機(jī)器語(yǔ)言 指直接用機(jī)器碼編寫程序、能夠被計(jì)算機(jī)直接執(zhí)行的語(yǔ)言。 匯編語(yǔ)言 指用指令助記符代替機(jī)器碼的編程語(yǔ)言 高級(jí)語(yǔ)言 廣泛應(yīng)用的高級(jí)語(yǔ)言是C語(yǔ)言,每當(dāng)有新型單片機(jī)推出時(shí),都有相配套的C編譯器加以支持。高級(jí)語(yǔ)言編寫程序的缺點(diǎn)是實(shí)時(shí)性不高,結(jié)構(gòu)不緊湊,編譯后占用存儲(chǔ)空間比較大,這一點(diǎn)在存儲(chǔ)器有限的單片機(jī)應(yīng)用系統(tǒng)中沒(méi)有

2、優(yōu)勢(shì)。第2頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 匯編語(yǔ)言語(yǔ)句的種類和格式匯編語(yǔ)言語(yǔ)句的種類和格式1. 指令種類(1)指令語(yǔ)句 每一條指令語(yǔ)句在匯編時(shí)都產(chǎn)生一個(gè)指令代碼機(jī)器碼。(2)偽指令語(yǔ)句 偽指令語(yǔ)句是為匯編服務(wù)的。在匯編時(shí)沒(méi)有機(jī)器代碼與之對(duì)應(yīng)。偽指令語(yǔ)句是控制匯編程序如何完成匯編工作的指示,包括控制匯編程序的輸入/輸出,定義數(shù)據(jù)和符號(hào),條件匯編,分配存儲(chǔ)空間等。這些指示信息就是偽指令。第3頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 偽指令 是 對(duì)匯編過(guò)程 起控制作用,但本身并沒(méi)有對(duì)應(yīng)的機(jī)器代碼的指令。(1 1)匯編起始指令)匯編起始指令 ORGORG 指令

3、格式為: ORG nn 該指令的作用是指明后面的程序或數(shù)據(jù)塊的起始地址, 它總是出現(xiàn)在每段源程序或數(shù)據(jù)塊的開始。 式中, nn為 16 位地址, 匯編時(shí)nn確定了此語(yǔ)句后面第一條指令或第一個(gè)數(shù)據(jù)的地址,此后的源程序或數(shù)據(jù)塊就依次連續(xù)存放在以后的地址內(nèi), 直到遇到另一個(gè)ORG指令為止。 2.偽指令偽指令 第4頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 例: ORG 2000H MOV SP, 60H MOV R0, 2FH MOV R2, 0FFH ORG偽指令說(shuō)明其后面程序的目標(biāo)代碼在存儲(chǔ)器中存放的起始地址是2000H, 即 存儲(chǔ)器地址 目標(biāo)程序 2000H 75 81 60 2

4、003H 78 2F 2005H 7A FF 第5頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 (2 2)等值指令)等值指令EQUEQU 指令格式: 字符名稱 EQU 數(shù)字或匯編符號(hào) 例: PA8155 EQU 8001H ;即給標(biāo)號(hào)PA8155賦值為8001H 使指令中的字符名稱等價(jià)于給定的數(shù)字或匯編符號(hào)。 如果在程序中要多次使用到某一地址,由EQU指令將其賦值給一個(gè)字符名稱, 一旦需要對(duì)其進(jìn)行變動(dòng), 只要改變EQU命令后面的數(shù)字即可。 注意:由 EQU等值的字符名稱必須先賦值后使用, 且在同一個(gè)源程序中, 同一個(gè)標(biāo)號(hào)只能賦值一次。第6頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言

5、程序設(shè)計(jì)簡(jiǎn)介 (3 3)定義字節(jié)指令)定義字節(jié)指令DBDB 指令格式: 標(biāo)號(hào): DB 8位二進(jìn)制數(shù)表 功能: 把 8 位二進(jìn)制數(shù)表依次存入從標(biāo)號(hào)開始的連續(xù)的存儲(chǔ)單元中。 標(biāo)號(hào)區(qū)段可有可無(wú),DB指令之后的 8 位二進(jìn)制數(shù)表是字節(jié)常數(shù)或用逗號(hào)隔開的字節(jié)串,也可以是用引號(hào)括起來(lái)的ASCII碼字符串 (一個(gè) ASCII字符相當(dāng)于一個(gè)字節(jié))。第7頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 例:ORG 1000H BUF1: DB 38H, 7FH, 80H BUF2: DB 45H, 66H ORG偽指令指定了標(biāo)號(hào)BUF1的地址為1000H, 而DB偽指令是將其后的二進(jìn)制數(shù)表38H, 7F

6、H, 80H依次存放在1000H, 1001H, 1002H 3 個(gè)連續(xù)單元之中, BUF2也是一個(gè)標(biāo)號(hào), 其地址與前一條偽指令連續(xù), 即1003H, 1004H地址單元中依次存放 45H, 66H。 第8頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 (4 4)定義字指令)定義字指令DWDW 指令格式: 標(biāo)號(hào): DW 16 位數(shù)據(jù)表 該指令的功能與DB相似, 區(qū)別僅在于從指定地址開始存放的是指令中的 16 位數(shù)據(jù), 而不是字節(jié)串。每個(gè) 16 位數(shù)據(jù)要占兩個(gè)存儲(chǔ)單元, 高8 位先存, 低 8 位后存, 這和MCS -51指令中的16位數(shù)據(jù)存放順序是一致的。 第9頁(yè)/共46頁(yè)2022-

7、2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 DW 定義字命令 ORG 1500HTABLE:DW 7234H,8AH,10H 經(jīng)匯編后(1500H)=72H, (1501H)=34H, (1502H)=00H, (1503H)=8AH, (1504H)=00H, (1505H)=10H,第10頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 DS 定義存儲(chǔ)空間命令q格式:DS 表達(dá)式q功能:在匯編時(shí),從指定地址開始保留DS之后表達(dá)式的值所規(guī)定的存儲(chǔ)單元以備后用。q例如:ORG 1000H DS 08H DB 30H,8AH匯編后,從1000H保留8個(gè)單元,然后從1008H按DB命令給內(nèi)存賦值,

8、即(1008H)=30H (1009H)=8AH第11頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 BIT 位地址符號(hào)命令 格式:字符名 BIT 位地址 功能:把BIT后的位地址值賦給字符名。其中字符名不是標(biāo)號(hào),其后沒(méi)有冒號(hào),但字符名是必須的。例如:A1 BIT P1.0 A2 BIT 02H 匯編后,P1口第0位的位地址90H就賦給了A1,而A2的值則為02H。第12頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 例:分析下段程序,試求2008H200FH單元的內(nèi)容ORG 2000HDS 08HDB 30H ,8AH ,10 , BDW 54H ,1F80H (2008

9、H)=30H (2009H)=8AH (200AH)=0AH (200BH)=42H(200CH)=00H (200DH)=54H(200EH)=1FH (200FH)=80H第13頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 (5 5)匯編結(jié)束指令)匯編結(jié)束指令ENDEND 指令格式: 標(biāo)號(hào): END 地址或標(biāo)號(hào) 格式中標(biāo)號(hào)以及END后面的地址或標(biāo)號(hào)可有可無(wú)。 功能: 提供匯編結(jié)束標(biāo)志。匯編程序遇到 END后就停止匯編, 對(duì) END以后的語(yǔ)句不予處理, 故 END應(yīng)放在程序的結(jié)束處。 第14頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 5.2 5.2 匯編語(yǔ)言基本結(jié)構(gòu)

10、匯編語(yǔ)言基本結(jié)構(gòu)第第5 5章章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 第15頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 順序程序設(shè)計(jì)順序程序設(shè)計(jì) 例 1 兩個(gè)無(wú)符號(hào)雙字節(jié)數(shù)相加。 設(shè)被加數(shù)存放于內(nèi)部RAM的40H(高位字節(jié)), 41H(低位字節(jié)), 加數(shù)存放于50H(高位字節(jié)), 51H(低位字節(jié)), 和數(shù)存入 40H和41H單元中。 第16頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 程序如下: START: CLR C ; 將Cy清零 MOV R0, 41H ; 將被加數(shù)地址送數(shù)據(jù)指針R0 MOV R1, 51H ; 將加數(shù)地址送數(shù)據(jù)指針R1 AD1: MOV

11、 A, R0 ; 被加數(shù)低字節(jié)的內(nèi)容送入AADD A,R1 ; 兩個(gè)低字節(jié)相加MOV R0, A ; 低字節(jié)的和存入被加數(shù)低字節(jié)中 DEC R0 ; 指向被加數(shù)高位字節(jié) DEC R1 ; 指向加數(shù)高位字節(jié) MOV A, R0 ; 被加數(shù)高位字節(jié)送入AADDC A, R1 ; 兩個(gè)高位字節(jié)帶Cy相加 MOV R0, A ; 高位字節(jié)的和送被加數(shù)高位字節(jié) RET 第17頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 例2 三字節(jié)無(wú)符號(hào)數(shù)相加,被加數(shù)在內(nèi)部RAM的50H,51H,52H單元中,加數(shù)在內(nèi)部RAM的53H ,54H ,55H單元中,和存放在50H,51H 和52H單元中,進(jìn)位存

12、放在位尋址區(qū)的00H位中。 MOV R0,#52HMOV R1,#55HMOV A,R0ADD A,R1MOV R0,ADEC R0DEC R1MOV A,R0ADDC A,R1MOV R0,ADEC R0DEC R1MOV A,R0ADDC A,R1MOV R0,ACLR AADDC A,#00HMOV R0,#00HMOV R0,A第18頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 例例 3 將兩個(gè)半字節(jié)數(shù)合并成一個(gè)一字節(jié)數(shù)。將兩個(gè)半字節(jié)數(shù)合并成一個(gè)一字節(jié)數(shù)。 設(shè)內(nèi)部設(shè)內(nèi)部RAM 40H#, 41H單元中分別存放著單元中分別存放著 8 位二進(jìn)制數(shù)位二進(jìn)制數(shù), 要求取出兩個(gè)單元中

13、的低半字節(jié)要求取出兩個(gè)單元中的低半字節(jié), 并成并成一個(gè)字節(jié)后一個(gè)字節(jié)后, 存入存入 50H單元中。單元中。 程序如下程序如下: START: MOV R1, 40H ; 設(shè)置R1為數(shù)據(jù)指針 MOV A, R1 ; 取出第一個(gè)單元中的內(nèi)容 ANL A, 0FH ; 取第一個(gè)數(shù)的低半字節(jié) SWAP A ; 移至高半字節(jié) INC R1 ; 修改數(shù)據(jù)指針 XCH A, R1 ; 取第二個(gè)單元中的內(nèi)容 ANL A, 0FH ; 取第二個(gè)數(shù)的低半字節(jié) ORL A, R1 ; 拼字 MOV 50H, A ; 存放結(jié)果 RET 第19頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 分支程序設(shè)計(jì)分支程

14、序設(shè)計(jì) (a) 單分支流程; (b) 多分支流程 第20頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 例例 3 x, y均為均為8位二進(jìn)制數(shù)位二進(jìn)制數(shù), 設(shè)設(shè) x存入存入R0, y存入存入R1, 求解求解: MOV A, R0 JZ loop1 ;(A)=0時(shí)轉(zhuǎn)移 JB ACC.7 , loop2 ;ACC.7=1轉(zhuǎn)移 MOV R1, #1 loop1 : MOV R1 , #0 SJMP ENDFloop2 : MOV R1 , #0FFHENDF : RET 第21頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 例 4 比較兩個(gè)無(wú)符號(hào)數(shù)的大小。 設(shè)外部 RAM 的存儲(chǔ)

15、單元 ST1和ST2中存放兩個(gè)不帶符號(hào)的二進(jìn)制數(shù), 找出其中的大數(shù)存入外部 RAM 中的 ST3單元中。 第22頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 程序如下: ORG 1000H ST1 EQU 2000H ST2 EQU 2100H ST3 EQU 2200H START: CLR C ; 清零Cy MOV DPTR, ST1 ; 第一個(gè)數(shù)的指針 MOVX A, DPTR ; 取第一個(gè)數(shù) MOV R2, A ; 保存 MOV DPTR, ST2 ; 第二個(gè)數(shù)的指針 MOVX A, DPTR ; 取第二個(gè)數(shù) CLR C 第23頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程

16、序設(shè)計(jì)簡(jiǎn)介 SUBB A, R2 ; 兩數(shù)比較JNC BIG2 ; 若Cy=0,轉(zhuǎn)移 ;即無(wú)借位,(A)(R2),第2個(gè)數(shù)大XCH A, R2 ; 第一個(gè)數(shù)大BIG1: MOV DPTR, ST3 MOVX DPTR, A ; 存大數(shù)RETBIG2: MOVX A, DPTR ; 第二個(gè)數(shù)大SJMP BIG1RET 第24頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 散轉(zhuǎn)程序設(shè)計(jì) 散轉(zhuǎn)程序是分支程序的一種, 它可根據(jù)運(yùn)算結(jié)果或輸入數(shù)據(jù)將程序轉(zhuǎn)入不同的分支。MCS - 51 指令系統(tǒng)中有一條跳轉(zhuǎn)指令JMPA+DPTR, 用它可以很容易地實(shí)現(xiàn)散轉(zhuǎn)功能。該指令把累加器的 8 位無(wú)符號(hào)數(shù)與

17、 16 位數(shù)據(jù)指針的內(nèi)容相加, 并把相加的結(jié)果裝入程序計(jì)數(shù)器PC, 控制程序轉(zhuǎn)向目標(biāo)地址去執(zhí)行。此指令的特點(diǎn)在于, 轉(zhuǎn)移的目標(biāo)地址不是在編程或匯編時(shí)預(yù)先確定的, 而是在程序運(yùn)行過(guò)程中動(dòng)態(tài)地確定的。目標(biāo)地址是以數(shù)據(jù)指針 DPTR的內(nèi)容為起始的 256 字節(jié)范圍內(nèi)的指定地址, 即由 DPTR的內(nèi)容決定分支轉(zhuǎn)移程序的首地址, 由累加器 A的內(nèi)容來(lái)動(dòng)態(tài)選擇其中的某一個(gè)分支轉(zhuǎn)移程序。 第25頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 例 5 根據(jù)工作寄存器R0 內(nèi)容的不同, 使程序轉(zhuǎn)入相應(yīng)的分支。 (R0)=0 對(duì)應(yīng)的分支程序標(biāo)號(hào)為PR0; (R0)=1 對(duì)應(yīng)的分支程序標(biāo)號(hào)為PR1; (R

18、0)=N 對(duì)應(yīng)的分支程序標(biāo)號(hào)為PRN。 第26頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 程序如下: LP0: MOV DPTR, TAB ; 取表頭地址 MOV A, R0 ADD A, R0 ; R0內(nèi)容乘以2 JNC LP1 ; 無(wú)進(jìn)位轉(zhuǎn)移 INC DPH ; 加進(jìn)位位LP1: JMP A+DPTR; 跳至散轉(zhuǎn)表中相應(yīng)位置 TAB: AJMP PR0 AJMP PR1 AJMP PRN 第27頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 練習(xí) 把內(nèi)部RAM起始地址為data的數(shù)據(jù)串傳送到外部RAM以LOOP為首地址的區(qū)域,直到發(fā)現(xiàn)“”字符的ASC碼為止,同時(shí)規(guī)定

19、數(shù)據(jù)串的最大長(zhǎng)度為32個(gè)字節(jié)。第28頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 循環(huán)程序設(shè)計(jì)循環(huán)程序設(shè)計(jì) 一、 循環(huán)程序 第29頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 循環(huán)程序一般由四個(gè)主要部分組成: (1) 初始化部分: 為循環(huán)程序做準(zhǔn)備, 如規(guī)定循環(huán)次數(shù)、 給各變量和地址指針預(yù)置初值。 (2) 處理部分: 為反復(fù)執(zhí)行的程序段, 是循環(huán)程序的實(shí)體, 也是循環(huán)程序的主體。 (3) 循環(huán)控制部分: 這部分的作用是修改循環(huán)變量和控制變量, 并判斷循環(huán)是否結(jié)束, 直到符合結(jié)束條件時(shí), 跳出循環(huán)為止。 (4) 結(jié)束部分: 這部分主要是對(duì)循環(huán)程序的結(jié)果進(jìn)行分析、 處理和存

20、放。 第30頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 例 5 工作單元清零。 在應(yīng)用系統(tǒng)程序設(shè)計(jì)時(shí), 有時(shí)經(jīng)常需要將存儲(chǔ)器中各部分地址單元作為工作單元, 存放程序執(zhí)行的中間值或執(zhí)行結(jié)果, 工作單元清零工作常常放在程序的初始化部分中。 設(shè)有50個(gè)工作單元, 其首址為外部存儲(chǔ)器8000H單元, 則其工作單元清零程序如下: 第31頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 CLEAR: CLR A MOV DPTR, 8000H ; 工作單元首址送指針 MOV R2, 50 ; 置循環(huán)次數(shù)CLEAR1: MOVX DPTR, A INC DPTR ; 修改指針 DJNZ

21、 R2, CLEAR1; 控制循環(huán) RET 第32頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 例 6 設(shè)在內(nèi)部 RAM的 m 單元開始處有長(zhǎng)度為 n 個(gè)的無(wú)符號(hào)數(shù)據(jù)塊, 試編一個(gè)求和程序, 并將和存入內(nèi)部 RAM的 S 單元(設(shè)和不超過(guò) 8 位)。 m EQU 20H n EQU 30H S EQU 40HSTART: CLR A ; 清累加器A MOV R2, n ; 數(shù)據(jù)塊長(zhǎng)度送R2 MOV R1, m ; 數(shù)據(jù)塊首址送R1 LOOP: ADD A, R1 ; 循環(huán)加法 INC R1; 修改地址指針 DJNZ R2, LOOP ; 修改計(jì)數(shù)器并判斷 MOV S , A; 存和

22、 RET 第33頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 多重循環(huán) 例 7 10 秒延時(shí)程序。 延時(shí)程序與 MCS - 51 執(zhí)行指令的時(shí)間有關(guān), 如果使用 6 MHz晶振, 一個(gè)機(jī)器周期為 2 s, 計(jì)算出一條指令以至一個(gè)循環(huán)所需要的執(zhí)行時(shí)間, 給出相應(yīng)的循環(huán)次數(shù), 便能達(dá)到延時(shí)的目的。10 秒延時(shí)程序如下: MOV R5, 100 D0: MOV R6, 200 D1: MOV R7, 248 D2: DJNZ R7, D2 DJNZ R6, D1 DJNZ R5, D0 RET 第34頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 上例程序中采用了多重循環(huán)程序,

23、 即在一個(gè)循環(huán)體中又包含了其它的循環(huán)程序, 這種方式是實(shí)現(xiàn)延時(shí)程序的常用方法。 使用多重循環(huán)時(shí), 必須注意: (1) 循環(huán)嵌套, 必須層次分明, 不允許產(chǎn)生內(nèi)外層循環(huán)交叉。 (2) 外循環(huán)可以一層層向內(nèi)循環(huán)進(jìn)入, 結(jié)束時(shí)由里往外一層層退出。 (3) 內(nèi)循環(huán)可以直接轉(zhuǎn)入外循環(huán), 實(shí)現(xiàn)一個(gè)循環(huán)由多個(gè)條件控制的循環(huán)結(jié)構(gòu)方式。 第35頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 例8 在內(nèi)部 RAM中從 50H單元開始的連續(xù)單元依次存放了一串字符, 該字符串以回車符為結(jié)束標(biāo)志, 要求測(cè)試該字符串的長(zhǎng)度。 程序如下: START: MOV R2, 0FFH MOV R0, 4FH ; 數(shù)據(jù)指

24、針R0置初值 LOOP: INC R0 INC R2 CJNE R0, 0DH, LOOP RET 第36頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 子程序和參數(shù)傳遞子程序和參數(shù)傳遞 一、 子程序的概念 通常把這些基本操作功能編制為程序段作為獨(dú)立的子程序, 以供不同程序或同一程序反復(fù)調(diào)用。在程序中需要執(zhí)行這種操作的地方放置一條調(diào)用指令, 當(dāng)程序執(zhí)行到調(diào)用指令, 就轉(zhuǎn)到子程序中完成規(guī)定的操作, 并返回到原來(lái)的程序繼 續(xù)執(zhí)行下去。 第37頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 二、 子程序的調(diào)用 調(diào)用子程序的指令有“ACALL”和“LCALL”, 執(zhí)行調(diào)用指令時(shí),

25、先將程序地址指針PC改變(“ACALL”加 2, “LCALL”加 3), 然后 PC值壓入堆棧, 用新的地址值代替。執(zhí)行返回指令時(shí), 再將 PC值彈出。 子程序調(diào)用中, 主程序應(yīng)先把有關(guān)的參數(shù)存入約定的位置, 子程序在執(zhí)行時(shí), 可以從約定的位置取得參數(shù), 當(dāng)子程序執(zhí)行完, 將得到的結(jié)果再存入約定的位置, 返回主程序后, 主程序可以從這些約定的位置上取得需要的結(jié)果, 這就是參數(shù)的傳遞。 第38頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 例 9 在外部 RAM中, BLOCK開始的單元中有一無(wú)符號(hào)數(shù)據(jù)塊, 其個(gè)數(shù)為 LEN個(gè)字節(jié)。試將這些無(wú)符號(hào)數(shù)按遞減次序重新排列, 并存入原存儲(chǔ)區(qū)

26、。 ORG 1000H START: MOV DPTR, BLOCK; 置地址指針 MOV P2, DPH ; P2作地址指針高字節(jié) MOV R7, LEN ; 置外循環(huán)計(jì)數(shù)初值 DEC R7 ; 比較與交換 n-1次 第39頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 LOOP0: CLR F0 ; 交換標(biāo)志清 0 MOV R0, DPL; MOV R1, DPL ; 置相鄰兩數(shù)地址指針低字節(jié) INC R1 MOV R6, R7 ; 置內(nèi)循環(huán)計(jì)數(shù)器初值 LOOP1: MOVX A, R0 ; 取數(shù) MOV B, A ; 暫存 MOVX A, R1 ; 取下一個(gè)數(shù) CJNE A,

27、B, NEXT; 相鄰兩數(shù)比較, 不等轉(zhuǎn) SJMP NOCHA ; 相等不交換 第40頁(yè)/共46頁(yè)2022-2-7第5章 匯編語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介 NEXT: JC NOCHA; Cy =1, 則前者大于后者, 不必交換 SETB F0 ; 否則, 置交換標(biāo)志 MOVX R0, A ; XCH A, B ; 兩數(shù)交換, 大者在前, 小者在后 MOVX R1, A ; NOCHA: INC R0 INC R1; 修改指針 DJNZ R6, LOOP1 ; 內(nèi)循環(huán)未完, 則繼續(xù) JNB F0, EXIT ; 若從未交換, 則結(jié)束 DJNZ R7, LOOP0; 外循環(huán)未完, 則繼續(xù) EXIT: RET 第41頁(yè)/共46頁(yè)2022-2-7

溫馨提示

  • 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)論