MCS-51匯編語言程序設(shè)計._第1頁
MCS-51匯編語言程序設(shè)計._第2頁
免費預(yù)覽已結(jié)束,剩余32頁可下載查看

下載本文檔

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

文檔簡介

1、第“章匯徭得言程;I殺針荷介匯編語言程序設(shè)計簡介4 1匯編語言概述4 2匯編語言程序設(shè)計4 3匯編稈序設(shè)計實例愛纟主壬加豈彗t逆仕企 4.1匯編語言概述4.1.1 程序設(shè)計語言的分類及特點能夠完成一定功能的指令序列稱為程序,用來設(shè)計計算 機程序的語言稱為程序設(shè)計語言,按照語言的結(jié)構(gòu)及功能程 序設(shè)計語言可分為:機器語言、匯編語言和高級語言。第“章匯編得言程淳殺針簡介1.機器語言是計算機所能識別的唯一語言,由二進制代碼 0 和 1 構(gòu)成 指令和數(shù)據(jù)。其具有效率高、響應(yīng)速度快的特點,但由于機器語言編 寫的程序依賴于計算機的結(jié)構(gòu),可移植性差,繁瑣且難于記 憶、識別和調(diào)試,通常編程時,不釆用機器語言。第

2、“章匯編得言程淳殺針簡介2.匯編語言是一種符號語言,指令由助記符表示。與機器語言相比,匯編語言具有指令容易記憶、理解、 識別和可讀性好的優(yōu)點,但實質(zhì)上由于匯編語言也是面向 機器的語言,是機器語言程序的符號表示,所以用戶必須 熟悉機器的硬件結(jié)構(gòu)和指令系統(tǒng),掌握計算機的工作過程 才能熟練編程。另外,匯編語言所編寫的源程序與經(jīng)過匯編所產(chǎn)生的 機器代碼程序之間有明顯的一一對應(yīng)關(guān)系,所以匯編語言 編寫的程序同樣也存在通用性差,程序不能移植的缺點。愛纟主 壬魚覽X彗t逆仕JL3. 高級語言高級語言是接近于人的自然語言形式的計算機編程語 言的總稱,例如 C 語言、BASIC 語言等都是高級語言。和匯編語言相

3、比,高級語言指令簡單易學(xué),用戶容易 掌握,且高級語言程序不依賴于具體的硬件結(jié)構(gòu)和指令系 統(tǒng),程序可移植性好,但是高級語言編寫的源程序必須經(jīng) 過編譯或解釋程序翻譯成目標(biāo)程序,機器才能執(zhí)行,而生 成的目標(biāo)程序需占用較多的存儲單元,執(zhí)行時間較長,運 行效率較低。第“章匯編語言程馮筱針簡介4.1.2 單片機匯編語言源程序的編輯和匯編1 匯編語言的指令類型匯編語言源程序由兩種類型的匯編語言語句(即指令) 構(gòu)成。語句按性質(zhì)不同分為兩類:指令性語句(機器指令) 和指示性語句(偽指令)。(1)機器指令指令系統(tǒng)中的全部指令,每條指令都有對應(yīng)的機器代碼, 是機器真正能夠執(zhí)行的指令。(2)偽指令.為匯編程序在匯編過

4、程中提供控制或指示信息,并不直接辰生機器代碼,屬于機器不能執(zhí)行的指令類型。第“章匯徭語言程;I破針簡介2 匯編計算機不能直接識別和執(zhí)行源程序。因此源程序必須 經(jīng)過匯編程序匯編產(chǎn)生機器碼目標(biāo)程序文件,程序才能執(zhí) 行。這種將匯編語言源程序轉(zhuǎn)換成機器語言程序的過程稱 為匯編。第“章匯徭語言程;|破針簡介匯編語言源程序的匯編過程分為手工匯編和機器匯編。所謂手工匯編,即采用人工查指令表的方法將匯編指令翻 譯成相應(yīng)機器代碼。通常源程序的人工匯編需要兩次才能完成,第一次匯編查 找每條指令的機器代碼,第二次匯編完成地址偏移量的計算。由于手工匯編需要計算和査找,繁瑣而且容易出錯,而且 程序修改時可能會引起指令的

