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

下載本文檔

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

文檔簡(jiǎn)介

1、第四章 匯編語(yǔ)言程序設(shè)計(jì)程序設(shè)計(jì)概述匯編語(yǔ)言源程序的編輯和匯編匯編語(yǔ)言程序設(shè)計(jì)2021年年12月月9日日1、程序設(shè)計(jì)語(yǔ)言簡(jiǎn)介2、匯編語(yǔ)言程序設(shè)計(jì)初步2021年年12月月9日日1、常用的編程語(yǔ)言是常用的編程語(yǔ)言是匯編語(yǔ)言匯編語(yǔ)言和和高級(jí)語(yǔ)言高級(jí)語(yǔ)言。1 1匯編語(yǔ)言匯編語(yǔ)言用英文字符來(lái)代替機(jī)器語(yǔ)言,這些英文字符被稱(chēng)為用英文字符來(lái)代替機(jī)器語(yǔ)言,這些英文字符被稱(chēng)為助記符匯助記符匯編語(yǔ)言:編語(yǔ)言:用助記符表示的指令。用助記符表示的指令。匯編語(yǔ)言源程序:匯編語(yǔ)言源程序:用匯編語(yǔ)言編寫(xiě)的程序。用匯編語(yǔ)言編寫(xiě)的程序。優(yōu)點(diǎn):優(yōu)點(diǎn):用匯編語(yǔ)言編寫(xiě)程序效率高,占用存儲(chǔ)空間小,運(yùn)行用匯編語(yǔ)言編寫(xiě)程序效率高,占用存儲(chǔ)空

2、間小,運(yùn)行速度快,能編寫(xiě)出最優(yōu)化的程序。速度快,能編寫(xiě)出最優(yōu)化的程序。缺點(diǎn):缺點(diǎn):可讀性差,離不開(kāi)具體的硬件,是面向可讀性差,離不開(kāi)具體的硬件,是面向“硬件硬件”的語(yǔ)的語(yǔ)言通用性差。言通用性差。2021年年12月月9日日1、程序設(shè)計(jì)語(yǔ)言簡(jiǎn)介2 2高級(jí)語(yǔ)言高級(jí)語(yǔ)言不受具體不受具體“硬件硬件”的限制,的限制,優(yōu)點(diǎn):優(yōu)點(diǎn):通用性強(qiáng),直觀、易通用性強(qiáng),直觀、易懂、易學(xué),可讀性好。懂、易學(xué),可讀性好。目前多數(shù)的目前多數(shù)的51單片機(jī)用戶(hù)單片機(jī)用戶(hù)使用使用C語(yǔ)言(語(yǔ)言(C51)來(lái)進(jìn)行程來(lái)進(jìn)行程序設(shè)計(jì),已公認(rèn)為高級(jí)語(yǔ)言中高效簡(jiǎn)潔而又貼近序設(shè)計(jì),已公認(rèn)為高級(jí)語(yǔ)言中高效簡(jiǎn)潔而又貼近51單片機(jī)單片機(jī)硬件的編程語(yǔ)言。

3、硬件的編程語(yǔ)言。將將C語(yǔ)言向單片機(jī)上移植,始于語(yǔ)言向單片機(jī)上移植,始于20世紀(jì)世紀(jì)80年代的中后年代的中后期。期。匯編語(yǔ)言設(shè)計(jì)步驟(1)分析題意,明確要求(2)確定算法(3)畫(huà)程序流程圖(4)分配內(nèi)存工作單元(5)編寫(xiě)源程序(6)程序優(yōu)化(7)上機(jī)調(diào)試、修改和最后確定源程序4.2 匯編語(yǔ)言源程序的編輯和匯編偽指令源程序的編輯和匯編1、偽指令(1 1)指令語(yǔ)句)指令語(yǔ)句已在第已在第3 3章介紹。每一指令語(yǔ)句在匯編時(shí)都產(chǎn)生一個(gè)指令代碼(機(jī)器代碼章介紹。每一指令語(yǔ)句在匯編時(shí)都產(chǎn)生一個(gè)指令代碼(機(jī)器代碼),執(zhí)行該指令代碼對(duì)應(yīng)著機(jī)器的一種操作。),執(zhí)行該指令代碼對(duì)應(yīng)著機(jī)器的一種操作。(2 2)偽指令語(yǔ)句

