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