匯編語言以及匯編語句課件_第1頁
匯編語言以及匯編語句課件_第2頁
匯編語言以及匯編語句課件_第3頁
匯編語言以及匯編語句課件_第4頁
匯編語言以及匯編語句課件_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、LOGO3.6 匯編語言以及匯編語句匯編語言以及匯編語句21 本單元目標(biāo)本單元目標(biāo)了解什么是匯編語言掌握匯編語句格式掌握源程序框架結(jié)構(gòu)2 機(jī)器語言機(jī)器語言 & 匯編語言匯編語言v機(jī)器語言:芯片的存儲單元只有機(jī)器語言:芯片的存儲單元只有0 0和和1 1兩種狀態(tài),兩種狀態(tài),而芯片也只會判斷而芯片也只會判斷0 0和和1 1這兩種狀態(tài),因此一串這兩種狀態(tài),因此一串代碼要讓芯片代碼要讓芯片“讀懂讀懂” ” ,這串代碼只能由數(shù)字,這串代碼只能由數(shù)字0 0和和1 1組成。組成。像這種由數(shù)字像這種由數(shù)字0 0和和1 1按照一定的規(guī)律按照一定的規(guī)律組成的代碼就叫機(jī)器碼,也叫二進(jìn)制編碼。組成的代碼就叫機(jī)器

2、碼,也叫二進(jìn)制編碼。一一定長度的機(jī)器碼組成了機(jī)器指令,用這些機(jī)器定長度的機(jī)器碼組成了機(jī)器指令,用這些機(jī)器指令所編寫的程序就稱為機(jī)器語言。指令所編寫的程序就稱為機(jī)器語言。 10001 表示表示1A 00 表示表示1$002 機(jī)器語言機(jī)器語言 & 匯編語言匯編語言v1000000這串機(jī)器碼表示:這串機(jī)器碼表示:1A,1$00v機(jī)器語言的缺陷:機(jī)器語言的缺陷: 代碼長,不好記憶,不易看懂,容易寫錯。代碼長,不好記憶,不易看懂,容易寫錯。v匯編語言:為了解決機(jī)器語言的缺陷,人們發(fā)匯編語言:為了解決機(jī)器語言的缺陷,人們發(fā)明了另外一種語言明了另外一種語言匯編語言。這種語言用匯編語言。這種語言用符號

3、(助記符,標(biāo)號,數(shù)值)來代替冗長的、符號(助記符,標(biāo)號,數(shù)值)來代替冗長的、難以記憶的難以記憶的0、1代碼串。代碼串。 LDA #1T表示表示1A MOV #1T,$00 表示表示1$002 機(jī)器語言機(jī)器語言 & 匯編語言匯編語言v匯編:匯編語言寫成的源程序,我們?nèi)祟惪吹脜R編:匯編語言寫成的源程序,我們?nèi)祟惪吹枚?,但是芯片看不懂,它只認(rèn)得機(jī)器語言,匯懂,但是芯片看不懂,它只認(rèn)得機(jī)器語言,匯編源程序必須翻譯成機(jī)器語言,才能在芯片上編源程序必須翻譯成機(jī)器語言,才能在芯片上運(yùn)行。運(yùn)行。利用專用的匯編工具(例如利用專用的匯編工具(例如ICS08、CodeWarrior、Keil)把匯編語言寫成

4、的源把匯編語言寫成的源程序翻譯成機(jī)器語言的過程就叫匯編。程序翻譯成機(jī)器語言的過程就叫匯編。v現(xiàn)今,人們普遍采用匯編語言和現(xiàn)今,人們普遍采用匯編語言和C語言來編寫單語言來編寫單片機(jī)源程序。片機(jī)源程序。3 匯編語言源程序的格式匯編語言源程序的格式v 用戶的匯編源程序由一條條匯編語句組成,每條最完整用戶的匯編源程序由一條條匯編語句組成,每條最完整的語句可包括以下的語句可包括以下4個部分:標(biāo)號、操作碼、操作數(shù)和個部分:標(biāo)號、操作碼、操作數(shù)和注釋。匯編語句不區(qū)分大小寫。注釋。匯編語句不區(qū)分大小寫。 例如:例如:Again:MOV#$01,RamData ;主循環(huán)的開始主循環(huán)的開始標(biāo)號標(biāo)號操作碼操作碼操作