4、)偽指令語(yǔ)句是控制匯編(翻譯)過(guò)程的一些是控制匯編(翻譯)過(guò)程的一些控制命令控制命令。在匯編時(shí)。在匯編時(shí)沒(méi)有機(jī)器代碼沒(méi)有機(jī)器代碼與之對(duì)與之對(duì)應(yīng)。應(yīng)。下面介紹偽指令語(yǔ)句。下面介紹偽指令語(yǔ)句。1、偽指令1ORG(ORiGin)匯編起始地址命令)匯編起始地址命令源程序的開(kāi)始,用一條源程序的開(kāi)始,用一條ORG偽指令規(guī)定偽指令規(guī)定程序的起始地程序的起始地址址。如果不用如果不用ORG,則匯編得到的目標(biāo)程序,則匯編得到的目標(biāo)程序?qū)膶?000H地址開(kāi)始。例如:地址開(kāi)始。例如:ORG2000HSTART:MOVA,#00H 即規(guī)定標(biāo)號(hào)即規(guī)定標(biāo)號(hào)START代表地址為代表地址為2000H開(kāi)始。開(kāi)始。在一源程序中

5、,可多次用在一源程序中,可多次用ORG指令,規(guī)定不同的程序段的指令,規(guī)定不同的程序段的起始地址。但是,起始地址。但是,地址必須由小到大排列,且不能交叉、地址必須由小到大排列,且不能交叉、重疊。重疊。例如:例如:ORG2000HORG2500HORG3000H這種順序是正確的。若按下面順序的排列則是錯(cuò)誤的,因?yàn)榈刂烦霈F(xiàn)了交叉。ORG2500HORG2000HORG3000H1、偽指令2. 2. END(END of Assembly)END(END of Assembly)匯編終止命令匯編終止命令源程序源程序結(jié)束標(biāo)志結(jié)束標(biāo)志,終止源程序的匯編工作。終止源程序的匯編工作。整個(gè)源程序整個(gè)源程序中只能

6、有一條中只能有一條ENDEND命令,且命令,且位于程序的最后位于程序的最后。如果。如果ENDEND出現(xiàn)出現(xiàn)在程序中間,其后的源程序,將不進(jìn)行匯編處理。在程序中間,其后的源程序,將不進(jìn)行匯編處理。1、偽指令3DB(Define Byte)定義數(shù)據(jù)字節(jié)命令)定義數(shù)據(jù)字節(jié)命令格式:格式:標(biāo)號(hào):標(biāo)號(hào): DB 8位字節(jié)數(shù)據(jù)表位字節(jié)數(shù)據(jù)表用于從(標(biāo)號(hào))指定的地址開(kāi)始,在程序存儲(chǔ)器連續(xù)單用于從(標(biāo)號(hào))指定的地址開(kāi)始,在程序存儲(chǔ)器連續(xù)單元中定義字節(jié)數(shù)據(jù)。例如:元中定義字節(jié)數(shù)據(jù)。例如:ORG 1000HDB-2,-4,100,30H,C,A1、偽指令4、DW(Define Word)定義字?jǐn)?shù)據(jù)命令)定義字?jǐn)?shù)據(jù)命

7、令該命令用于從指定的地址開(kāi)始,在程序存儲(chǔ)器的連該命令用于從指定的地址開(kāi)始,在程序存儲(chǔ)器的連續(xù)單元中定義續(xù)單元中定義16位的字?jǐn)?shù)據(jù)。例如:位的字?jǐn)?shù)據(jù)。例如:ORG 2000HDATA:DW 1246H,7BH,10匯編后(2000H)=12H(2001H)=46H;第1個(gè)字(2002H)=00H(2003H)=7BH;第2個(gè)字(2004H)=00H(2005H)=0AH;第3個(gè)字5DS(Define Storage)定義存儲(chǔ)區(qū)命令)定義存儲(chǔ)區(qū)命令從指定地址開(kāi)始,保留指定數(shù)目的字節(jié)單元作為存儲(chǔ)區(qū)從指定地址開(kāi)始,保留指定數(shù)目的字節(jié)單元作為存儲(chǔ)區(qū),供程序運(yùn)行使用。,供程序運(yùn)行使用。例如:例如:TABE

8、L:DS10表示從表示從TABEL代表的地址開(kāi)始,保留代表的地址開(kāi)始,保留10個(gè)連續(xù)的地址個(gè)連續(xù)的地址單元。單元。又例如又例如:ORG2000HDS10 H表示從表示從2000H地址開(kāi)始,保留地址開(kāi)始,保留16個(gè)連續(xù)地址單元。個(gè)連續(xù)地址單元。2021年年12月月9日日6 6EQUEQU(EQUateEQUate)標(biāo)號(hào)賦值命令)標(biāo)號(hào)賦值命令用于用于給標(biāo)號(hào)賦值給標(biāo)號(hào)賦值。賦值后,標(biāo)號(hào)值在整個(gè)程序有效。賦值后,標(biāo)號(hào)值在整個(gè)程序有效。例如:例如:TESTTEST: EQU 2000HEQU 2000H表示表示TEST=2000HTEST=2000H,匯編時(shí),凡是遇到,匯編時(shí),凡是遇到TESTTEST時(shí)

