郭鵬
(陜西省理工學(xué)校,陜西 咸陽(yáng) 710054)
隨著現(xiàn)代科學(xué)技術(shù)的快速發(fā)展與普及,單片機(jī)知識(shí)也已普及進(jìn)入工科相關(guān)專業(yè)課程體系。目前,我國(guó)單片機(jī)教學(xué)多以INTEL公司的8051單片機(jī)為教學(xué)對(duì)象。8051單片機(jī)指令系統(tǒng)涉及匯編指令多達(dá)111條,指令的學(xué)習(xí)與掌握是影響學(xué)生學(xué)習(xí)該課程的一大障礙。表現(xiàn)在:一是指令眾多,學(xué)生感到難以記憶;二是利用指令編寫(xiě)程序時(shí),不知如何書(shū)寫(xiě)及表達(dá)應(yīng)用;三是指令出現(xiàn)錯(cuò)誤,不能判別指令錯(cuò)誤原因。其中,指令的理解與掌握是解決這些問(wèn)題的基本。筆者通過(guò)多年的教學(xué)實(shí)踐,力求找到一條快速掌握指令的捷徑,希望給單片機(jī)初學(xué)者帶來(lái)幫助。
8051單片機(jī)指令系統(tǒng)按功能把匯編指令劃分為數(shù)據(jù)傳送、算術(shù)運(yùn)算、控制轉(zhuǎn)移、邏輯運(yùn)算和位處理指令五個(gè)大類。指令的基本格式為:
【標(biāo)號(hào):】操作碼 操作數(shù);注釋
指令的學(xué)習(xí)首先是操作碼功能識(shí)別與助記符的記憶,其次是操作數(shù)的表達(dá)。操作數(shù)表達(dá)相對(duì)繁雜,這也是初學(xué)時(shí)感到指令繁雜的一個(gè)主要原因。下面就從這兩方面做一簡(jiǎn)要探討。
操作碼的學(xué)習(xí),可按功能類型,結(jié)合助記符相關(guān)英語(yǔ)單詞含義解析,讓學(xué)生快速,深刻理解操作碼助記符,以促進(jìn)學(xué)生理解和掌握指令功能。英語(yǔ)在這里僅是場(chǎng)景輔助,幫助學(xué)生了解操作碼助記符的來(lái)源及含義。理解后,學(xué)生按“操作碼功能&操作碼助記符”記憶、表達(dá)方式日常練習(xí)使用即可。如操作碼DJNZ,表達(dá)為“減1不為零轉(zhuǎn)移指令DJNZ”,操作碼INC,表達(dá)為“加1指令I(lǐng)NC”。
操作數(shù)的學(xué)習(xí),也有記憶方法。先看下表:
注:特殊寄存器如B,P0等也屬于direct形式
操作數(shù)的出現(xiàn)主要有兩種類型。類型一,該類指令,操作碼不變,而操作數(shù)組合方式靈活多樣,形成多條指令。如片內(nèi)字節(jié)傳送指令根據(jù)操作數(shù)不同組合有15條指令。加減運(yùn)算有24條指令。與、或、非邏輯操作有18條指令等,這些可按“#AdR@”順序記憶操作數(shù),再輔以特定規(guī)律就可應(yīng)對(duì)許多指令記憶。這類指令重點(diǎn)在于操作數(shù)的格式掌握上。類型二:該類指令中操作數(shù)較簡(jiǎn)單,記憶相對(duì)簡(jiǎn)單。如條件轉(zhuǎn)移指令JZ rel。這類指令的記憶主要在于操作碼功能理解。
2.1 對(duì)于操作數(shù)類型一,因篇幅所限,下面以片內(nèi)數(shù)據(jù)傳送指令示例說(shuō)明。
指令格式:MOV目的操作數(shù),源操作數(shù)
操作碼助記符英文釋義:助記符原型單詞就是MOV,其意為移動(dòng),指令功能就是把一個(gè)數(shù)從一個(gè)存儲(chǔ)單元移動(dòng)到另一個(gè)存儲(chǔ)單元。指令中是從源操作數(shù)移向目的操作數(shù)存儲(chǔ)單元。
片內(nèi)數(shù)據(jù)為字節(jié)傳送時(shí),源、目的操作數(shù)有15種組合方式,即有15條字節(jié)傳送指令。
記憶竅門:操作數(shù)中,兩個(gè)R不能見(jiàn)面;
兩操作數(shù),自己不能跟自己見(jiàn)面(自我傳送,無(wú)意義);
立即數(shù)不能作為目的操作數(shù)(不能給數(shù)據(jù)賦值)
如:MOV#30H,R3;給數(shù)據(jù)賦值,非法
MOV R5,@R0;兩個(gè)R見(jiàn)面,非法
MOV 30H,30H;自我傳送,非法
字節(jié)傳送MOV指令的速記默寫(xiě)示例:
默記操作數(shù)“#AdR@”。由于不能數(shù)據(jù)賦值,所以只能分別以 (累加器)A、d(寄存器direct)、R (工作寄存器Rn)和@(間質(zhì)尋址◎Ri)分別為第一操作數(shù),即目的操作數(shù)。源操作數(shù)仍按順序排列組合依次很快就可寫(xiě)出片內(nèi)數(shù)據(jù)傳送的15條指令。
2.2 對(duì)于操作數(shù)類型二,下面以一些指令為例簡(jiǎn)說(shuō)操作碼識(shí)記如下∶
左移指令RL:第一個(gè)字母取rotate首字母表示進(jìn)行循環(huán),第二個(gè)字母取left首字母,即為左循環(huán),第二個(gè)字母如取right首字母就組合為右循環(huán)指令RR,位單元CY內(nèi)容也可作為第8位,即最高位參與循環(huán),就有了帶進(jìn)位左循環(huán)RLC和帶進(jìn)位右循環(huán)RRC指令。循環(huán)操作只能對(duì)累加器A內(nèi)容進(jìn)行操作。所以指令很簡(jiǎn)單,只有相應(yīng)4條循環(huán)移位指令。
邏輯運(yùn)算指令:ANL,前兩個(gè)字母表示邏輯操作方式為and即“與”操作,第三個(gè)字母取“邏輯”的英文單詞logic首字母,表示是邏輯運(yùn)算功能;“或”英文單詞OR結(jié)合字母L就構(gòu)成邏輯或運(yùn)算指令操作碼ORL助記符。exclusive or是異或的意思,各取一個(gè)字母X,R組合表示異或,加上字母L形成異或邏輯運(yùn)算符號(hào)XRL。操作數(shù)組合除仿算術(shù)運(yùn)算指令操作數(shù)組合技巧以外,適度完善不規(guī)則組合即可。
XCH:exchange交換。該指令第一操作數(shù)必須是累加器A,可利用巧記操作數(shù)序列列寫(xiě)第二操作數(shù)。顯然序列中#,即立即數(shù)不能賦值,所以不能出現(xiàn)。而半字節(jié)交換指令第二操作數(shù),序列中只有◎Ri可以分割成◎字符和Ri兩字符,其余不能分割。因此操作數(shù)據(jù)此可記住半字節(jié)交換指令只有一條,且為XCHD A,@Ri。XCHD操作碼末尾字母“D”即divde,此處為分割的意思。
JZ:J為英文單詞JUMP首字母,意為跳,表明實(shí)現(xiàn)跳跳轉(zhuǎn)功能。跳的條件由操作碼字母J后條件決定,滿足條件跳轉(zhuǎn),否則順序執(zhí)行下一條指令,既不跳轉(zhuǎn)。Z:zero,中文含義“零”,默認(rèn)對(duì)累加器A進(jìn)行“判零”。
CJNE:C是英文單詞compare(比較)首字母;J∶跳轉(zhuǎn);字母J后是跳轉(zhuǎn)條件:兩操作數(shù)比較滿足Not equal,即不想等時(shí),跳轉(zhuǎn)。
DJNZ:D是英文單詞DECREASE(減少)首字母;J后是跳轉(zhuǎn)條件,操作數(shù)減1后,結(jié)果NOT ZERO即不為零就執(zhí)行跳轉(zhuǎn),否則順序往下執(zhí)行。
當(dāng)然有少數(shù)沒(méi)有明顯記憶規(guī)律的指令仍需死記,其實(shí)動(dòng)些腦子,也許你會(huì)發(fā)現(xiàn)適合自己記憶的竅門??傊?,指令學(xué)習(xí)的有效方法就是多用巧記。本文旨在拋磚引玉,給出一些指令學(xué)習(xí)技巧與思路,文中不到之處還請(qǐng)理解。
[1]楊文龍.單片機(jī)原理及應(yīng)用[M].西安:西安電子科技大學(xué)出版,2006.
[2]章鴻猷.英漢計(jì)算機(jī)詞匯[M].北京:清華大學(xué)出版社,1997.