5、數(shù)操作數(shù)注釋注釋3.1 匯編語言源程序的格式:標(biāo)號匯編語言源程序的格式:標(biāo)號v 標(biāo)號:實(shí)際上是代表了某行語句存放的標(biāo)號:實(shí)際上是代表了某行語句存放的起始地址起始地址。 標(biāo)號不是必須的,絕大多數(shù)語句都沒有標(biāo)號,它通常只用在子標(biāo)號不是必須的,絕大多數(shù)語句都沒有標(biāo)號,它通常只用在子函數(shù)或轉(zhuǎn)移目的語句處。函數(shù)或轉(zhuǎn)移目的語句處。 一般來說,標(biāo)號的前面不能有空格,在一般來說,標(biāo)號的前面不能有空格,在CodeWarrior中允許標(biāo)號中允許標(biāo)號前面有空格,但是這時必須在標(biāo)號的后面跟上帽號前面有空格,但是這時必須在標(biāo)號的后面跟上帽號“:”;當(dāng);當(dāng)標(biāo)號的前面沒有空格時,標(biāo)號后面的冒號標(biāo)號的前面沒有空格時,標(biāo)號后面

6、的冒號“:”可有可無。可有可無。 標(biāo)號只能以字母或下劃線開頭標(biāo)號只能以字母或下劃線開頭,后面可以跟字母、數(shù)字和下劃,后面可以跟字母、數(shù)字和下劃線。線。 標(biāo)號在標(biāo)號部分只能出現(xiàn)一次,不能重復(fù)。標(biāo)號在標(biāo)號部分只能出現(xiàn)一次,不能重復(fù)。v 判斷這些標(biāo)號,找出不合法的:判斷這些標(biāo)號,找出不合法的:Init_Pro, _Init_Pro, 3Init_Pro, Again1。v (不合法:不合法:3Init_Pro)3.2 匯編語言源程序的格式:操作碼匯編語言源程序的格式:操作碼v操作碼:表示某種計算或者控制,例如表示加操作碼:表示某種計算或者控制,例如表示加法、跳轉(zhuǎn)等等。它可以是偽指令,也可以是助法、跳

7、轉(zhuǎn)等等。它可以是偽指令,也可以是助記符。記符。 操作碼位于標(biāo)號之后,兩者用至少一個空格操作碼位于標(biāo)號之后,兩者用至少一個空格或或Tab符隔開。對于沒有標(biāo)號的語句,操作符符隔開。對于沒有標(biāo)號的語句,操作符不能從一行的第一列開始寫,前面應(yīng)該至少不能從一行的第一列開始寫,前面應(yīng)該至少有一個空格或有一個空格或Tab符。符。 操作碼是必須的,在一條語句中一定存在操操作碼是必須的,在一條語句中一定存在操作碼。作碼。v例例ORG,EQU,ADD,MOV,INC,LDA,STA,CLR等等。等等。3.3 匯編語言源程序的格式:操作數(shù)匯編語言源程序的格式:操作數(shù)v操作數(shù):是操作碼操作的對象,可以是地址、操作數(shù):

8、是操作碼操作的對象,可以是地址、標(biāo)號、數(shù)值或表達(dá)式。標(biāo)號、數(shù)值或表達(dá)式。 操作數(shù)位于操作碼之后,兩者用至少一個空操作數(shù)位于操作碼之后,兩者用至少一個空格或格或Tab符隔開。符隔開。 多個操作數(shù)之間用逗號多個操作數(shù)之間用逗號“,”隔開。隔開。 大多數(shù)指令需要操作數(shù),但是有些隱含尋址大多數(shù)指令需要操作數(shù),但是有些隱含尋址的指令(針對的指令(針對CPU寄存器的操作)沒有操作寄存器的操作)沒有操作數(shù),如數(shù),如CLRA, STX,RSP等等。等等。3.4 匯編語言源程序的格式:注釋匯編語言源程序的格式:注釋v注釋:在一行語句中,分號注釋:在一行語句中,分號“;”后面的內(nèi)容為后面的內(nèi)容為注釋部分;另外,如

