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