EM78P4475單片機(jī)指令系統(tǒng)
一、EM78P447S指令的執(zhí)行時(shí)序
作為時(shí)基的時(shí)鐘振蕩器,產(chǎn)生的時(shí)鐘脈沖信號(hào)經(jīng)內(nèi)部分頻電路分頻后形成“指令周期(Tins)”。作為EM78P447S單片機(jī)的重要特色之一,一個(gè)指令周期既可以占用2個(gè)時(shí)鐘周期,也可以占用4個(gè)時(shí)鐘周期,可以由用戶自主選定。因此,一個(gè)“指令周期”可以由2個(gè)時(shí)鐘周期(即2個(gè)節(jié)拍Q1和Q2)或4個(gè)時(shí)鐘周期(即4個(gè)節(jié)拍Q1、Q2、Q3和Q4)構(gòu)成。每當(dāng)Q1節(jié)拍的上升沿出現(xiàn)時(shí),程序計(jì)數(shù)器PC自動(dòng)加1。
由于EM78單片機(jī)內(nèi)部采用雙總線結(jié)構(gòu),使得它在執(zhí)行一條指令的同時(shí),就可以提取下一條指令,從而實(shí)現(xiàn)“流水作業(yè)”。就是說,在同一個(gè)指令周期之內(nèi),執(zhí)行指令和提取指令兩種活動(dòng)在同時(shí)進(jìn)行。這就使每一條指令的平均執(zhí)行時(shí)間為一個(gè)指令周期,、因此,就可以所成,EM78單片機(jī)指令的執(zhí)行時(shí)問“單周期化”了。絕大多數(shù)指令的運(yùn)行時(shí)間都僅占用一個(gè)指令周期,只有極個(gè)別的指令(即對(duì)程序計(jì)數(shù)器PC做“寫”操作的指令,比如MOV PC,A)才占用兩個(gè)指令周期,這一點(diǎn)應(yīng)該引起注意。
二、EM78P447S指令概述
不同CPU內(nèi)核的單片機(jī),具有不同的指令系統(tǒng)。指令系統(tǒng)中的每一條指令都完成一種特定功能的簡(jiǎn)單操作,比如數(shù)據(jù)傳送操作、加法操作等。將若干條實(shí)現(xiàn)簡(jiǎn)單操作的指令語句,按照一定的規(guī)則排列組合起來,就構(gòu)成了一個(gè)可以完成復(fù)雜功能的程序。 為了便于學(xué)習(xí)和掌握,通常每一條指令都用表意性很強(qiáng)的英文單詞或語句縮寫來代表。例如,NOP指令,就是由“No Operation.”一句英文縮略而成,中文含義是“空操作” 所以,通常人們將代表一條指令的一個(gè)字符串稱為“助記符”。假如按指令被使用的頻繁程度劃分整個(gè)指令系統(tǒng),其實(shí)只有一部分指令在編寫程序時(shí)經(jīng)常用到,而另一部分指令卻較少使用,還有一部分指令極少用到。每條指令一般都由操作碼和操作數(shù)組成,也有個(gè)別指令不帶操作數(shù)。操作碼是指令操作功能的記述,而操作數(shù)則描述操作的對(duì)象和操作的范圍。
1.指令結(jié)構(gòu)
一條指令的指令碼一般都可分解成兩部分:第一部分為操作碼(OPCODE),代表指令功能;第二部分為操作數(shù)(OPERAND),表示指令操作的對(duì)象,或運(yùn)算時(shí)所需要的參數(shù)。操作數(shù)又可以細(xì)分為兩部分:第一操作數(shù)和第二操作數(shù)。第一操作數(shù)就是目標(biāo)操作數(shù),第二操作數(shù)就是源操作數(shù)。以一條傳送指令為例,源操作數(shù)就是數(shù)據(jù)的發(fā)源地,而目標(biāo)操作數(shù)就是數(shù)據(jù)的目的地。 EM78P447S單片機(jī),共有指令58條,其編碼長(zhǎng)度均為13比特(bit)其一般指令格式為:操作碼第一操作數(shù),第二操作數(shù)或操作碼 目標(biāo)操作數(shù),源操作數(shù) 這種書寫格式與流行的MCS-51單片機(jī)的指令系統(tǒng),以及許多微機(jī)原理教科書中介紹的80X86指令系統(tǒng)相一致,也比較符合人們的記憶習(xí)慣。對(duì)于EM78P447S指令系統(tǒng)中的一條指令,操作數(shù)可以是兩個(gè)、一個(gè)或一個(gè)也沒有。
2 指令描述方法
對(duì)后面描述過程中所采用的一些符號(hào)或表示方法需作說明,見下表。
3.EM78P447S指令說明
以下對(duì)于EM78P447S單片機(jī)整個(gè)指令系統(tǒng)中的每條指令,以“指令的字母為序”進(jìn)行全面介紹,包括語法規(guī)則、指令編碼、操作內(nèi)容、影響標(biāo)志和功能說明等。其中語法規(guī)則就是匯編格式,也就是匯編器工具軟件認(rèn)可的格式。
4.操作數(shù)的尋址方式
操作數(shù)指定參與運(yùn)算的數(shù)據(jù)或者數(shù)據(jù)所在的存放地址。所謂“尋址”就是尋找操作數(shù)的存放地址,也就是給操作數(shù)定位的過程。所謂尋址方式,就是尋找操作數(shù)或操作數(shù)所在地址的方法和形式。
在EM78P447S的指令系統(tǒng)中,根據(jù)操作數(shù)的來源不同,設(shè)計(jì)了5種尋址方式:立即尋址、直接尋址、隱含尋址、間接尋址和比特尋址。
(1)立即尋址
在這種尋址方式中,操作數(shù)在指令碼中直接獲?。ㄟ@種在指令碼中直接攜帶的操作數(shù)就稱為立即數(shù))。
[例]ADD A,@16H;
實(shí)現(xiàn)的功能是,將立即數(shù)16H(前面需要帶有一個(gè)標(biāo)識(shí)符@)與累加器A的內(nèi)容(假設(shè)為99H)相加,結(jié)果(AFH)送到A。其指令碼的二進(jìn)制形式為:1,1111,0001,0110;其中前5位是操作碼,后8位就是立即數(shù)。指令執(zhí)行過程如上所示。算術(shù)邏輯單元ALU的兩個(gè)入口,送入的分別是加數(shù)16H(來自指令碼)和被加數(shù)99H(來自累加器A),在ALU中完成加法操作,從ALU的唯一出口把結(jié)果AFH送回A中。
(2)直接尋址
采用直接尋址方式的指令,可以在指令碼中直接獲取一個(gè)存放著操作數(shù)的存儲(chǔ)地址,即指令碼中包含著被訪問(即讀寫)寄存器的單元地址。
[例]OR A,15H;
實(shí)現(xiàn)的功能是,將地址為15H的RAM單元的內(nèi)容(假設(shè)是16H)與累加器A的內(nèi)容(假設(shè)是99H)進(jìn)行邏輯“或”之后,結(jié)果(9FH)送入A中。參加邏輯“或”運(yùn)算的一個(gè)數(shù)據(jù)(16H)所在的單元地址(15H)可以從指令中直接得到。操作過程如上所示。(3)間接尋址在采用寄存器間接尋址方式的指令碼中,6位寄存器地址必為“全0”。利用rrrrrr=000000這個(gè)“專用地址”,特指RSR (RAM選擇寄存器),并且是以RSR寄存器內(nèi)容為地址,所指定的工作寄存器單元中存放著被訪問的數(shù)據(jù)。從表面上看,指令碼中的6位0指定的是IAR(間接尋址寄存器),其實(shí)IAR僅僅是一個(gè)有名無實(shí)的寄存器單元,只不過是將它的地址編碼給專用化了。這樣做可大大簡(jiǎn)化指令系統(tǒng)。
為了便于理解,我們不妨換一個(gè)角度來分析,把RSR看成一個(gè)具有雙地址(分別為00H和04H)的特殊的寄存器單元,而可以不再提及IAR寄存器。當(dāng)用地址04H訪問RSR時(shí),就像訪問普通寄存器一樣,可以直接對(duì)RSR的內(nèi)容進(jìn)行讀或?qū)?;而用地?0H訪問RSR時(shí),而它就是一個(gè)間接尋址寄存器,不是對(duì)RSR的內(nèi)容進(jìn)行讀或?qū)?,而是把它的?nèi)容作為地址使用。假如用戶所需要訪問的一組寄存器有地址相鄰的特點(diǎn),使用間接尋址是很方便的。
[例]XOR A,0;
實(shí)現(xiàn)的功能是,將15H號(hào)RAM單元的內(nèi)容(假設(shè)為16H)與A內(nèi)容(假設(shè)為99H)相“異或”,運(yùn)算結(jié)果(8FH)送回A。參加“異或”運(yùn)算的一個(gè)操作數(shù)(16H)可以從指令碼中間接得到。RSR、A和15H號(hào)RAM單元的內(nèi)容都是預(yù)先存入的。其操作過程如下圖所示。
在下頁的下中描述了直接尋址方式和間接尋址方式,這兩種尋址過程中RAM工作寄存器地址的形成。對(duì)于直接尋址方式,體選碼來自RAM選擇寄存器RSR的最高2位,體內(nèi)地址直接來自指令碼;對(duì)于間接尋址方式,體選碼也來自RAM選擇寄存器RSR的最高2位,但是體內(nèi)地址卻來自RSR的低6位。
對(duì)于RAM的特殊功能寄存器空間中的各寄存器只能進(jìn)行直接尋址,不能進(jìn)行間接尋址。
(4)隱含尋址
采用隱含尋址方式的指令,在指令碼中不必指明存放著操作數(shù)的存儲(chǔ)地址,即指令碼中并非包含著被訪問(即讀寫)寄存器的單元地址,就可以自動(dòng)地訪問一個(gè)默認(rèn)的寄存器。
[例]CONTR;
實(shí)現(xiàn)的功能是,將控制寄存器CONT的內(nèi)容讀取之后,經(jīng)過ALU送到累加器A中(CONT寄存器沒有統(tǒng)一的地址編碼,這一點(diǎn)與眾不同)。其操作過程如下圖所示。
(5)比特尋址
可以對(duì)任一寄存器中的任一比特位直接尋址訪問,也就是指令碼中既包含著被訪問寄存器的地址,又包含著該寄存器中的某一比特的地址。如果將RAM存儲(chǔ)器看成一個(gè)陣列的話,那么在這個(gè)陣列中尋找某一個(gè)比特,就需要一個(gè)縱坐標(biāo)和一個(gè)橫坐標(biāo)縱坐標(biāo)就相當(dāng)于單元地址,橫坐標(biāo)就相當(dāng)于比特地址。
[例]BS 15H,4;
實(shí)現(xiàn)的功能是把地址為15H的寄存器單元內(nèi)的比特4置為1。
5.以累加器A為中樞的數(shù)據(jù)傳遞方式 數(shù)據(jù)的邏輯運(yùn)算和算術(shù)運(yùn)算過程,以及控制信號(hào)的輸入和輸出過程,在單片機(jī)內(nèi)部都可以看成是“數(shù)據(jù)傳遞”的過程。根據(jù)EM78P447S的硬件系統(tǒng)和軟件系統(tǒng)(即指令系統(tǒng)和尋址方式)的規(guī)劃特點(diǎn),我們可以總結(jié)出在單片機(jī)內(nèi)部,在各個(gè)寄存器之間進(jìn)行數(shù)據(jù)傳遞,能夠?qū)崿F(xiàn)的幾種途徑和方式。不妨可以用上進(jìn)行形象化地描述。該圖中的每一條帶箭頭的線條都代表一種傳遞方式,在每一條帶箭頭的線條旁邊,還同時(shí)分別給出了實(shí)現(xiàn)相應(yīng)的那一種數(shù)據(jù)傳遞所用指令的一個(gè)實(shí)例。其中有一點(diǎn)值得注意的是,“MOV R,R”指令中的“R”實(shí)際指的是同一個(gè)工作寄存器單元,該指令的目的是影響標(biāo)志位“Z” 事實(shí)上,就不存在不同工作寄存器單元之間直接傳遞的指令,只能以A作中轉(zhuǎn)實(shí)現(xiàn)間接傳遞。
6.“CPU內(nèi)核一專用寄存器一模塊或部件”三者相互關(guān)系
對(duì)于單片機(jī)的開發(fā)和應(yīng)用,其主要任務(wù)有兩項(xiàng):一是軟件設(shè)計(jì),二是硬件設(shè)計(jì)。硬件沒計(jì)我們暫且不提,在此只想用軟件設(shè)計(jì)的觀點(diǎn),從不同角度剖析和理解單片機(jī)內(nèi)部的組織關(guān)系。
軟件設(shè)計(jì)實(shí)際上就是運(yùn)用指令編制程序,而EM78P447S單片機(jī)的每條指令的作用范圍非常集中,