9、,均以時(shí),均以2000H2000H來(lái)代替。來(lái)代替。2021年年12月月9日日1、源程序的編輯2、源程序的匯編2021年年12月月9日日順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)子程序結(jié)構(gòu)2021年年12月月9日日例:兩個(gè)無(wú)符號(hào)雙字節(jié)數(shù)相加。 設(shè)被加數(shù)存放于內(nèi)部RAM的40H(高位字節(jié)), 41H(低位字節(jié)), 加數(shù)存放于50H(高位字節(jié)), 51H(低位字節(jié)), 和數(shù)存入 40H和41H單元中。 2021年年12月月9日日程序如下: START: CLR C ; 將Cy清零w MOV R0, 41H ; 將被加數(shù)地址送數(shù)據(jù)指針R0w MOV R1, 51H ; 將加數(shù)地址送數(shù)據(jù)指針R1 AD1: MOV A,

10、R0 ; 被加數(shù)低字節(jié)的內(nèi)容送入AwADD A,R1 ; 兩個(gè)低字節(jié)相加wMOV R0, A ; 低字節(jié)的和存入被加數(shù)低字節(jié)中w DEC R0 ; 指向被加數(shù)高位字節(jié)w DEC R1 ; 指向加數(shù)高位字節(jié)w MOV A, R0 ; 被加數(shù)高位字節(jié)送入AwADDC A, R1 ; 兩個(gè)高位字節(jié)帶Cy相加w MOV R0, A ; 高位字節(jié)的和送被加數(shù)高位字節(jié)2021年年12月月9日日2021年年12月月9日日(a) 單分支流程單分支流程; (b) 多分支流程多分支流程 例 設(shè)變量X存放在內(nèi)部RAM 30H單元,函數(shù)值Y存入內(nèi)部RAM 31單元。試編程,按照下式的要求給賦值。2021年年12月月9

11、日日2021年年12月月9日日開(kāi)始開(kāi)始AXA=0A0A=-1A=1存結(jié)果存結(jié)果結(jié)束結(jié)束YNNY,;,:,:,2021年年12月月9日日2021年年12月月9日日 循環(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)行分析、 處理和存放。 2021年年12月月9日日例:編

12、寫(xiě)多字節(jié)無(wú)符號(hào)數(shù)加法程序設(shè)有兩個(gè)多字節(jié)無(wú)符號(hào)數(shù)分別存放在內(nèi)部RAM的DAT1和DAT2開(kāi)始的區(qū)域中(低字節(jié)先存),字節(jié)個(gè)數(shù)放在R2中,求它們的和,并將結(jié)果存放在DAT1開(kāi)始的區(qū)域中。2021年年12月月9日日2021年年12月月9日日開(kāi)始開(kāi)始循環(huán)初始化循環(huán)初始化讀取被加數(shù)讀取被加數(shù)兩數(shù)相加兩數(shù)相加傳送部分和到目的單元傳送部分和到目的單元指向下一個(gè)被加數(shù)和加數(shù)指向下一個(gè)被加數(shù)和加數(shù)全部相加完畢全部相加完畢處理高字節(jié)進(jìn)位處理高字節(jié)進(jìn)位結(jié)束結(jié)束NY ORG 0400H MOV R0,#DAT1 MOV R1,#DAT2 CLR CLOOP:MOV A,R0 ADDC A,R1 MOV R0,A IN

13、C R0 INC R1 DJNZ R2,LOOP CLR A ADDC A,#0 MOV R0,A END2021年年12月月9日日例例 5 秒延時(shí)程序。 延時(shí)程序與 MCS - 51 執(zhí)行指令的時(shí)間有關(guān), 如果使用 12 MHz晶振, 一個(gè)機(jī)器周期為 1 s, 計(jì)算出一條指令以至一個(gè)循環(huán)所需要的執(zhí)行時(shí)間, 給出相應(yīng)的循環(huán)次數(shù), 便能達(dá)到延時(shí)的目的。5 秒延時(shí)程序如下:2021年年12月月9日日nDELAY: MOV R5, 50n DEL0: MOV R6, 200n#4990153 9980306n DEL1: MOV R7, 248n DEL2: DJNZ R7, $;DEL2n DJN