9、果注釋部分;另外,如果“*”在一行語句的第一在一行語句的第一列,也表示該行是注釋。列,也表示該行是注釋。 它應(yīng)由一個以上的空格或制表符與操作數(shù)或它應(yīng)由一個以上的空格或制表符與操作數(shù)或操作碼(無操作數(shù)時)分開。操作碼(無操作數(shù)時)分開。 它可包含任何可打印的它可包含任何可打印的ASCII字符。字符。 注釋不是必須的,但是對于初學(xué)者,建議給注釋不是必須的,但是對于初學(xué)者,建議給每條語句寫注釋。每條語句寫注釋。3.5 匯編語言源程序的格式:其他說明匯編語言源程序的格式:其他說明v語句中出現(xiàn)的標(biāo)點(diǎn)符號語句中出現(xiàn)的標(biāo)點(diǎn)符號“:”、“;”、“,”、“_”都必須是在都必須是在“英文標(biāo)點(diǎn)模式英文標(biāo)點(diǎn)模式”下輸

10、入,而下輸入,而不能在不能在“中文標(biāo)點(diǎn)模式中文標(biāo)點(diǎn)模式”下輸入為下輸入為“:”、“;”、“,”、“”。v注釋中出現(xiàn)的標(biāo)點(diǎn)符號則不受上面的限制。注釋中出現(xiàn)的標(biāo)點(diǎn)符號則不受上面的限制。v不要把數(shù)字不要把數(shù)字0和字母和字母o混淆?;煜不要把數(shù)字不要把數(shù)字1和字母和字母l混淆?;煜?。v不同語句的標(biāo)號、操作碼、操作數(shù)、注釋最好不同語句的標(biāo)號、操作碼、操作數(shù)、注釋最好對齊,這樣的程序美觀且容易閱讀。對齊,這樣的程序美觀且容易閱讀。3.6 匯編語言源程序的格式:仿真體驗(yàn)匯編語言源程序的格式:仿真體驗(yàn)v運(yùn)行運(yùn)行”學(xué)生練習(xí)(找錯)學(xué)生練習(xí)(找錯)_匯編語言程序設(shè)計匯編語言程序設(shè)計1.mcp “,對照匯編語言

11、源程序的格式中的各,對照匯編語言源程序的格式中的各個要點(diǎn),找出問題并改正它們。個要點(diǎn),找出問題并改正它們。4 常量常量v 常量是指那些在匯編時已經(jīng)有確定數(shù)值的量。分為數(shù)值常量(也叫常量是指那些在匯編時已經(jīng)有確定數(shù)值的量。分為數(shù)值常量(也叫常數(shù))和符號常量。常數(shù))和符號常量。v 常數(shù)常數(shù):以數(shù)值的形式出現(xiàn)在符號指令中。常數(shù)可以是二進(jìn)制、十進(jìn):以數(shù)值的形式出現(xiàn)在符號指令中。常數(shù)可以是二進(jìn)制、十進(jìn)制、十六進(jìn)制和制、十六進(jìn)制和ASCII碼,其中二進(jìn)制、十進(jìn)制、十六進(jìn)制分別加碼,其中二進(jìn)制、十進(jìn)制、十六進(jìn)制分別加前綴前綴%、!、$或者后綴或者后綴Q、T、H,ASCII碼用單引號碼用單引號表示。表示。 如

12、如10010111Q=%10010111=97H=$97=151T A;等同于等同于41Hv 符號常量符號常量:經(jīng)常使用的地址或者數(shù)值預(yù)先用偽指令:經(jīng)常使用的地址或者數(shù)值預(yù)先用偽指令EQU定義為一個定義為一個名字,然后用該名字來表示該地址或數(shù)值,這個名字就成為了符號名字,然后用該名字來表示該地址或數(shù)值,這個名字就成為了符號常量。例如常量。例如 PTAD EQU $0000 ;將將$0000地址單元定義為符號地址單元定義為符號 ;常量常量PTAD Ram_Start EQU 0070H ;將數(shù)值將數(shù)值0070H定義為符號常量定義為符號常量;Ram_Start5.1 偽指令:定位偽指令偽指令:定位