5、地址變化,轉(zhuǎn)移指令的偏移量也 隨之改變,需要重新計算,所以手工匯編主要應(yīng)用于設(shè)計短小 程序或調(diào)試程序的場合。第“章匯徭得言程聲後針簡介所謂機器匯編,即采用匯編程序?qū)υ闯绦蜻M行自動匯編, 由于單片機軟硬件資源的限制,該過程通常借助于 PC 系統(tǒng)機 實現(xiàn),象這種借助于一種計算機而為另一種計算機產(chǎn)生目標(biāo) 代碼的匯編方式又稱為交叉匯編。交叉匯編的原理類似于手工匯編,在匯編程序中通常存 入了兩張表,即 MCS-51 單片機的指令代碼表和偽指令表。匯 編程序通常通過兩次掃描完成匯編, 第一次掃描查找源程序 中每條指令的機器代碼,第二次掃描完成地址偏移量的計算, 匯編后生成目標(biāo)文件和列表文件。這是目前應(yīng)用較

6、廣的匯編 方法。第“章匯徭得言程聲後針簡介匯編的主要功能為:(1)確定程序中每條匯編語言指令的指令機器碼。(2)確定每條指令在程序存儲器中的存放地址。(3)提供語法、編輯等方面的錯誤信息,但不能提供程序的 邏輯錯誤。(4)產(chǎn)生目標(biāo)執(zhí)行文件(水 OBJ/* HEX)和列表文件(咒 LST) o第“章匯編語言程淳殺針荷介4.1.3偽指令一、匯編起始指令 ORG 指令格式為:ORG 16 位地址該指令的作用是指明后面的程序或數(shù)據(jù)塊的起始地址, 它總是出現(xiàn)在每段源程序或數(shù)據(jù)塊的開始。16 位地址,確定了此語句后面第一條指令或第一個數(shù)據(jù) 的地址,此后的源程序或數(shù)據(jù)塊就依次連續(xù)存放在以后的地址 直到遇到另

7、一個ORG 指令為止。第“章匯編語言程淳殺針荷介ORG 偽指令說明其后面程序的目標(biāo)代碼在存儲器中存放的 起始地址是 2000H,即例:ORG2000HMOVMOVSP, # 60HRO, # 2FHMOV R2, # OFFH存儲器地址目標(biāo)程序2000H75 81 602003H2005H78 2F7A FF處纟主定於支至勺徑it企二、等值指令 EQU指令格式:字符名稱 EQU 數(shù)字或匯編符號功能:使指令中的字符名稱等價于給定的數(shù)字或匯編符號使用等值指令可給程序的編制、調(diào)試、修改帶米方便: 如果在程序中要多次使用到某一地址,由 EQU 指令將其賦值 給一個字符名稱,一旦需要對其進行變動,只要改

8、變 EQU 命 令后面的數(shù)字即可,而不需要對程序中涉及到該地址的所有 指令逐句進行修改。第“章匯徭得言程淳後針簡介注意,由 EQU 等值的字符名稱必須先賦值后使用,且 在同一個源程序中,同一個標(biāo)號只能賦值一次。例:PA8155 EQU 8001H即給標(biāo)號 PA8155 賦值為 8001Ho第“章匯編語言程淳殺針簡介三、定義字節(jié)指令 DB指令格式:標(biāo)號門 DB 8 位二進制數(shù)表功能:把 8 位二進制數(shù)表依次存入從標(biāo)號開始的連續(xù)的存 儲單元中。格式中,標(biāo)號區(qū)段可有可無,DB 指令之后的 8 位二進制數(shù)表是字節(jié)常數(shù)或用逗號隔開的字節(jié)串,也可以是用引號括起來的 ASCII 碼字符串(一個 ASCII

9、字符相當(dāng)于一個字節(jié))。第“章匯編語言程淳殺針簡介ORG 1000HBUF1:DB 38H, 7FH, 80HBUF2: DB 45H, 66HORG 偽指令指定了標(biāo)號 BUF1 的地址為 1000H,而 DB 偽 指令是將其后的二進制數(shù)表 38H, 7FH, 80H 依次存放在 1000H, 1001H,1002H 3 個連續(xù)單元之中,BUF2 也是一個標(biāo) 號,其地址與前一條偽指令連續(xù),即 1003H, 1004H 地址單元中依次存放 45H, 66HO愛纟主 壬阿士t彗t逆It 3生四、定義字指令 DW指令格式: 標(biāo)號訂 DW16 位數(shù)據(jù)表該指令的功能與 DB 相似,區(qū)別僅在于從指定地址開始

10、存 放的是指令中的 16 位數(shù)據(jù),而不是字節(jié)串。每個 16 位數(shù)據(jù) 要占兩個存儲單元,高 8 位先存,低8 8位后存,這和 MCS -51 指令中的 16 位數(shù)據(jù)存放順序是一致的。第“章匯編語言程;|殺針簡介五、DS (DefineStore)定義存儲區(qū)指令功能為:從指定的單元地址開始,保留一定數(shù)量的存儲單元,以備使用。指令格式:標(biāo)號:DS 表達式其中,表達式指定保留的內(nèi)存單元個數(shù)。例如,ORG1000HDS 10TAB:DB 10H匯編結(jié)果:從 1000H 地址處開始,保留 10 個字節(jié)單元。如 00AH) =10Ho第“章匯編語言程淳殺針簡介六、BIT位地址符號指令 指令功能為:將位地址賦

11、值給指定的符號名稱,通常用于位符 號地址的定義。指令如下:字符名稱 BIT 位地址例如,XI BIT P1.0匯編結(jié)果為將位地址 P1 O 賦給變量 XI,即在程序中便可使用 XI 代替位地址 P1.0。第“章匯編語言程淳破針簡介七、DATA數(shù)據(jù)地址賦值指令指令功能:將數(shù)據(jù)地址或指令代碼地址賦值給所指定的標(biāo)號。通常在程序中用于定義數(shù)據(jù)地址。指令格式如下:標(biāo)號:DATA 表達式例如,AA:DATA 2000H匯編結(jié)果為:AA=2000Ho第“章匯徭得言程;I殺針簡介【注意】:DATA 與 EQU 的區(qū)別在于:(1) EQU 定義的標(biāo)識符在匯編時不在符號表中登記,因此 必須先定義后使用;(2) D

12、ATA 定義的標(biāo)識符匯編時在符號表中登記,所以可 以先使用后定義。處纟主壬酬支昊1記it 八、匯編結(jié)束指令 END指令格式:標(biāo)號:END 地址或標(biāo)號格式中標(biāo)號以及 END 后面的地址或標(biāo)號可有可無。功能:提供匯編結(jié)束標(biāo)志。匯編程序遇到 END 后就停止匯編,對 END 以后的語句不予處理,故 END 應(yīng)放在程序的結(jié)束處。第“章匯編語言程淳殺針簡介4.2匯編語言程序設(shè)計4.2.0程序設(shè)計步驟4.2.1順序結(jié)構(gòu)4.2.2分支結(jié)構(gòu)423循環(huán)結(jié)構(gòu)4.2.4子程序調(diào)用第“章匯編語言程淳殺針簡介4.2.0程序設(shè)計步驟對于簡單程序的編寫,程序設(shè)計者往往能夠立即完成軟 件的構(gòu)思與編寫,而對于比較復(fù)雜的程序設(shè)計

13、問題,則需要 科學(xué)合理的程序設(shè)計步驟。從軟件工程角度來說,開發(fā)一個 應(yīng)用程序,一般需要經(jīng)過以下幾個步驟:第“章匯徭語言程淳筱針簡介愛纟主 壬加直彗t更it 先4.2.1順序程序設(shè)計序。特點為順序執(zhí)行每一條指令,直到最后。其執(zhí)行過程 如圖 4 順序程序是程序設(shè)計中最基本的結(jié)構(gòu),又稱為簡單程1=1第“章匯編語言程淳殺針簡介3 所示。S2圖4-3順序結(jié)構(gòu)第“章匯徭語言程淳筱針簡介【例 1】 兩個無符號雙字節(jié)數(shù)相加。設(shè)被加數(shù)存放于內(nèi)部 RAM 的 40H (高位字節(jié)),41H (低位字節(jié)),加數(shù)存放于 50H (高位字節(jié)),51H (低位字節(jié)),和數(shù)存入 40H 和 41H 單元中。第“章匯編語言程淳

14、殺針簡介程序如下:MOV RO, #41H;將被加數(shù)地址送數(shù)據(jù)指針 ROMOV Rl, #51H ;將加數(shù)地址送數(shù)據(jù)指針 R1START: CLR C;將 Cy 清零第“章匯編語言程淳殺針簡介第“章匯徭語言程淳筱針簡介ADI: MOV A, R0ADD A,R1MOV R0, ADEC RODEC R1MOV A, R0ADDC A, R1MOV RO,ARET;被加數(shù)低字節(jié)的內(nèi)容送入 A;兩個低字節(jié)相加;低字節(jié)的和存入被加數(shù)低字節(jié)中;指向被加數(shù)高位字節(jié);指向加數(shù)高位字節(jié);被加數(shù)高位字節(jié)送入 A;兩個高位字節(jié)帶 Cy 相加;高位字節(jié)的和送被加數(shù)高位字節(jié).愛纟主壬加怒企4.2.2分支程序設(shè)計1.

15、分支程序結(jié)構(gòu)2.一般分支程序設(shè)計3 分支表法實現(xiàn)多向分支程序的設(shè)計愛纟主壬酬 支企勺逆It先2.一般分支程序結(jié)構(gòu)實例【例 5】x,y 均為 8 位二進制數(shù), 設(shè) x存入 RO, y 存入 R1,求解:第“章匯編語言程淳殺針簡介程序如下:START:CJNE RO,#OOH,SUL1;RO 中的數(shù)與 00 比較不等轉(zhuǎn)移MOV Rl, #00H;相等,Rl0,則 RlOlHSJMP SUL2NEG:MOV Rl, #OFFH ; (RO) vO,則 RlOFFH+1SUI.2:RET第“章匯編語言程淳殺針簡介【例 6】 比較兩個無符號數(shù)的大小。設(shè)外部 RAM的存儲單元 ST1和 ST2中存放兩個不

16、帶符號的二進制數(shù), 找出其中的大數(shù)存入外部 RAM 中的 ST3 單元中。程序如下:ORG1000HSTIEQU2000HST2EQU2100HST3EQU2200HSTART: CLR C;清零 CyMOV DPTR, #ST1;第一個數(shù)的指針MOVX A, DPTR;取第一個數(shù)MOV R2,A;保存MOV DPTR, #ST2;第二個數(shù)的指針MOVX A, DPTR ;取第二個數(shù)CLR C第“章匯編語言程淳殺針簡介第“章匯編語言程聲筱針簡介SUBB A, R2;兩數(shù)比較JNC BIG1 ;若第二個數(shù)大 C=l,則轉(zhuǎn)XCH A, R2 ;第一個數(shù)大BIGO: MOV DPTR, # ST3M

17、OVX DPTR, A ;存大數(shù)RETBIG1: MOVX A, DPTR ;第二個數(shù)大 愛纟主壬魚晝m孑血以先. 了云爰菽狂施議毎高芬妥云蒜直計在實際應(yīng)用時,通常遇到根據(jù)某變量取值不同從而轉(zhuǎn)向不 同分支的題目, 這時經(jīng)常采用分支表法。 常用的分支表主要有 三種形式:轉(zhuǎn)移指令表、分支地址表和地址偏移量表。實質(zhì)上都是利用散轉(zhuǎn)指令 JMPA+DPTR 來實現(xiàn)的。的目 標(biāo)地址。間接轉(zhuǎn)移指令JMPA+DPTR;PCA+DPTR實現(xiàn)散轉(zhuǎn)的方法主要有兩種:累加器 A 清零,根據(jù) DPTR 的內(nèi)容決定轉(zhuǎn)移的目標(biāo)地址。Gp DPTR 的值作為基址不變,根據(jù)累加器 A 的內(nèi)容決定轉(zhuǎn)移 的SJMP BIGORET

18、第“章匯編語言程聲筱針簡介目標(biāo)地址。愛纟主壬魚亶X毎孑逆It企.【例 7】根據(jù) R2 的內(nèi)容,轉(zhuǎn)向相應(yīng)的分支程序。BP:R2=0,轉(zhuǎn)向 PROGOR2=l,轉(zhuǎn)向 PROG1 R2=n, 轉(zhuǎn)向 PROGn可采用方法:(1)使用轉(zhuǎn)移指令表。(2)使用分支地址表。(1)使用轉(zhuǎn)移指令表。所謂轉(zhuǎn)移指令表即由轉(zhuǎn)移指令組成的分支表,如圖所示。(3)使用地址偏移量表。第“章匯編語言程馮後針簡介圖 4 8 轉(zhuǎn)移指令表JMPTAB:AJMPPROGOAJMPPROG1 AJMP PROGn(a)JMPTAB:LJMP PROGOLJMP PROG1 LJMP PROGn(b)也纟主壬酬支盍1巴it設(shè)轉(zhuǎn)移指令表的標(biāo)

19、號為 JMPTAB,分支數(shù)為 5,解題思路 分析如圖所示。第“章匯徭得言程馮殺針簡介MOVMOVMOVMULPUSHMOVADDMOVPOPJMPDPTR, #JMPTAB;將 JMP1;轉(zhuǎn)移指令表A,KZB,#03AB;R2X3-BAJMPTAB:IJMPPROGOLJMPPROG1AA, B;暫存乘積的LJMPPROG5A, DPHDPH, AA;將乘積的高;將暫存的 A|PROGO:PROG1:A+DPTR:散轉(zhuǎn)PROG5: -_JMPA+DPTR;PC(A)+(DPT R)第彳章匯編語言程藩筱針簡介若轉(zhuǎn)移指令表由 2 字節(jié)指令 AJMP 構(gòu)成,M 取值應(yīng)為 2,且 各分支程序的入口地址

20、PROGO、 PROG1必須與轉(zhuǎn)移指令表 處于同一個2KB的存儲地址空間之內(nèi),而 LJMP 指令表則沒有IpADD:JMP A+DPTRPROG5:(2)使用分支地址表。所謂分支地址衣是指由各個分支程序的入口地址組成的線性表, 每個入口地址占兩個連續(xù)字節(jié)單元。設(shè) PROGO PROGn 為分支程序入口地址,分支地址表如圖所Zjl OBRANCHTAB:DW PROGODW PROG1這個限制。使用 AJMP 轉(zhuǎn)移指令表的程MOVCLRDPTR, #JMPTAC;散轉(zhuǎn)轉(zhuǎn)移指令表JMPTAB:AJMP PROGOAJMP PROG1MOVRLCJNCINCA, R2A ; R2X2NOADD ;弟

21、DPH ;若有進電AJMPPROG5PROGO:PROG1:第彳章匯編語言程藩筱針簡介DW PROGn第彳章匯編語言程藩筱針簡介圖4-11分支地址表的使用也“章匯編得言程為該針簡介 苗 g茨關(guān)磁藏商藕茹 WMAIN;MOVCMOVDPTR, #BRANCHTAB:取分支表入口地址MOVA,R2CLRc;AR2X2RLCAJNCNOADD;沒有進位轉(zhuǎn)移INCDPH;進位加到DPFMOVC A, A+DPTR:;A4-(A+DPI R)MOVR3, A;R3R2X2MOVC A, A+DPTR;A-分支地址的高位字節(jié)XCHA, R3R3分支地址的高位字節(jié),AR2X2INCA;指向下一個存儲單元ORGIOOOH;取分支地址的低位

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論