14、Z R6, DEL1n DJNZ R5, DEL0n RET 2021年年12月月9日日子程序的概念子程序的概念 通常把那些基本操作功能編制為一個(gè)獨(dú)立夫人程序段, 這些就是可供不同程序或同一程序反復(fù)調(diào)用的子程序。在程序中需要執(zhí)行這種操作的地方放置一條調(diào)用指令, 當(dāng)程序執(zhí)行到調(diào)用指令, 就轉(zhuǎn)到子程序中完成規(guī)定的操作, 并返回到原來(lái)的程序繼 續(xù)執(zhí)行下去。 2021年年12月月9日日子程序中必須有一條子程序返回指令(RET),其功能是當(dāng)子程序執(zhí)行完后能自動(dòng)返回到主程序中去。注意事項(xiàng):n(1)子程序名n(2)明確入口條件、出口條件n(3)注意保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)2021年年12月月9日日 子程序的調(diào)用子

15、程序的調(diào)用 調(diào)用子程序的指令有“ACALL”和“LCALL”, “LCALL”:16位入口地址 “ACALL”:11位入口地址,另5位由PC提供執(zhí)行調(diào)用指令時(shí), 先將程序地址指針PC改變(“ACALL”加 2, “LCALL”加 3), 然后 PC值壓入堆棧, 用新的地址值代替。執(zhí)行返回指令時(shí), 再將 PC值彈出。 2021年年12月月9日日子程序調(diào)用中, 主程序應(yīng)先把有關(guān)的參數(shù)存入約定的位置, 子程序在執(zhí)行時(shí), 可以從約定的位置取得參數(shù), 當(dāng)子程序執(zhí)行完, 將得到的結(jié)果再存入約定的位置, 返回主程序后, 主程序可以從這些約定的位置上取得需要的結(jié)果, 這就是參數(shù)的傳遞。子程序的調(diào)用涉及到堆棧,

16、在主程序中必須要正確設(shè)置堆棧指針。子程序嵌套是指在子程序執(zhí)行過(guò)程中,還可以調(diào)用另一個(gè)子程序。2021年年12月月9日日例4-13 用程序?qū)崿F(xiàn)C=A*A+B*B。設(shè)A和B均小于10,A存在內(nèi)部RAM31H單元,B存在內(nèi)部RAM 32H,把C存入內(nèi)部RAM 33H單元。解:本題中包含2個(gè)求平方值,把求平方設(shè)計(jì)為子程序。子程序名稱(chēng):SQR功能:求小于10的數(shù)的平方(查表法)入口參數(shù)A,出口參數(shù)A2021年年12月月9日日 主程序: ORG 0800H MOV SP,#60H MOV A,31H LCALL SQR MOV R1,A MOV A,32H LCALL SQR ADD A,R1 MOV 3

17、3H,A SJMP$2021年年12月月9日日 ORG 0900HSQR: ADD A,#01H MOVC A,A+PC RETTAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END堆棧變化:畫(huà)圖說(shuō)明2021年年12月月9日日4-6試編程將內(nèi)部RAM 40H-60H單元內(nèi)容傳送到外部RAM以2000H為首地址的存儲(chǔ)區(qū)中4-7在外部RAM首地址為DATA的存貯器中,有10個(gè)字節(jié)的數(shù)據(jù),試編程將每個(gè)字節(jié)的最高位無(wú)條件置“1”4-8 編寫(xiě)程序?qū)⑼獠縍AM 3000H開(kāi)始的13個(gè)單元中的數(shù)據(jù)隔一個(gè)傳送到內(nèi)部RAM30H開(kāi)始的區(qū)域4-9編程將外部RAM地址為1000H-1030

18、H的數(shù)據(jù)塊全部搬遷到內(nèi)部RAM 30H-60H中,并將原來(lái)數(shù)據(jù)全部清零。4-18設(shè)在外部RAM 2000H-2004H單元中,存放有5個(gè)壓縮BCD碼,試編程將它們轉(zhuǎn)換成ASCII碼,存放到以2005H為首地址的外部RAM中。4-21 根據(jù)圖3-10,設(shè)計(jì)燈亮移位程序,要求8個(gè)發(fā)光二極管每次亮1個(gè),點(diǎn)亮40ms。順次循環(huán)右移點(diǎn)亮,循環(huán)不止。4-22 根據(jù)圖3-10,設(shè)計(jì)亮燈程序,要求8個(gè)發(fā)光二極管間隔分成2組,每組4個(gè),2組交叉點(diǎn)亮,變換時(shí)間為100ms,反復(fù)循環(huán)不止。2021年年12月月9日日2021年年12月月9日日該單片機(jī)系統(tǒng)的晶振頻率為該單片機(jī)系統(tǒng)的晶振頻率為12MHz3-14 已知(A)=5Bh,(R1)=40H,(40H)=C3H,(PSW)=81H,試寫(xiě)出各條指令單獨(dú)執(zhí)行結(jié)果,并說(shuō)明程序狀態(tài)字的狀態(tài)。 (1) XCH A,R1 (2)XCHA,40H(3) XCHA,R1

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論