13、偽指令ORGvORG:定位偽指令定位偽指令 格式:格式:ORG ORG 表達(dá)式表達(dá)式 (注釋)(注釋) 例如:例如:ORG ORG EC00EC00 v ORG偽指令把由表達(dá)式?jīng)Q定的值(偽指令把由表達(dá)式?jīng)Q定的值(EC00)賦給程序計數(shù)器。在其后面的指令匯編后應(yīng)放賦給程序計數(shù)器。在其后面的指令匯編后應(yīng)放在從該值(在從該值(EC00)開始的存儲單元中。開始的存儲單元中。v如果一個源程序中沒有如果一個源程序中沒有ORG偽指令,程序計數(shù)偽指令,程序計數(shù)器初始值為器初始值為0000,即從,即從0號單元開始匯編。號單元開始匯編。 5.2 偽指令:賦值偽指令偽指令:賦值偽指令EQUv EQUEQU:賦值偽指

14、令賦值偽指令 格式:標(biāo)號格式:標(biāo)號 EQU EQU 表達(dá)式表達(dá)式 (注釋)(注釋) RomStartRomStartEQUEQU$C000 ;FLASH$C000 ;FLASH的起始地址的起始地址v EQUEQU偽指令把表達(dá)式的值賦給前面的標(biāo)號。該標(biāo)號不能偽指令把表達(dá)式的值賦給前面的標(biāo)號。該標(biāo)號不能在程序的其他地方再定義。表達(dá)式中不能使用后面定義在程序的其他地方再定義。表達(dá)式中不能使用后面定義或沒有定義的符號,否則將出錯。下例將出錯或沒有定義的符號,否則將出錯。下例將出錯 ORG RomStart ORG RomStart RomStart EQU $C000RomStart EQU $C00

15、0v 下例則是正確的:下例則是正確的: RamStart EQU $0070RamStart EQU $0070 ORG RamStart ORG RamStart5.3 偽指令:塊定義偽指令:塊定義DS(RMB)v格式:標(biāo)號格式:標(biāo)號 DS(或或RMB)n_dsvDS(或或RMB)偽指令用于在偽指令用于在RAM存儲區(qū)內(nèi)定義存儲區(qū)內(nèi)定義n_ds個字節(jié)的連續(xù)存儲空間,該空間個字節(jié)的連續(xù)存儲空間,該空間不進(jìn)行初不進(jìn)行初始化始化(即定義后這些空間里面的值是不確定(即定義后這些空間里面的值是不確定的)。例:的)。例: ORG $0070 Data_Ds DS(或或RMB) 4v上例表示從上例表示從$0

16、070開始,定義了一塊了大小為開始,定義了一塊了大小為4個字節(jié)的空間,且它們的值是不確定的,即個字節(jié)的空間,且它們的值是不確定的,即($0070)=, ($0071)=, ($0072)=, ($0073)=。5.4 偽指令:字節(jié)定義偽指令:字節(jié)定義DC.B(FCB)v 格式:標(biāo)號格式:標(biāo)號 DC.B(或或FCB) n1_dbv DC.B(或或FCB)偽指令用于把后面的數(shù)據(jù)偽指令用于把后面的數(shù)據(jù)n1_db按字節(jié)按字節(jié)依次連續(xù)存依次連續(xù)存放在以標(biāo)號作為首地址的放在以標(biāo)號作為首地址的RAM存儲單元中。例:存儲單元中。例: ORG $0074 Data_Db DC.B(或或FCB) 12H,34H,

17、56T,a,Av執(zhí)行上例后,從執(zhí)行上例后,從$0074開始的存儲空間的內(nèi)容開始的存儲空間的內(nèi)容為:為:$0074 12 34 38 61 41(a、A的的ASCII值分別為值分別為61H、41H)。5.5 偽指令:字定義偽指令:字定義DC.W(FDB)v 格式:標(biāo)號格式:標(biāo)號 DC.W(或或FDB) n1_dbv DC.W(或或FDB)偽指令用于把后面的數(shù)據(jù)偽指令用于把后面的數(shù)據(jù)n1_dw按字按字依次連續(xù)存放依次連續(xù)存放在以標(biāo)號作為首地址的在以標(biāo)號作為首地址的RAM存儲單元中。例:存儲單元中。例: ORG $0078 Data_Dw DC.W(或或FDB) 12H,34H,56T,a,Av執(zhí)行

18、上例后,從執(zhí)行上例后,從$0078開始的存儲空間的內(nèi)容開始的存儲空間的內(nèi)容為:為:$0078 00 12 00 34 00 38 00 61 00 41。匯編語言程序設(shè)計1-偽指令綜合練習(xí).MCPv6 本任務(wù)所涉及的語句介紹6.1 INCLUDEv 格式: INCLUDE 文件名v 解釋: INCLUDE是匯編偽指令。INCLUDE的作用是把單引號中表示的文件引入到INCLUDE語句所在的地方。v 舉例: 語句“INCLUDE derivative.inc ;”表示把文件derivative.inc的內(nèi)容嵌入到本語句所在地方。 由于derivative.inc包含以下的代碼(注意,這里省略了注

19、釋信息): INCLUDE MC9S08AC16.inc feed_watchdog: MACRO STA SRS ENDM INCLUDE derivative.inc的作用相當(dāng)于把以上的4行語句插入到該語句所在的地方。 6.2 EQUv 格式: 標(biāo)號 EQU 表達(dá)式 (注釋)v 解釋: EQU是一條偽指令,語句的作用是用標(biāo)號來表示表達(dá)式的內(nèi)容。v 舉例: ROMStartEQU $C000 ; ROMStart相當(dāng)于$C000 RAMStart:EQU $0100 ; RAMStart相當(dāng)于$0100 RAMEnd:EQU $046F ; RAMEnd相當(dāng)于$046F 6.3 ORGv 格

20、式: ORG表達(dá)式 (注釋)v 解釋: ORG是一條偽指令,用來重新定位程序或數(shù)據(jù)所在的存儲單元的地址,表示ORG語句后面的語句從表達(dá)式所表示的地址開始存放。v 舉例: ORG RAMStart ; 定位變量/數(shù)據(jù)區(qū)的起始地址 LightNum:DS.B 1 ; LightNum所在的存儲單元的 ; 地址為RAMStart(即$0100)6.4 SEIv格式: SEIv解釋: SEI是一條匯編指令,表示把條件碼寄存器中的I標(biāo)志置為1,具體作用是禁止單片機(jī)所有的可屏蔽的中斷。v舉例: SEI ; 關(guān)中斷6.5 LDAv格式: LDA v解釋: LDA是一條匯編指令,表示把操作數(shù)所表示的8位立即數(shù)

21、(數(shù)值)或操作數(shù)所表示的地址中的數(shù)值存放到累加器A中。v舉例: LDA #7FH; 7FHA, (A) =7FH LDA SOPT; (SOPT)A, ; (A)= (SOPT)6.6 LDHXv格式: LDHX v解釋: LDHX是一條匯編指令,表示把操作數(shù)所表示的16位立即數(shù)(數(shù)值)或操作數(shù)所表示的地址以及下一個地址所存放的數(shù)值存放到H:X中,數(shù)值的高字節(jié)給H,低字節(jié)給X。v舉例: LDHX #RAMEnd+1 由于#RAMEnd+1$046F1$0470,所以(H)$04,(X)$70。6.7 TXSv格式: TXSv解釋: TXS是一條無操作數(shù)的指令,表示把H:X中的值減去1后賦給SP

22、,(H:X)-1SP。6.8 INCAv格式: INCAv解釋: INCA是一條無操作數(shù)的指令,使累加器A的值自增1。6.9 DECAv格式: DECAv解釋: DECA是一條無操作數(shù)的指令,使累加器A的值自減1。6.10 AIXv格式: AIX#opr16iv解釋:AIX是一條單操作數(shù)的指令,使H:X中的值增加opr16i。v舉例: AIX #1 ; 使H:X中的值加16.11 LSRv 格式: LSRv 解釋: LSR是一條單操作數(shù)的指令,表示邏輯右移,使操作數(shù)所表示的數(shù)值的值向右移動1位,原來的第0位移到了條件碼寄存器的C標(biāo)志中,最高位補(bǔ)零。邏輯右移示意圖如上圖所示。v 舉例: CLC; (C) = 0 LDA#%10100101 ; (A) = %10100101 STAPTBD; (PTBD) = %10100101 LSRPTBD ; (PTBD) = %01010010, (C) = 16.12 ROLv 格式: ROLv 解釋: ROL是一條單操作數(shù)的指令,使操作數(shù)所表示的數(shù)值的值循環(huán)向左移動1位,原來的第7位移到第0位,原來的第0位移到第7位,條件碼寄存器中的C標(biāo)志的值和原來的第7位相同。循環(huán)左移示意圖如上圖所示。v 舉例: CLC; (C) = 0 LDA#%10100101; (A

溫馨提示

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

最新文檔

評論

0/150

提交評論