專利名稱:一種基于cisc結(jié)構(gòu)的微處理器構(gòu)架及指令實(shí)現(xiàn)方式的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及半導(dǎo)體集成電路設(shè)計(jì)領(lǐng)域的微控制器(MCU),尤其是涉及執(zhí)行復(fù)雜指令集的基于CISC結(jié)構(gòu)的微控制器。
背景技術(shù):
目前微控制器(MCU)一般以某一種微處理器內(nèi)核為核心,芯片內(nèi)部集成ROM/EPROM/EEPROM/FlashROM、RAM、總線、總線邏輯、定時(shí)/計(jì)數(shù)器、WatchDog、I/O、串行口、脈寬調(diào)制輸出、A/D、D/A、LCD驅(qū)動(dòng)、UART、I2C等各種必要功能和外設(shè)。為適應(yīng)不同的應(yīng)用需求,一個(gè)系列的單片機(jī)具有多種衍生產(chǎn)品,每種衍生產(chǎn)品的處理器內(nèi)核都是一樣的,不同的是存儲(chǔ)器和外設(shè)的配置及封裝。這樣可以使單片機(jī)最大限度地和應(yīng)用需求相匹配。微控制器的最大特點(diǎn)是單片化,體積小,從而使功耗和成本下降,可靠性提高。微控制器是目前嵌入式系統(tǒng)工業(yè)的主流。微控制器的片上外設(shè)資源一般比較豐富,適合于各種應(yīng)用。
嵌入式微控制器目前的品種和數(shù)量最多,較有代表性的通用系列包括8051、P51XA、MCS-251、MCS-96/196/296、C166/167、MC68HC05/11/12/16、68300等。另外還有許多半通用系列如支持USB接口的MCU 8XC930/931、C540、C541;支持I2C、CAN-Bus、LCD及眾多專用MCU和兼容系列。目前MCU占嵌入式系統(tǒng)約70%的市場(chǎng)份額。
在MCU開發(fā)方面,以架構(gòu)而言,可分為兩大主流RISC和CISC。RISC指令集組成比較簡(jiǎn)單,相對(duì)指令執(zhí)行速度較快,但完成一項(xiàng)任務(wù)可能需要多條指令組合而成,針對(duì)較復(fù)雜組合的工作便需要占用較多的編譯器時(shí)間來(lái)執(zhí)行,其總線結(jié)構(gòu)為哈佛型。
CISC的總線結(jié)構(gòu)是馮.諾依曼型,計(jì)算機(jī)在同一個(gè)存儲(chǔ)空間取指令和數(shù)據(jù),數(shù)據(jù)線和指令線分時(shí)復(fù)用。在流水線結(jié)構(gòu)方面,取指和執(zhí)行采用單指令流水線結(jié)構(gòu),它的指令集豐富,功能強(qiáng)大。
CISC體系是一種為了便于編程和提高內(nèi)存訪問(wèn)效率而設(shè)計(jì)的體系。其主要特征是使用微代碼操作和具有豐富的指令集,便于設(shè)計(jì)新的處理器,能有效縮短新指令的微代碼設(shè)計(jì)時(shí)間。其豐富的指令集便于應(yīng)用工程師的編程使用。具有雙操作數(shù)格式、寄存器到寄存器、寄存器到內(nèi)存以及內(nèi)存到寄存器等的指令,尋址方式靈活。
屬于CISC結(jié)構(gòu)的單片機(jī)主要有Intel的MCS-51系列、Motorola的M68HC系列、Atmel的AT89系列、臺(tái)灣Winbond(華邦)W78系列、荷蘭Pilips的PCF80C51系列等;一般來(lái)說(shuō),控制關(guān)系較簡(jiǎn)單的小家電,可以采用RISC型單片機(jī);控制關(guān)系較復(fù)雜的場(chǎng)合,如大家電、通訊產(chǎn)品、工業(yè)控制系統(tǒng)應(yīng)采用CISC單片機(jī)在8位CISC微控制器芯片領(lǐng)域,標(biāo)準(zhǔn)體系架構(gòu)都是連續(xù)型的執(zhí)行,傳統(tǒng)的CISC占據(jù)了較大的市場(chǎng)份額,CISC大多有繁雜的指令集,運(yùn)行效率較低,指令可擴(kuò)展性較差,應(yīng)用復(fù)雜等缺點(diǎn),難以滿足越來(lái)越快速的通信需求。
CISC單片機(jī)主要缺點(diǎn)在于①指令集龐雜,多數(shù)指令的利用率不高。②不同的指令,需要不同的時(shí)鐘周期來(lái)完成,每條指令要通過(guò)執(zhí)行一段解釋性微程序才能完成,需占用較多的CPU時(shí)間,執(zhí)行效率不是很高。③由于指令龐大,使編譯程序選擇目標(biāo)指令的范圍很大,不便優(yōu)化編譯。④強(qiáng)調(diào)數(shù)據(jù)控制,導(dǎo)致設(shè)計(jì)復(fù)雜,研制周期長(zhǎng)。
發(fā)明內(nèi)容
本發(fā)明的目的在于提出一種新型的基于CISC的微處理器構(gòu)架及指令實(shí)現(xiàn)方式,其在傳統(tǒng)CISC的基礎(chǔ)上做了改進(jìn),提出一種有效的系統(tǒng)構(gòu)架,提高了指令運(yùn)行效率。支持151條基本指令,采用單級(jí)四段流水線,運(yùn)行效率提高,指令組合方便,可滿足各類嵌入式實(shí)時(shí)控制和通信的要求。
根據(jù)本發(fā)明的第一方面的基于CISC結(jié)構(gòu)的微控制器,該微控制器核包括程序存儲(chǔ)器,數(shù)據(jù)隨機(jī)存儲(chǔ)器,特殊功能寄存器堆,數(shù)據(jù)總線和地址總線,流水線指令結(jié)構(gòu),數(shù)據(jù)緩沖區(qū),通用算術(shù)邏輯單元,指令讀取及譯碼器和系統(tǒng)控制模塊,其中,所述的數(shù)據(jù)總線分為各自分離的的8位內(nèi)部數(shù)據(jù)總線和8位程序數(shù)據(jù)總線,所述的系統(tǒng)控制模塊用于產(chǎn)生系統(tǒng)時(shí)鐘、系統(tǒng)復(fù)位以及各種讀寫控制電路,所述的單級(jí)四段流水線指令處理結(jié)構(gòu)分為4個(gè)部分,首先是指令讀取及譯碼電路,即所述的指令讀取及譯碼器通過(guò)上述8位程序數(shù)據(jù)總線從程序存儲(chǔ)器讀入指令,并對(duì)指令進(jìn)行譯碼分解;然后通過(guò)控制電路根據(jù)譯碼結(jié)果讀取寄存器或者存儲(chǔ)器的內(nèi)容;再通過(guò)算術(shù)邏輯單元進(jìn)行運(yùn)算;之后對(duì)運(yùn)算的結(jié)果存入寄存器或者數(shù)據(jù)存儲(chǔ)器單元;當(dāng)執(zhí)行調(diào)用、返回等指令時(shí),會(huì)對(duì)程序指針進(jìn)行壓棧和出棧操作,當(dāng)執(zhí)行跳轉(zhuǎn)等指令時(shí),有指針偏移操作,同時(shí)在每讀下一字節(jié)指令時(shí),會(huì)對(duì)PC有加1的操作。
根據(jù)本發(fā)明的第二方面的基于CISC結(jié)構(gòu)的微控制器,其特征在于所述的數(shù)據(jù)存儲(chǔ)器(RAM)、程序存儲(chǔ)器(ROM)、特殊功能寄存器和數(shù)據(jù)緩沖區(qū)域是空間獨(dú)立的,利用地址映射電路將它們的地址映射在連續(xù)的空間上,并可擴(kuò)展。
根據(jù)本發(fā)明的第三方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于該微控制器的指令集共有151條基本指令,該微控制器支持各類常見的微處理器指令,包括數(shù)據(jù)傳送交換、算術(shù)邏輯運(yùn)算、比較、乘除法、移位循環(huán)、半字節(jié)操作、位操作、跳轉(zhuǎn)、調(diào)用返回、進(jìn)棧退棧、軟中斷以及空操作類指令,指令執(zhí)行周期最短的1個(gè)工作周期,最長(zhǎng)的10個(gè)工作周期,指令可以進(jìn)行相應(yīng)的擴(kuò)展。
根據(jù)本發(fā)明的第四方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集包括25條數(shù)據(jù)傳送指令,每條指令有其唯一的操作碼識(shí)別,指令實(shí)現(xiàn)將源地址的數(shù)據(jù)傳送到目的地址中,由于源地址和目的地址可以是多種尋址方式,使得每條指令包含1-4個(gè)字節(jié)不等的指令編碼,產(chǎn)生一類控制信號(hào)控制完成1)控制有關(guān)寄存器將數(shù)據(jù)傳送至ALU(2)控制ALU完成地址的計(jì)算(3)控制從源地址提取數(shù)據(jù)(4)控制數(shù)據(jù)寫入目的地址。
根據(jù)本發(fā)明的第五方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括10條比較指令,每條指令有其唯一的操作碼識(shí)別,指令實(shí)現(xiàn)將源地址的數(shù)據(jù)與目的地址的數(shù)據(jù)進(jìn)行比較,每條指令包含1-4個(gè)字節(jié)不等的指令編碼,產(chǎn)生一類控制信號(hào)控制完成(1)控制有關(guān)寄存器將地址數(shù)據(jù)傳送至ALU(2)控制ALU完成地址的計(jì)算(3)控制從源地址和目的地址提取數(shù)據(jù)傳送至ALU(4)控制ALU執(zhí)行減法操作(5)控制將減法的結(jié)果設(shè)置標(biāo)志寄存器。
根據(jù)本發(fā)明的第六方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括50條算術(shù)邏輯運(yùn)算指令,每條指令有其唯一的操作碼識(shí)別,指令實(shí)現(xiàn)將源地址的數(shù)據(jù)與目的地址的數(shù)據(jù)進(jìn)行算術(shù)或邏輯運(yùn)算,每條指令包含1-4個(gè)字節(jié)不等的指令編碼,產(chǎn)生一類控制信號(hào)控制完成(1)控制有關(guān)寄存器將地址數(shù)據(jù)傳送至ALU(2)控制ALU完成地址的計(jì)算(3)控制從源地址和目的地址提取數(shù)據(jù)傳送至ALU(4)控制ALU執(zhí)行指令要求的算術(shù)邏輯操作(5)控制將運(yùn)算的結(jié)果寫入目的寄存器。
根據(jù)本發(fā)明的第七方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,,其特征在于所述的指令集還包括2條十進(jìn)制調(diào)整指令,每條指令有其唯一的操作碼識(shí)別,根據(jù)不同的尋址方式,產(chǎn)生控制信號(hào),指令實(shí)現(xiàn)將寄存器中的16進(jìn)制結(jié)果進(jìn)行十進(jìn)制調(diào)整,產(chǎn)生BCD碼,調(diào)整后的結(jié)果仍回寫到寄存器p。
根據(jù)本發(fā)明的第八方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括2條乘除法指令,每條指令有其唯一的操作碼識(shí)別,根據(jù)不同的尋址方式,產(chǎn)生控制信號(hào),指令實(shí)現(xiàn)寄存器w與累加器a中的無(wú)符號(hào)數(shù)相乘并回寫結(jié)果,指令實(shí)現(xiàn)寄存器對(duì)wa與寄存器c中的無(wú)符號(hào)數(shù)相除并回寫。
根據(jù)本發(fā)明的第九方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括13條循環(huán)移位和半字節(jié)操作指令,每條指令有其唯一的操作碼識(shí)別,根據(jù)不同的尋址方式,產(chǎn)生控制信號(hào),指令實(shí)現(xiàn)寄存器或者寄存器與內(nèi)存的數(shù)據(jù)的移位或者半字節(jié)移位。
根據(jù)本發(fā)明的第十方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括24條位操作指令,每條指令有其唯一的操作碼識(shí)別,根據(jù)不同的尋址方式,產(chǎn)生控制信號(hào),指令實(shí)現(xiàn)對(duì)寄存器或者內(nèi)存單元數(shù)據(jù)的位進(jìn)行設(shè)置和運(yùn)算。
根據(jù)本發(fā)明的第十一方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括11條跳轉(zhuǎn)指令,每條指令有其唯一的操作碼識(shí)別,根據(jù)不同的尋址方式,產(chǎn)生控制信號(hào),根據(jù)偏移量指令實(shí)現(xiàn)程序的跳轉(zhuǎn)。
根據(jù)本發(fā)明的第十二方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括8條調(diào)用、返回指令,每條指令有其唯一的操作碼識(shí)別,根據(jù)不同的尋址方式,產(chǎn)生控制信號(hào),根據(jù)不同的尋址方式,指令實(shí)現(xiàn)子程序的調(diào)用和返回。
根據(jù)本發(fā)明的第十三方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括4條進(jìn)棧退棧指令,產(chǎn)生控制信號(hào),指令實(shí)現(xiàn)對(duì)程序狀態(tài)字和寄存器內(nèi)容的壓棧和出棧。
根據(jù)本發(fā)明的第十四方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括1條軟中斷指令,產(chǎn)生控制信號(hào),指令實(shí)現(xiàn)軟件中斷。
根據(jù)本發(fā)明的第十五方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括1條空操作指令,產(chǎn)生控制信號(hào),指令實(shí)現(xiàn)空操作。
根據(jù)本發(fā)明的第十六方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于讀入的指令通過(guò)所述的指令讀取及譯碼器分解,按分解后的微指令碼進(jìn)行譯碼,并執(zhí)行相應(yīng)的操作,根據(jù)尋址方式不同,譯碼后將操作數(shù)或者操作碼分別存儲(chǔ)于不同的操作數(shù)寄存器、微指令碼寄存器、內(nèi)存。
根據(jù)本發(fā)明的第十七方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述不同的尋址方式按尋址類型分別為立即數(shù)尋址、直接尋址、寄存器尋址、寄存器間接尋址、隱含尋址、相對(duì)尋址、變址尋址、絕對(duì)尋址、向量尋址、頁(yè)尋址和存儲(chǔ)器位尋址共11種類型。
根據(jù)本發(fā)明的第十八方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于指令執(zhí)行的順序是在時(shí)鐘的第一相讀入指令碼并譯碼,同時(shí)處理中斷等,第二相讀內(nèi)存單元或者寄存器的數(shù)據(jù)并存儲(chǔ),第三相執(zhí)行ALU操作,完成指令要求的各種運(yùn)算或者偏移量的計(jì)算,第四相將指令運(yùn)算得的結(jié)果寫入內(nèi)存及相關(guān)寄存器,同時(shí)在每一相進(jìn)行相關(guān)標(biāo)志位的設(shè)置和指令周期存儲(chǔ)計(jì)算的操作。
根據(jù)本發(fā)明的第十九方面的基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于中斷處理的方式為當(dāng)中斷請(qǐng)求發(fā)生時(shí),置位中斷鎖存器,在指令執(zhí)行的第一相時(shí)鐘時(shí)檢測(cè)中斷鎖存器,響應(yīng)中斷,并清中斷使能標(biāo)志和中斷鎖存器,PC在中斷程序執(zhí)行前后自動(dòng)壓棧和出棧;所述的中斷的種類包括軟件中斷、外部中斷、定時(shí)器中斷、WDT中斷、串行接口中斷,中斷可嵌套,除軟件中斷和WDT中斷外可控制中斷源屏蔽。
圖1為本發(fā)明微處理器核的內(nèi)部結(jié)構(gòu)示意圖。
圖2為指令執(zhí)行硬件結(jié)構(gòu)示意圖。
圖3為指令執(zhí)行節(jié)拍流程示意圖。
圖4為內(nèi)存分配和地址映射示意圖。
圖5為本發(fā)明微控制器核的外圍模塊資源配置示意圖。
圖6為復(fù)位電路示意圖。
圖7為中斷處理過(guò)程示意圖。
具體實(shí)施例方式
下面結(jié)合附圖對(duì)本發(fā)明的微處理器的構(gòu)架和實(shí)現(xiàn)方式做詳細(xì)說(shuō)明。
本發(fā)明微處理器核的結(jié)構(gòu)如圖1所示。時(shí)鐘發(fā)生器產(chǎn)生基本時(shí)鐘,并分頻,提供內(nèi)部CPU核和外部外圍器件所需要的時(shí)鐘信號(hào)。程序存儲(chǔ)器與數(shù)據(jù)存儲(chǔ)器有各自的數(shù)據(jù)總線。執(zhí)行時(shí),首先讀取指令碼,然后譯碼。譯碼是根據(jù)微碼的定義,以及尋址方式的不同,將操作數(shù)或者操作碼分別存儲(chǔ)于操作數(shù)寄存器、微指令碼寄存器、內(nèi)存或者特殊功能寄存器(不包括SR區(qū)域)。根據(jù)譯碼后得到的指令的類型,將操作數(shù)或者需要計(jì)算的地址送入ALU進(jìn)行運(yùn)算。然后,存儲(chǔ)運(yùn)算的結(jié)果,寫入寄存器或者內(nèi)存單元。然后再讀入下一字節(jié)的指令,進(jìn)行譯碼、ALU運(yùn)算、回寫存儲(chǔ)數(shù)據(jù),以此類推,直到指令結(jié)束。由于本微處理器的指令集為變長(zhǎng)的CISC指令,每條指令長(zhǎng)度不同,指令周期從1個(gè)機(jī)器周期到10個(gè)機(jī)器周期不等。在指令執(zhí)行的過(guò)程中,要對(duì)每條指令所執(zhí)行到的機(jī)器周期和PC進(jìn)行計(jì)數(shù),以控制指令的運(yùn)行。
指令處理執(zhí)行部分的硬件結(jié)構(gòu)如圖2所示,首先根據(jù)復(fù)位向量找到程序的入口地址,PC指向程序存儲(chǔ)器的程序入口單元,從程序存儲(chǔ)器讀入指令,通過(guò)指令譯碼器進(jìn)行譯碼。如果是操作碼,存入操作碼寄存器;如果是操作數(shù),根據(jù)對(duì)操作碼的判斷確定是寫入數(shù)據(jù)存儲(chǔ)器還是要做為立即數(shù)送入ALU進(jìn)行運(yùn)算。數(shù)據(jù)準(zhǔn)備好后,即可進(jìn)行ALU運(yùn)算操作。運(yùn)算的結(jié)果存入寄存器或者數(shù)據(jù)存儲(chǔ)器單元。當(dāng)執(zhí)行調(diào)用、返回等指令時(shí),會(huì)對(duì)程序指針進(jìn)行壓棧和出棧操作;執(zhí)行跳轉(zhuǎn)等指令時(shí),有指針偏移操作;同時(shí)在每讀下一字節(jié)指令時(shí),會(huì)對(duì)PC有加1的操作。這些構(gòu)成PC的來(lái)源,也是保證程序正常執(zhí)行的關(guān)鍵因素之一。
指令處理的基本時(shí)序如圖3所示。由主時(shí)鐘分頻后獲得的四相時(shí)鐘(CLK1、CLK2、CLK3和CLK4)來(lái)控制。每個(gè)機(jī)器周期根據(jù)4相時(shí)鐘分為4個(gè)節(jié)拍,每一節(jié)拍對(duì)應(yīng)一相時(shí)鐘。對(duì)讀入的每個(gè)微碼在4相時(shí)鐘分別執(zhí)行以下操作CLK1取指譯碼(包括設(shè)置標(biāo)志位和中斷處理)、CLK2讀所需要的寄存器中的數(shù)據(jù)、CLK3進(jìn)行ALU運(yùn)算、CLK4存儲(chǔ)運(yùn)算結(jié)果(包括調(diào)整PC指針)。同時(shí),根據(jù)微碼判斷并記錄當(dāng)前指令總的周期數(shù),并在讀入指令下一個(gè)字節(jié)的時(shí)候遞減,調(diào)整PC,直至當(dāng)前指令的最后一個(gè)周期,指向下一條指令,標(biāo)志位清零,開放中斷,開始執(zhí)行下一條指令。如此循環(huán)操作,直到程序結(jié)束。
本微處理器包括軟件中斷、外部中斷、定時(shí)器中斷、WDT中斷等常用基本中斷??煽刂浦袛嘣雌帘?,其中軟件中斷和WDT中斷不可屏蔽和嵌套。當(dāng)有中斷請(qǐng)求時(shí),設(shè)置中斷請(qǐng)求標(biāo)志并鎖存在中斷鎖存器中,同時(shí)自動(dòng)PC壓棧。執(zhí)行完當(dāng)前指令后,響應(yīng)中斷,設(shè)置中斷使能標(biāo)志使響應(yīng)當(dāng)前中斷過(guò)程中禁止可屏蔽中斷。中斷執(zhí)行完或復(fù)位后,開放鎖存。中斷處理過(guò)程見圖7所示。
本發(fā)明微處理器的指令集為復(fù)雜指令集,數(shù)據(jù)總線寬度為8位,采用單級(jí)流水線處理和執(zhí)行指令,可連續(xù)尋址64K字節(jié)的地址空間。這64K空間分成4個(gè)地址空間,分別為程序存儲(chǔ)器ROM、數(shù)據(jù)存儲(chǔ)器RAM、特殊功能寄存器SR和數(shù)據(jù)緩沖寄存器BR。使用內(nèi)存映射輸入/輸出系統(tǒng),所有的I/O寄存器都映射在SR或者BR地址空間。芯片內(nèi)部共有16組通用寄存器,每組8個(gè),共128個(gè)通用寄存器,分配在RAM地址空間的前128個(gè)字節(jié)。內(nèi)存分配見圖4所示。
為了系統(tǒng)的安全和功耗管理,系統(tǒng)復(fù)位采用多源復(fù)位,如圖6所示。包括上電復(fù)位、軟件復(fù)位、時(shí)鐘檢測(cè)復(fù)位、地址陷阱復(fù)位、WDT復(fù)位。其中上電復(fù)位為大于4個(gè)時(shí)鐘周期的低電平復(fù)位;當(dāng)PC指向RAM或者特殊寄存器SR區(qū)域時(shí),產(chǎn)生地址陷阱復(fù)位信號(hào),重新啟動(dòng)系統(tǒng);WDT在允許工作狀態(tài)下,若CPU沒有按正常工作狀態(tài)清WDT,WDT計(jì)數(shù)溢出時(shí)會(huì)產(chǎn)生復(fù)位信號(hào)。
本發(fā)明處理器內(nèi)核可方便的擴(kuò)展各類通用的外設(shè)和通訊接口,包括同步串行接口、高速串行輸出、I2C總線、LCD驅(qū)動(dòng)器、A/D轉(zhuǎn)換器、定時(shí)器/計(jì)數(shù)器等等,同時(shí)也可根據(jù)微碼定義對(duì)151條指令進(jìn)行擴(kuò)展。一個(gè)微處理器配置外設(shè)資源的應(yīng)用示意圖見圖5所示。
本發(fā)明微處理器的一種典型實(shí)現(xiàn)方式如圖5所示?!?”為系統(tǒng)時(shí)鐘發(fā)生器,產(chǎn)生基本時(shí)鐘。其中包含一個(gè)時(shí)序發(fā)生器,經(jīng)分頻產(chǎn)生主系統(tǒng)時(shí)鐘和外圍設(shè)備的工作時(shí)鐘。可輸出所需要的分頻脈沖到外部端口上,并產(chǎn)生基本定時(shí)、WDT、串口、釋放復(fù)位等系統(tǒng)所需要的各種時(shí)鐘?!?”是本微處理器的CPU核,是本發(fā)明的核心部分。參考圖1,包含指令譯碼器、指令寄存器、ALU、內(nèi)部堆棧、專用寄存器、中斷處理模塊以及讀寫控制電路。系統(tǒng)上電復(fù)位以后,根據(jù)復(fù)位指針從程序存儲(chǔ)器中找到程序的入口地址,以字節(jié)為單位讀入要執(zhí)行的指令并存儲(chǔ)。然后對(duì)指令進(jìn)行譯碼。譯碼時(shí)根據(jù)微碼的定義,執(zhí)行相應(yīng)的操作。微碼的編碼分為兩大類,單字節(jié)編碼和雙字節(jié)編碼。表1是對(duì)每類編碼中每個(gè)字節(jié)微碼含義的解釋。
表1指令微碼定義表
本發(fā)明的微處理器的指令長(zhǎng)度為1-4個(gè)字節(jié),執(zhí)行周期1-10個(gè)不等。根據(jù)譯碼結(jié)果,分為立即數(shù)尋址、直接尋址、寄存器尋址、寄存器間接尋址、隱含尋址、相對(duì)尋址、變址尋址、絕對(duì)尋址、向量尋址、頁(yè)尋址、存儲(chǔ)器位尋址共11種類型。如圖2所示,譯碼后提取出立即數(shù)或者寄存器信息或者RAM的直接地址,通過(guò)多路選擇器進(jìn)入ALU進(jìn)行運(yùn)算,結(jié)果輸出到RAM或者相應(yīng)的寄存器單元。除常規(guī)的PC加1以外,根據(jù)不同的指令對(duì)PC指針進(jìn)行調(diào)整,包括偏移量尋址、內(nèi)部堆棧的地址、跳轉(zhuǎn)指令的地址等。在譯碼器對(duì)讀入的微碼進(jìn)行辨識(shí)以后,除了對(duì)當(dāng)前操作碼或者立即數(shù)進(jìn)行相應(yīng)的操作以外,還要判斷指令總的執(zhí)行周期數(shù)并記錄,以此作為標(biāo)志判斷指令是否執(zhí)行完畢,是否需要清除或者設(shè)置相應(yīng)的標(biāo)志寄存器,以保證系統(tǒng)執(zhí)行時(shí)序的正確性?!?”為系統(tǒng)的復(fù)位電路,包括時(shí)鐘檢測(cè)復(fù)位、地址陷阱復(fù)位、WDT復(fù)位、軟件復(fù)位及外部復(fù)位電路??蓞⒖紙D6所示。除外部上電復(fù)位外,當(dāng)系統(tǒng)時(shí)鐘停止工作,或者PC指針指向非ROM區(qū)域,或者CPU工作不正常而沒有清WDT計(jì)數(shù)器時(shí),會(huì)產(chǎn)生系統(tǒng)復(fù)位信號(hào)使系統(tǒng)復(fù)位?!?”是定時(shí)器/計(jì)數(shù)器,本系統(tǒng)包含兩個(gè)16位和兩個(gè)8位多功能定時(shí)器/計(jì)數(shù)器。“5”是輸入/輸出端口。為雙向端口,且端口可復(fù)用?!?”是ADC與數(shù)字邏輯部分的接口電路。“7”是ADC模塊,本系統(tǒng)為8位8通道的逐次逼近ADC。“8”是中斷控制器。當(dāng)中斷請(qǐng)求發(fā)生并向CPU申請(qǐng)中斷響應(yīng)時(shí),置位中斷鎖存器,在指令執(zhí)行的第一相時(shí)鐘時(shí)檢測(cè)中斷鎖存器,發(fā)現(xiàn)有中斷,響應(yīng)中斷,清中斷使能標(biāo)志和中斷鎖存器,PC自動(dòng)壓棧,根據(jù)向量地址表讀中斷服務(wù)程序的入口地址,寫入PC。然后執(zhí)行中斷服務(wù)程序。返回后,原來(lái)的PC指針自動(dòng)出棧,繼續(xù)執(zhí)行主程序。其時(shí)序圖見圖7所示。“9”是程序存儲(chǔ)器ROM。本微處理器共有16K的EPROM,和數(shù)據(jù)存儲(chǔ)器以及特殊寄存器和數(shù)據(jù)緩沖區(qū)連續(xù)尋址,便于訪問(wèn)?!?0”是監(jiān)視定時(shí)器WDT。在CPU工作不正常時(shí)產(chǎn)生中斷或者內(nèi)部復(fù)位信號(hào),重啟系統(tǒng)使之正常工作,提高了系統(tǒng)可靠性?!?1”是基本定時(shí)器,提供定時(shí),可產(chǎn)生基本定時(shí)器中斷。“12”是時(shí)鐘同步串行接口,用于器件之間的通信,可連續(xù)傳送8個(gè)字節(jié)的數(shù)據(jù)。“13”是靜態(tài)數(shù)據(jù)存儲(chǔ)器RAM。參考圖4,本微處理器有512字節(jié)8位的RAM,其中前128字節(jié)為通用寄存器區(qū)域,包含16組8位通用寄存器。后384字節(jié)為數(shù)據(jù)緩存區(qū)域。堆??稍O(shè)在RAM中通用寄存器以外的任意區(qū)域。當(dāng)PC指向RAM區(qū)域時(shí),會(huì)產(chǎn)生地址陷阱復(fù)位。這里的通用寄存器與特殊寄存器SR是分開的,另外還有數(shù)據(jù)緩沖寄存器BR和程序存儲(chǔ)器ROM。通過(guò)地址映射電路可以連續(xù)的尋址64K地址空間。
本微處理器為CISC結(jié)構(gòu),支持各類常見的微處理器指令。共包含151條基本指令,包括數(shù)據(jù)傳送交換、算術(shù)邏輯運(yùn)算、比較、乘除法、移位、循環(huán)、半字節(jié)操作、位操作、跳轉(zhuǎn)、調(diào)用返回、進(jìn)棧退棧、軟中斷以及空操作類指令。根據(jù)微碼的定義,指令可根據(jù)微碼擴(kuò)展,使用靈活。以下是本發(fā)明的基本指令集。
1、指令mov(1)助記符mov p,q編碼0001 0***1110 10**操作p<-q影響標(biāo)志位JF=1,ZF=z描述將寄存器q的值賦給寄存器p。JF置1;傳送給寄存器p的值為0x00H時(shí)ZF置1,否則清零。
(2)助記符mov p,(x)編碼0001 1111 1010 0***操作p<-(x)
影響標(biāo)志位JF=1,ZF=z描述將內(nèi)存地址為x處的值賦給寄存器p。JF置1;傳送給寄存器p的值為0x00H時(shí)ZF置1,否則清零。
(3)助記符mov p,(HL+)編碼0001 1001 1010 0***操作p<-(HL),HL<-HL+1影響標(biāo)志位JF=1,ZF=z描述將內(nèi)存地址為寄存器組HL內(nèi)容處的值賦給寄存器p,然后HL的內(nèi)容加1。JF置1;傳送給寄存器p的值為0x00H時(shí)ZF置1,否則清零。
(4)助記符mov p,(-HL)編碼0001 1000 1010 0***操作HL<-HL-1,p<-(HL)影響標(biāo)志位JF=1,ZF=z描述先將HL的內(nèi)容減1,再將內(nèi)存地址為寄存器組HL內(nèi)容處的值賦給寄存器置1;傳送給寄存器p的值為0x00H時(shí)ZF置1,否則清零。
(5)助記符mov p,(HL+d)編碼0001 1011 1010 0***操作p<-(HL+d)影響標(biāo)志位JF=1,ZF=z描述將內(nèi)存地址為寄存器組HL內(nèi)容加d處的值賦給寄存器p。JF置1;傳送給寄存器p的值為0x00H時(shí)ZF置1,否則清零。
(6)助記符mov pp,(x)編碼0001 1111 0001 10**操作pp<-(x+1,x)影響標(biāo)志位JF=1描述將內(nèi)存地址為x和x+1處的值賦給寄存器組pp。JF置1。
(7)助記符mov pp,(HL+d)
編碼0001 1011 1110 10**操作pp<-(HL+d+1,HL+d)影響標(biāo)志位JF=1描述將內(nèi)存地址為HL內(nèi)容加d+1和HL內(nèi)容加d處的值賦給寄存器組pp。JF置1。
(8)助記符mov (x),p編碼0000 1111 1010 1***操作(x)<-p影響標(biāo)志位JF=1描述將寄存器p的值賦給內(nèi)存地址為x的內(nèi)存單元。JF置1。
(9)助記符mov (HL+),p編碼0000 1001 1010 1***操作(HL)<-p,HL<-HL+1影響標(biāo)志位JF=1描述將寄存器p的值賦給內(nèi)存地址為HL值的內(nèi)存單元,然后HL的內(nèi)容加1。JF置1。
(10)助記符mov (-HL),p編碼0000 1000 1010 1***操作HL<-HL-1,(HL)<-p影響標(biāo)志位JF=1描述先將HL的內(nèi)容減1,然后將寄存器p的值賦給內(nèi)存地址為HL值的內(nèi)存單元。JF置1。
(11)助記符mov (HL+d),p編碼0000 1011 1010 1***操作(HL+d)<-p影響標(biāo)志位JF=1描述將寄存器p的值賦給內(nèi)存地址為HL+d值的內(nèi)存單元。JF置1。
(12)助記符mov (x),pp
編碼0000 1111 1110 11**操作(x+1,x)<-pp影響標(biāo)志位JF=1描述將寄存器pp的值賦給內(nèi)存地址為x+1和x的內(nèi)存單元。JF置1。
(13)助記符mov (HL+d),pp編碼0000 1011 1110 11**操作(HL+d+1,HL+d)<-pp影響標(biāo)志位JF=1描述將寄存器pp的值賦給內(nèi)存地址為HL內(nèi)容加d+1和HL內(nèi)容加d的內(nèi)存單元。JF置1。
(14)助記符mov (x),(y)編碼1101 1001操作(x)<-(y)影響標(biāo)志位JF=1,ZF=z描述將內(nèi)存地址為y的內(nèi)存單元值賦給內(nèi)存地址為x的內(nèi)存單元。JF置1;如果傳送的數(shù)據(jù)是0x00H,則ZF置1,否則清零。
(15)助記符mov (x),(HL+d)編碼0001 1011 1101 1001操作(x)<-(HL+d)影響標(biāo)志位JF=1描述將內(nèi)存地址為HL內(nèi)容加d的內(nèi)存單元值賦給內(nèi)存地址為x的內(nèi)存單元。JF置1。
(16)助記符mov (HL),(x)編碼0001 1111 1101 1000操作(HL)<-(x)影響標(biāo)志位JF=1;ZF=z
描述將內(nèi)存地址為x的內(nèi)存單元值賦給的內(nèi)存地址為HL內(nèi)容加d的內(nèi)存單元。JF置1;如果傳送的數(shù)據(jù)是0x00H,則ZF置1,否則清零。
(17)助記符mov (HL),(HL+d)編碼0001 1011 1101 1000操作(HL)<-(HL+d)影響標(biāo)志位JF=1;ZF=z描述將內(nèi)存地址為x的內(nèi)存單元值賦給的內(nèi)存地址為HL內(nèi)容加d的內(nèi)存單元。JF置1;如果傳送的數(shù)據(jù)是0x00H,則ZF置1,否則清零。
(18)助記符mov p,n編碼1100 1***操作p<-n影響標(biāo)志位JF=1描述將立即數(shù)n賦給寄存器p。JF置1。
(19)助記符mov SP,mn編碼0000 0101操作SP<-mn影響標(biāo)志位JF=1描述將立即數(shù)mn賦給堆棧指針寄存器SP。JF置1。
(20)助記符mov RBS,n編碼1111 0000 1111操作RBS<-n影響標(biāo)志位JF=1描述將立即數(shù)n賦給寄存器RBS。JF置1。
(21)助記符mov (x),n編碼1101 0011操作(x)<-n影響標(biāo)志位JF=1
描述將立即數(shù)n賦給內(nèi)存地址為x的內(nèi)存單元。JF置1。
(22)助記符mov (HL),n編碼1101 0010操作(HL)<-n影響標(biāo)志位JF=1描述將立即數(shù)n賦給內(nèi)存地址為HL值的內(nèi)存單元。JF置1。
(23)助記符mov (HL+),n編碼0000 1001 1101 0011操作(HL)<-n;HL<-HL+1影響標(biāo)志位JF=1描述將立即數(shù)n賦給內(nèi)存地址為HL值的內(nèi)存單元,然后HL的內(nèi)容加1。JF置1。
(24)助記符mov (-HL),n編碼0000 1001 1101 0011操作HL<-HL-1;(HL)<-n影響標(biāo)志位JF=1描述先將HL的內(nèi)容減1,然后將立即數(shù)n賦給內(nèi)存地址為HL值的內(nèi)存單元。JF置1。
(25)助記符mov (HL+d),n編碼0000 1011 1101 0011操作(HL+d)<-n影響標(biāo)志位JF=1描述將立即數(shù)n賦給內(nèi)存地址為HL值加上d的內(nèi)存單元。JF置1。
2、指令cmp(1)助記符cmp A,(x)編碼1000 0000操作A-(x)影響標(biāo)志位JF=z;ZF=z;CF=c;HF=h
描述比較寄存器A和內(nèi)存地址為x的內(nèi)存單元中的值。JF結(jié)果同ZF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(2)助記符cmp A,(HL+)編碼0001 1001 1000 0000操作A-(HL);HL<-HL+1影響標(biāo)志位JF=z;ZF=z;CF=c;HF=h描述比較寄存器A和內(nèi)存地址為HL的內(nèi)存單元中的值,然后HL內(nèi)容加1。JF結(jié)果同ZF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(3)助記符cmp A,(-HL)編碼0001 1000 1000 0000操作HL<-HL-1;A-(HL)影響標(biāo)志位JF=z;ZF=z;CF=c;HF=h描述先將HL內(nèi)容減1,再比較寄存器A和內(nèi)存地址為HL的內(nèi)存單元中的值。JF結(jié)果同ZF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(4)助記符cmp A,(HL+d)編碼0001 1011 1000 0000操作A-(HL+d)影響標(biāo)志位JF=z;ZF=z;CF=c;HF=h描述比較寄存器A和內(nèi)存地址為HL加d的內(nèi)存單元中的值。JF結(jié)果同ZF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(5)助記符cmp (x),(HL)編碼0001 1111 1001 1000操作(x)-(HL)影響標(biāo)志位JF=z;ZF=z;CF=c;HF=h
描述比較內(nèi)存地址為x和內(nèi)存地址為HL值的內(nèi)存單元中的值。JF結(jié)果同ZF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(6)助記符cmp (HL+d),(HL)編碼00]01 1011 1001 1000操作(HL+d)-(HL)影響標(biāo)志位JF=z;ZF=z;CF=c;HF=h描述比較內(nèi)存地址為HL值加d和內(nèi)存地址為HL值的內(nèi)存單元中的值。JF結(jié)果同ZF;如做減法結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(7)助記符cmp (x),n編碼0001 1111 1000 1000操作(x)-n影響標(biāo)志位JF=z;ZF=z;CF=c;HF=h描述比較內(nèi)存地址為x內(nèi)存單元中的值和立即數(shù)n。JF結(jié)果同ZF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(8)助記符cmp (HL+),n編碼0001 1001 1000 1000操作(HL+)-n;HL<-HL+1影響標(biāo)志位JF=z;ZF=z;CF=c;HF=h描述比較內(nèi)存地址為HL值的內(nèi)存單元中的值和立即數(shù)n,然后HL的內(nèi)容加1。JF結(jié)果同ZF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(9)助記符cmp (-HL),n編碼0001 1000 1000 1000操作HL<-HL-1;(HL)-n影響標(biāo)志位JF=z;ZF=z;CF=c;HF=h
描述先將HL內(nèi)容減1,再比較內(nèi)存地址為HL值的內(nèi)存單元中的值和立即數(shù)n。JF結(jié)果同ZF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第3位借位時(shí)HF置1。
(10)助記符cmp (HL+d),n編碼0001 1011 1000 1000操作(HL+d)-n影響標(biāo)志位JF=z;ZF=z;CF=c;HF=h描述比較內(nèi)存地址為HL加d值的內(nèi)存單元中的值和立即數(shù)n。JF結(jié)果同ZF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
3、指令add(1)助記符add A,(x)編碼1000 0110操作A<-A+(x)影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述內(nèi)存地址為x的內(nèi)存單元中的值加上寄存器A中的值,結(jié)果存放在寄存器A中。JF結(jié)果同ZF;當(dāng)做加法,結(jié)果為0x00H時(shí)ZF置1;最高位存在進(jìn)位CF置1;存在向第4位進(jìn)位時(shí)HF置1。
(2)助記符add A,(HL+)編碼0001 1001 1000 0000操作A<-A+(HL);HL<-HL+1影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述內(nèi)存地址為HL內(nèi)存單元中的值加上寄存器A中的值,結(jié)果存放在寄存器A中,然后HL內(nèi)容加1。JF結(jié)果同CF;當(dāng)做加法,結(jié)果為0x00H時(shí)ZF置1;最高位存在進(jìn)位CF置1;存在從第3位進(jìn)位時(shí)HF置1。
(3)助記符add A,(-HL)編碼0001 1000 1000 0110操作HL<-HL-1;A<-A+(HL)
影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述先將HL內(nèi)容減1,再將內(nèi)存地址為HL內(nèi)存單元中的值加上寄存器A中的值,結(jié)果存放在寄存器A中。JF結(jié)果同CF;當(dāng)做加法,結(jié)果為0x00H時(shí)ZF置1;最高位存在進(jìn)位CF置1;存在從第3位進(jìn)位時(shí)HF置1。
(4)助記符add A,(HL+d)編碼0001 1011 1000 0110操作A<-A+(HL+d)影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述將內(nèi)存地址為HL加d的內(nèi)存單元中的值加寄存器A的值,結(jié)果存放在寄存器A中。JF結(jié)果同CF;當(dāng)做加法,結(jié)果為0x00H時(shí)ZF置1;最高位存在進(jìn)位CF置1;存在從第3位進(jìn)位時(shí)HF置1。
(5)助記符add (x),(HL)編碼0001 1111 1001 1110操作(x)<-(x)+(HL)影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述將內(nèi)存地址為x和內(nèi)存地址為HL內(nèi)存單元中的值相加,結(jié)果存放在內(nèi)存地址為x的內(nèi)存單元中。JF結(jié)果同CF;當(dāng)做加法,結(jié)果為0x00H時(shí)ZF置1;最高位存在進(jìn)位CF置1;存在從第3位進(jìn)位時(shí)HF置1。
(6)助記符add (HL+d),(HL)編碼0001 1011 1001 1110操作(HL+d)<-(HL+d)+(HL)影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述將內(nèi)存地址為x和內(nèi)存地址為HL加d的內(nèi)存單元中的值相加,結(jié)果存放在內(nèi)存地址為HL加d的內(nèi)存單元中。JF結(jié)果同CF;如做加法結(jié)果為0x00H時(shí)ZF置1;最高位存在進(jìn)位CF置1;存在從第3位進(jìn)位時(shí)HF置1。
(7)助記符add (x),n
編碼0001 1111 1000 1110操作(x)-n影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述將內(nèi)存地址為x內(nèi)存單元中的值和立即數(shù)n相加,結(jié)果存放在內(nèi)存地址為x內(nèi)存單元中。JF結(jié)果同CF;當(dāng)做加法,結(jié)果為0x00H時(shí)ZF置1;最高位存在進(jìn)位CF置1;存在從第3位進(jìn)位時(shí)HF置1。
(8)助記符add (HL+),n編碼0001 1001 1000 1110操作(HL)<-(HL)+n;HL<-HL+1影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述將內(nèi)存地址為HL值的內(nèi)存單元中的值和立即數(shù)n相加,結(jié)果存放在內(nèi)存地址為HL值的內(nèi)存單元中,然后HL的內(nèi)容加1。JF結(jié)果同CF;當(dāng)做加法,結(jié)果為0x00H時(shí)ZF置1;最高位存在進(jìn)位CF置1;存在從第3位進(jìn)位時(shí)HF置1。
(9)助記符add (-HL),n編碼0001 1000 1000 1000操作HL<-HL-1;(HL)<-(HL)+n影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述先將HL內(nèi)容減1,然后將內(nèi)存地址為HL值的內(nèi)存單元中的值和立即數(shù)n相加,結(jié)果存放在內(nèi)存地址為HL值的內(nèi)存單元中。JF結(jié)果同CF;當(dāng)做加法,結(jié)果為0x00H時(shí)ZF置1;最高位存在進(jìn)位CF置1;存在從第3位進(jìn)位時(shí)HF置1。
(10)助記符add (HL+d),n編碼0001 1011 1000 1000操作(HL+d)<-(HL)+n影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述將內(nèi)存地址為HL加d的內(nèi)存單元中的值和立即數(shù)n相加,其結(jié)果存放在內(nèi)存地址為HL值的內(nèi)存單元中。JF結(jié)果同CF;當(dāng)做加法,結(jié)果為0x00H時(shí)ZF置1;最高位存在進(jìn)位CF置1;存在從第3位進(jìn)位時(shí)HF置1。
4、指令sub(1)助記符sub A,(x)編碼1000 0100操作A<-A-(x)影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述寄存器A中的值減去內(nèi)存地址為x的內(nèi)存單元中的值,結(jié)果存放在寄存器A中。JF結(jié)果同ZF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在向第4位借位時(shí)HF置1。
(2)助記符sub A,(HL+)編碼0001 1001 1000 0100操作A<-A-(HL);HL<-HL+1影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述寄存器A中的值減去內(nèi)存地址為HL的內(nèi)存單元中的值,結(jié)果存放在寄存器A中,然后HL內(nèi)容加1。JF結(jié)果同CF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(3)助記符sub A,(-HL)編碼0001 1000 1000 0100操作HL<-HL-1;A<-A-(HL)影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述先將HL內(nèi)容減1,然后將寄存器A中的值減去內(nèi)存地址為HL的內(nèi)存單元中的值,結(jié)果存放在寄存器A中。JF結(jié)果同CF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(4)助記符sub A,(HL+d)編碼0001 1011 1000 0100操作A<-A-(HL+d)
影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述寄存器A的值減去內(nèi)存地址為HL加d的內(nèi)存單元中的值,結(jié)果存放在寄存器A中。JF結(jié)果同CF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(5)助記符sub (x),(HL)編碼0001 1111 1001 1100操作(x)<-(x)-(HL)影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述將內(nèi)存地址為x的內(nèi)存單元值減去內(nèi)存地址為HL內(nèi)存單元中值,結(jié)果存放在內(nèi)存地址為x的內(nèi)存單元中。JF結(jié)果同CF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(6)助記符sub (HL+d),(HL)編碼0001 1011 1001 1100操作(HL+d)<-(HL+d)-(HL)影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述將內(nèi)存地址為x的內(nèi)存單元值減去內(nèi)存地址為HL加d的內(nèi)存單元中的值,結(jié)果存放在內(nèi)存地址為HL加d的內(nèi)存單元中。JF結(jié)果同CF;如做減法結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(7)助記符sub (x),n編碼0001 1111 1000 1100操作(x)<-(x)-n影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述將內(nèi)存地址為x內(nèi)存單元中的值減去立即數(shù)n,結(jié)果存放在內(nèi)存地址為x內(nèi)存單元中。JF結(jié)果同CF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(8)助記符sub (HL+),n編碼0001 1001 1000 1100
操作(HL)<-(HL)-n;HL<-HL+1影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述將內(nèi)存地址為HL值的內(nèi)存單元值減去立即數(shù)n,結(jié)果存放在內(nèi)存地址為HL值的內(nèi)存單元中,然后HL的內(nèi)容加1。JF結(jié)果同CF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(9)助記符sub (-HL),n編碼0001 1000 1000 1100操作HL<-HL-1;(HL)<-(HL)-n影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述先將HL內(nèi)容減1,然后將內(nèi)存地址為HL值的內(nèi)存單元值減去立即數(shù)n,結(jié)果存放在內(nèi)存地址為HL值的內(nèi)存單元中。JF結(jié)果同CF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
(10)助記符sub (HL+d),n編碼0001 1011 1000 1100操作(HL+d)<-(HL)-n影響標(biāo)志位JF=c;ZF=z;CF=c;HF=h描述內(nèi)存地址為HL加d的內(nèi)存單元值減去立即數(shù)n,其結(jié)果存放在內(nèi)存地址為HL值的內(nèi)存單元中。JF結(jié)果同CF;當(dāng)做減法,結(jié)果為0x00H時(shí)ZF置1;最高位存在借位CF置1;存在從第4位借位時(shí)HF置1。
5、指令and(1)助記符and A,(x)編碼1000 0011操作A<-A&(x)影響標(biāo)志位JF=z;ZF=z;
描述寄存器A中的值和內(nèi)存地址為x的內(nèi)存單元中的值相與,結(jié)果存放在寄存器A中。JF結(jié)果同ZF;相與的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(2)助記符and A,(HL+)編碼0001 1001 1000 0011操作A<-A&(HL);HL<-HL+1影響標(biāo)志位JF=z;ZF=z;描述寄存器A中的值和內(nèi)存地址為HL的內(nèi)存單元中的值相與,結(jié)果存放在寄存器A中,然后HL內(nèi)容加1。JF結(jié)果同ZF;相與的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(3)助記符and A,(-HL)編碼0001 1000 1000 0011操作HL<-HL-1;A<-A&(HL)影響標(biāo)志位JF=z;ZF=z;描述先將HL內(nèi)容減1,然后將寄存器A中的值和內(nèi)存地址為HL的內(nèi)存單元中的值相與,結(jié)果存放在寄存器A中。JF結(jié)果同ZF;相與的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(4)助記符and A,(HL+d)編碼0001 1011 1000 0011操作A<-A&(HL+d)影響標(biāo)志位JF=z;ZF=z;描述寄存器A的值和內(nèi)存地址為HL加d內(nèi)存單元中的值相與,結(jié)果存放在寄存器A中。JF結(jié)果同ZF;相與的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(5)助記符and (x),(HL)編碼0001 1111 1001 1011操作(x)<-(x)&(HL)影響標(biāo)志位JF=z;ZF=z;
描述將內(nèi)存地址為x的內(nèi)存單元值和內(nèi)存地址為HL內(nèi)存單元中值相與,結(jié)果存放在內(nèi)存地址為x的內(nèi)存單元中。JF結(jié)果同ZF;相與的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(6)助記符and (HL+d),(HL)編碼0001 1011 1001 1011操作(HL+d)<-(HL+d)&(HL)影響標(biāo)志位JF=z;ZF=z;描述將內(nèi)存地址為x的內(nèi)存單元值和內(nèi)存地址為HL加d的內(nèi)存單元中的值相與,結(jié)果存放在內(nèi)存地址為HL加d的內(nèi)存單元中。JF結(jié)果同ZF;相與的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(7)助記符and (x),n編碼0001 1111 1000 1011操作(x)<-(x)&n影響標(biāo)志位JF=z;ZF=z;描述將內(nèi)存地址為x內(nèi)存單元中的值和立即數(shù)n相與,結(jié)果存放在內(nèi)存地址為x內(nèi)存單元中。JF結(jié)果同ZF;相與的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(8)助記符and (HL+),n編碼0001 1001 1000 1011操作(HL)<-(HL)&n;HL<-HL+1影響標(biāo)志位JF=z;ZF=z;描述將內(nèi)存地址為HL值的內(nèi)存單元值和立即數(shù)n相與,結(jié)果存放在內(nèi)存地址為HL值的內(nèi)存單元中,然后HL的內(nèi)容加1。JF結(jié)果同ZF;相與的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(9)助記符and (-HL),n編碼0001 1000 1000 1011操作HL<-HL-1;(HL)<-(HL)&n影響標(biāo)志位JF=z;ZF=z;
描述先將HL內(nèi)容減1,然后將內(nèi)存地址為HL值的內(nèi)存單元值和立即數(shù)n相與,其結(jié)果存放在內(nèi)存地址為HL值的內(nèi)存單元中。JF結(jié)果同ZF;相與的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(10)助記符and (HL+d),n編碼0001 1011 1000 1011操作(HL+d)<-(HL)&n影響標(biāo)志位JF=z;ZF=z;描述將內(nèi)存地址為HL加d的內(nèi)存單元值和立即數(shù)n相與,其結(jié)果存放在內(nèi)存地址為HL值的內(nèi)存單元中。JF結(jié)果同ZF;相與的結(jié)果為0x00H時(shí)ZF置1,否則清零。
6、指令or(1)助記符or A,(x)編碼1000 0001操作A<-A|(x)影響標(biāo)志位JF=z;ZF=z;描述寄存器A中的值和內(nèi)存地址為x的內(nèi)存單元中的值相或,結(jié)果存放在寄存器A中。JF結(jié)果同ZF;相或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(2)助記符or A,(HL+)編碼0001 1001 1000 0001操作A<-A|(HL);HL<-HL+1影響標(biāo)志位JF=z;ZF=z;描述寄存器A中的值和內(nèi)存地址為HL的內(nèi)存單元中的值相或,結(jié)果存放在寄存器A中,然后HL內(nèi)容加1。JF結(jié)果同ZF;相或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(3)助記符or A,(-HL)編碼0001 1000 1000 0001操作HL<-HL-1;A<-A|(HL)影響標(biāo)志位JF=z;ZF=z;
描述先將HL內(nèi)容減1,然后將寄存器A中的值和內(nèi)存地址為HL的內(nèi)存單元中的值相或,結(jié)果存放在寄存器A中。JF結(jié)果同ZF;相或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(4)助記符or A,(HL+d)編碼0001 1011 1000 0001操作A<-A|(HL+d)影響標(biāo)志位JF=z;ZF=z;描述寄存器A的值和內(nèi)存地址為HL加d內(nèi)存單元中的值相或,結(jié)果存放在寄存器A中。JF結(jié)果同ZF;相或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(5)助記符or (x),(HL)編碼0001 1111 1001 1001操作(x)<-(x)|(HL)影響標(biāo)志位JF=z;ZF=z;描述將內(nèi)存地址為x的內(nèi)存單元值和內(nèi)存地址為HL內(nèi)存單元中值相或,結(jié)果存放在內(nèi)存地址為x的內(nèi)存單元中。JF結(jié)果同ZF;相或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(6)助記符or (HL+d),(HL)編碼0001 1011 1001 1001操作(HL+d)<-(HL+d)|(HL)影響標(biāo)志位JF=z;ZF=z;描述將內(nèi)存地址為x的內(nèi)存單元值和內(nèi)存地址為HL加d的內(nèi)存單元中的值相或,結(jié)果存放在內(nèi)存地址為HL加d的內(nèi)存單元中。JF結(jié)果同ZF;相或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(7)助記符or (x),n編碼0001 1111 1000 1001操作(x)<-(x)|n影響標(biāo)志位JF=z;ZF=z;
描述將內(nèi)存地址為x內(nèi)存單元中的值和立即數(shù)n相或,結(jié)果存放在內(nèi)存地址為x內(nèi)存單元中。JF結(jié)果同ZF;相或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(8)助記符or (HL+),n編碼0001 1001 1000 1001操作(HL)<-(HL)|n;HL<-HL+1影響標(biāo)志位JF=z;ZF=z;描述將內(nèi)存地址為HL值的內(nèi)存單元值和立即數(shù)n相或,結(jié)果存放在內(nèi)存地址為HL值的內(nèi)存單元中,然后HL的內(nèi)容加1。JF結(jié)果同ZF;相或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(9)助記符or (-HL),n編碼0001 1000 1000 1001操作HL<-HL-1;(HL)<-(HL)|n影響標(biāo)志位JF=z;ZF=z;描述先將HL內(nèi)容減1,然后將內(nèi)存地址為HL值的內(nèi)存單元值和立即數(shù)n相或,其結(jié)果存放在內(nèi)存地址為HL值的內(nèi)存單元中。JF結(jié)果同ZF;相或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(10)助記符or (HL+d),n編碼0001 1011 1000 1001操作(HL+d)<-(HL)|n影響標(biāo)志位JF=z;ZF=z;描述將內(nèi)存地址為HL加d的內(nèi)存單元值和立即數(shù)n相或,其結(jié)果存放在內(nèi)存地址為HL值的內(nèi)存單元中。JF結(jié)果同ZF;相或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
7、指令xor(1)助記符xor A,(x)編碼1000 0010操作A<-A xor(x)影響標(biāo)志位JF=z;ZF=z;
描述寄存器A中的值和內(nèi)存地址為x內(nèi)存單元中的值相異或,結(jié)果存放在寄存器A中。JF結(jié)果同ZF;相異或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(2)助記符xor A,(HL+)編碼0001 1001 1000 0010操作A<-A xor(HL);HL<-HL+1影響標(biāo)志位JF=z;ZF=z;描述寄存器A中的值和內(nèi)存地址為HL內(nèi)存單元中的值相異或,結(jié)果存放在寄存器A中,然后HL內(nèi)容加1。JF結(jié)果同ZF;相異或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(3)助記符xor A,(-HL)編碼0001 1000 1000 0010操作HL<-HL-1;A<-A xor(HL)影響標(biāo)志位JF=z;ZF=z;描述先將HL內(nèi)容減1,然后將寄存器A中的值和內(nèi)存地址為HL的內(nèi)存單元中的值相異或,結(jié)果存放在寄存器A中。JF結(jié)果同ZF;相異或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(4)助記符xor A,(HL+d)編碼0001 1011 1000 0010操作A<-A xor(HL+d)影響標(biāo)志位JF=z;ZF=z;描述寄存器A的值和內(nèi)存地址為HL加d內(nèi)存單元的值相異或,結(jié)果存放在寄存器A中。JF結(jié)果同ZF;相異或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(5)助記符xor (x),(HL)編碼0001 1111 1001 1010操作(x)<-(x)xor(HL)影響標(biāo)志位JF=z;ZF=z;
描述將內(nèi)存地址為x的內(nèi)存單元值和內(nèi)存地址為HL內(nèi)存單元中值相異或,結(jié)果存放在內(nèi)存地址為x的內(nèi)存單元中。JF結(jié)果同ZF;相異或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(6)助記符xor (HL+d),(HL)編碼0001 1011 1001 1010操作(HL+d)<-(HL+d)xor(HL)影響標(biāo)志位JF=z;ZF=z;描述將內(nèi)存地址為x的內(nèi)存單元值和內(nèi)存地址為HL加d的內(nèi)存單元中的值相異或,結(jié)果存放在內(nèi)存地址為HL加d的內(nèi)存單元中。JF結(jié)果同ZF;相異或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(7)助記符xor (x),n編碼0001 1111 1000 1010操作(x)<-(x)xor n影響標(biāo)志位JF=z;ZF=z;描述將內(nèi)存地址為x內(nèi)存單元中的值和立即數(shù)n相異或,結(jié)果存放在內(nèi)存地址為x內(nèi)存單元中。JF結(jié)果同ZF;相異或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(8)助記符xor (HL+),n編碼0001 1001 1000 1010操作(HL)<-(HL)xor n;HL<-HL+1影響標(biāo)志位JF=z;ZF=z;描述將內(nèi)存地址為HL值的內(nèi)存單元值和立即數(shù)n相異或,結(jié)果存放在內(nèi)存地址為HL的內(nèi)存單元中,然后HL內(nèi)容加1。JF結(jié)果同ZF;相異或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(9)助記符xor (-HL),n編碼0001 1000 1000 1010操作HL<-HL-1;(HL)<-(HL)xor n影響標(biāo)志位JF=z;ZF=z;
描述先將HL內(nèi)容減1,然后將內(nèi)存地址為HL值的內(nèi)存單元值和立即數(shù)n相異或,其結(jié)果存放在內(nèi)存地址為HL值的內(nèi)存單元中。JF結(jié)果同ZF;相異或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
(10)助記符xor (HL+d),n編碼0001 1011 1000 1010操作(HL+d)<-(HL)xor n影響標(biāo)志位JF=z;ZF=z;描述將內(nèi)存地址為HL加d的內(nèi)存單元值和立即數(shù)n相異或,結(jié)果存放在內(nèi)存地址為HL值的內(nèi)存單元中。JF結(jié)果同ZF;相異或的結(jié)果為0x00H時(shí)ZF置1,否則清零。
8、指令daa(1)助記符daa p編碼0001 0*** 1111 0101操作加法指令結(jié)果的16進(jìn)制->BCD碼影響標(biāo)志位JF=c,ZF=z,CF=c,HF=h描述執(zhí)行完加法指令后,把寄存器p中的16進(jìn)制結(jié)果進(jìn)行十進(jìn)制調(diào)整,產(chǎn)生BCD碼。調(diào)整后的結(jié)果仍回寫到寄存器p。
9、指令dsa(1)助記符dsa p編碼0001 0*** 1111 0100操作減法指令結(jié)果的16進(jìn)制->BCD碼影響標(biāo)志位JF=c,ZF=z,CF=c,HF=h描述執(zhí)行完減法指令后,把寄存器p中的16進(jìn)制結(jié)果進(jìn)行十進(jìn)制調(diào)整,產(chǎn)生BCD碼。調(diào)整后的結(jié)果仍回寫到寄存器p。
10、指令mul(1)助記符mul w,a編碼1111 1101操作w*a->wa影響標(biāo)志位JF=z,ZF=z
描述寄存器w與累加器a中的無(wú)符號(hào)數(shù)相乘,結(jié)果的高字節(jié)回寫到w,低字節(jié)回寫到a。當(dāng)高字節(jié)為0時(shí),標(biāo)志JF和ZF置1;否則清0。
11、指令div(1)助記符div wa,c編碼1111 1100操作wa÷c(商)->a,余數(shù)->w影響標(biāo)志位JF=z,ZF=z,CF=c描述寄存器對(duì)wa與寄存器c中的無(wú)符號(hào)數(shù)相除,商寫到a,余數(shù)寫到w。余數(shù)為0時(shí),標(biāo)志JF和ZF置1;否則清0。如果除數(shù)寄存器c中的數(shù)據(jù)為0,或者相除后商大于100H,標(biāo)志CF置1;否則清0。
12、指令shlcf(1)助記符shlcf p編碼0001 0*** 1110 0011操作參見下列描述影響標(biāo)志位JF=p[7],ZF=z,CF=p[7]描述寄存器p中的數(shù)據(jù)左移一位,原最高位p[7]寫到標(biāo)志位CF中,最低位補(bǔ)0。具體操作參見附圖M-1。標(biāo)志JF和CF等于寄存器原數(shù)據(jù)的最高位。如果移位后寄存器中的數(shù)據(jù)為0,則標(biāo)志ZF置1,否則清0。
13、指令shrcf(1)助記符shrcf p編碼0001 0*** 1110 0010操作參見下列描述影響標(biāo)志位JF=p
,ZF=z,CF=p
描述寄存器p中的數(shù)據(jù)右移一位,原最低位p
寫到標(biāo)志位CF中,最高位補(bǔ)0。具體操作參見附圖M-2。標(biāo)志JF和CF等于寄存器原數(shù)據(jù)的最低位。如果移位后寄存器中的數(shù)據(jù)為0,則標(biāo)志ZF置1,否則清0。
14、指令rshlcf(1)助記符rshlcf p編碼0001 0*** 1110 0001操作參見下列描述影響標(biāo)志位JF=p[7],ZF=z,CF=p[7]描述寄存器p中的數(shù)據(jù)和標(biāo)志位CF循環(huán)左移一位,寄存器原最高位p[7]寫到標(biāo)志位CF中,原標(biāo)志位CF寫到寄存器最低位p
。具體操作參見附圖M-3。標(biāo)志JF和CF等于寄存器原數(shù)據(jù)的最高位。如果移位后寄存器中的數(shù)據(jù)為0,則標(biāo)志ZF置1,否則清0。
15、指令rshrcf(1)助記符rshrcf p編碼0001 0*** 1110 0000操作參見下列描述影響標(biāo)志位JF=p
,ZF=z,CF=p
描述寄存器p中的數(shù)據(jù)和標(biāo)志位CF循環(huán)右移一位,寄存器原最低位p
寫到標(biāo)志位CF中,原標(biāo)志位CF寫到寄存器最高位p[7]。具體操作參見附圖M-4。標(biāo)志JF和CF等于寄存器原數(shù)據(jù)的最低位。如果移位后寄存器中的數(shù)據(jù)為0,則標(biāo)志ZF置1,否則清0。
16、指令swap(1)助記符swap p編碼0001 0*** 1111 1110操作 影響標(biāo)志位JF=1描述寄存器p中的高、低半位元組交換位置。標(biāo)志JF置1。
17、指令rshlm(1)助記符rshlm a,(x)編碼0001 1111 1111 0111
操作參見下列描述影響標(biāo)志位JF=1描述累加器a的低半位元組和直接尋址單元數(shù)據(jù)的高、低半位元組循環(huán)左移,具體操作參見附圖M-5。標(biāo)志JF置1。
(2)助記符rshlm a,(HL+)編碼0001 1001 1111 0111操作參見下列描述影響標(biāo)志位JF=1描述累加器a的低半位元組和由HL間接尋址單元數(shù)據(jù)的高、低半位元組循環(huán)左移,具體操作參見附圖M-6。移位操作完成后,HL的內(nèi)容累加1。標(biāo)志JF置1。
(3)助記符rshlm a,(-HL)編碼0001 1000 1111 0111操作參見下列描述影響標(biāo)志位JF=1描述HL的內(nèi)容遞減1。累加器a的低半位元組和由HL遞減后間接尋址單元數(shù)據(jù)的高、低半位元組循環(huán)左移,具體操作參見附圖M-7。標(biāo)志JF置1。
(4)助記符rshlm a,(HL+d)編碼0001 1011 1111 0111操作參見下列描述影響標(biāo)志位JF=1描述累加器a的低半位元組和由HL帶偏移量間接尋址單元數(shù)據(jù)的高、低半位元組循環(huán)左移,具體操作參見附圖M-8。標(biāo)志JF置1。
18、指令rshrm(1)助記符rshrm a,(x)編碼0001 1111 1111 0110操作參見下列描述影響標(biāo)志位JF=1
描述累加器a的低半位元組和直接尋址單元數(shù)據(jù)的高、低半位元組循環(huán)右移,具體操作參見附圖M-9。標(biāo)志JF置1。
(2)助記符rshrm a,(HL+)編碼0001 1001 1111 0110操作參見下列描述影響標(biāo)志位JF=1描述累加器a的低半位元組和由HL間接尋址單元數(shù)據(jù)的高、低半位元組循環(huán)右移,具體操作參見附圖M-10。移位操作完成后,HL的內(nèi)容累加1。標(biāo)志JF置1。
(3)助記符rshrm a,(-HL)編碼0001 1000 1111 0110操作參見下列描述影響標(biāo)志位JF=1描述HL的內(nèi)容遞減1。累加器a的低半位元組和由HL遞減后間接尋址單元數(shù)據(jù)的高、低半位元組循環(huán)右移,具體操作參見附圖M-11。標(biāo)志JF置1。
(4)助記符rshrm a,(HL+d)編碼0001 1011 1111 0110操作參見下列描述影響標(biāo)志位JF=1描述累加器a的低半位元組和由HL帶偏移量間接尋址單元數(shù)據(jù)的高、低半位元組循環(huán)右移,具體操作參見附圖M-12。標(biāo)志JF置1。
19、指令clrb(1)助記符clrb (x).b編碼1011 0***操作(x).b->ZF,0->(x).b影響標(biāo)志位JF=z,ZF=(x).b
描述將直接尋址單元的b位取反后寫到標(biāo)志ZF,之后將該位清0。標(biāo)志JF同ZF。
(2)助記符clrb (HL+).b編碼0001 1001 1011 0***操作(HL).b->ZF,0->(HL).b,HL+1->HL影響標(biāo)志位JF=z,ZF=(HL).b描述將寄存器對(duì)HL間接尋址單元的b位取反后寫到標(biāo)志ZF,之后將該位清0,最后把寄存器對(duì)HL中的數(shù)據(jù)累加1。標(biāo)志JF同ZF。
(3)助記符clrb (-HL).b編碼0001 1000 1011 0***操作HL-1->HL,(HL).b->ZF,0->(HL).b影響標(biāo)志位JF=z,ZF=(HL-1).b描述先把寄存器對(duì)HL中的數(shù)據(jù)遞減1,再將寄存器對(duì)HL間接尋址單元的b位取反后寫到標(biāo)志ZF,之后將該位清0。標(biāo)志JF同ZF。
(4)助記符clrb (HL+d).b編碼0001 1011 1011 0***操作(HL+d).b->ZF,0->(HL+d).b影響標(biāo)志位JF=z,ZF=(HL+d).b描述將寄存器對(duì)HL帶偏移量間接尋址單元的b位取反后寫到標(biāo)志ZF,之后將該位清0。標(biāo)志JF同ZF。
20、指令setb(1)助記符setb (x).b編碼1011 1***操作(x).b->ZF,1->(x).b影響標(biāo)志位JF=z,ZF=(x).b描述將直接尋址單元的b位取反后寫到標(biāo)志ZF,之后將該位置1。標(biāo)志JF同ZF。
(2)助記符setb (HL+).b編碼0001 1001 1011 1***
操作(HL).b->ZF,1->(HL).b,HL+1->HL影響標(biāo)志位JF=z,ZF=(HL).b描述將寄存器對(duì)HL間接尋址單元的b位取反后寫到標(biāo)志ZF,之后將該位置1,最后把寄存器對(duì)HL中的數(shù)據(jù)累加1。標(biāo)志JF同ZF。
(3)助記符setb (-HL).b編碼0001 1000 1011 1***操作HL-1->HL,(HL).b->ZF,1->(HL).b影響標(biāo)志位JF=z,ZF=(HL-1).b描述先把寄存器對(duì)HL中的數(shù)據(jù)遞減1,再將寄存器對(duì)HL間接尋址單元的b位取反后寫到標(biāo)志ZF,之后將該位置1。標(biāo)志JF同ZF。
(4)助記符setb (HL+d).b編碼0001 1011 1011 1***操作(HL+d).b->ZF,1->(HL+d).b影響標(biāo)志位JF=z,ZF=(HL+d).b描述將寄存器對(duì)HL帶偏移量間接尋址單元的b位取反后寫到標(biāo)志ZF,之后將該位置1。標(biāo)志JF同ZF。
21、指令cplb(1)助記符cplb (x).b編碼0001 1111 0011 1***操作(x).b->ZF,(x).b->(x).b影響標(biāo)志位JF=z,ZF=(x).b描述將直接尋址單元的b位取反后寫到標(biāo)志ZF,并將該位取反后回寫。標(biāo)志JF同ZF。
(2)助記符cplb (HL+).b編碼0001 1001 0011 1***操作(HL).b->ZF,(HL).b->(HL).b,HL+1->HL影響標(biāo)志位JF=z,ZF=(HL).b
描述將寄存器對(duì)HL間接尋址單元的b位取反后寫到標(biāo)志ZF,并將該位取反后回寫,最后把寄存器對(duì)HL中的數(shù)據(jù)累加1。標(biāo)志JF同ZF。
(3)助記符cplb (-HL).b編碼0001 1000 0011 1***操作HL-1->HL,(HL).b->ZF,(HL).b->(HL).b影響標(biāo)志位JF=z,ZF=(HL-1).b描述先把寄存器對(duì)HL中的數(shù)據(jù)遞減1,再將寄存器對(duì)HL間接尋址單元的b位取反后寫到標(biāo)志ZF,并將該位取反后回寫。標(biāo)志JF同ZF。
(4)助記符cplb (HL+d).b編碼0001 1011 0011 1***操作(HL+d).b->ZF,(HL+d).b->(HL+d).b影響標(biāo)志位JF=z,ZF=(HL+d).b描述將寄存器對(duì)HL帶偏移量間接尋址單元的b位取反后寫到標(biāo)志ZF,并將該位取反后回寫。標(biāo)志JF同ZF。
22、指令movb(1)助記符movb cf,(x).b編碼0010 0***操作(x).b->CF影響標(biāo)志位JF=c,CF=(x).b描述將直接尋址單元的b位寫到標(biāo)志CF。標(biāo)志JF與CF相反。
(2)助記符movb cf,(HL+).b編碼0001 1001 0010 0***操作(HL).b->CF,HL+1->HL影響標(biāo)志位JF=c,CF=(HL).b描述將寄存器對(duì)HL間接尋址單元的b位寫到標(biāo)志CF,并把寄存器對(duì)HL中的數(shù)據(jù)累加1。標(biāo)志JF與CF相反。
(3)助記符movb cf,(-HL).b
編碼0001 1000 0010 0***操作HL-1->HL,(HL).b->CF影響標(biāo)志位JF=c,CF=(HL-1).b描述先把寄存器對(duì)HL中的數(shù)據(jù)遞減1,再將寄存器對(duì)HL間接尋址單元的b位寫到標(biāo)志CF,標(biāo)志JF與CF相反。
(4)助記符movb cf,(HL+d).b編碼0001 1011 0010 0***操作(HL+d).b->CF影響標(biāo)志位JF=c,CF=(HL+d).b描述將寄存器對(duì)HL帶偏移量間接尋址單元的b位寫到標(biāo)志CF。標(biāo)志JF與CF相反。
(5)助記符movb (x).b,cf編碼0001 1111 0011 0***操作CF->(x).b影響標(biāo)志位JF=1描述將標(biāo)志CF寫到直接尋址單元的b位。標(biāo)志JF置1。
(6)助記符movb (HL+).b,cf編碼0001 1001 0011 0***操作CF->(HL).b,HL+1->HL影響標(biāo)志位JF=1描述將標(biāo)志CF寫到寄存器對(duì)HL間接尋址單元的b位,并把寄存器對(duì)HL中的數(shù)據(jù)累加1。標(biāo)志JF置1。
(7)助記符movb (-HL).b,cf編碼0001 1000 0011 0***操作HL-1->HL,CF->(HL).b影響標(biāo)志位JF=1描述先把寄存器對(duì)HL中的數(shù)據(jù)遞減1,再將標(biāo)志CF寫到寄存器對(duì)HL間接尋址單元的b位,標(biāo)志JF置1。
(8)助記符movb (HL+d).b,cf
編碼0001 1011 0011 0***操作CF->(HL+d).b影響標(biāo)志位JF=1描述將標(biāo)志CF寫到寄存器HL帶偏移量間接尋址單元的b位,標(biāo)志JF置1。
23、指令xorb(1)助記符xorb cf,(x).b編碼0001 1111 0010 1***操作CF XOR(x).b->CF影響標(biāo)志位JF=c,CF=CF XOR(x).b描述將標(biāo)志CF與直接尋址單元的b位相異或,結(jié)果回寫到標(biāo)志CF。標(biāo)志JF與CF相反。
(2)助記符xorb cf,(HL+).b編碼0001 1001 0010 1***操作CF XOR(HL).b->CF,HL+1->HL影響標(biāo)志位JF=c,CF=CF XOR(HL).b描述將標(biāo)志CF與寄存器對(duì)HL間接尋址單元的b位相異或,結(jié)果回寫到標(biāo)志CF,并把寄存器對(duì)HL中的數(shù)據(jù)累加1。標(biāo)志JF與CF相反。
(3)助記符xorb cf,(-HL).b編碼0001 1000 0010 1***操作HL-1->HL,CF XOR(HL).b->CF影響標(biāo)志位JF=c,CF=CF XOR(HL-1).b描述先把寄存器對(duì)HL中的數(shù)據(jù)遞減1,再將標(biāo)志CF與寄存器對(duì)HL間接尋址單元的b位相異或,結(jié)果回寫到標(biāo)志CF,標(biāo)志JF與CF相反。
(4)助記符xorb cf,(HL+d).b編碼0001 1011 0010 1***操作CF XOR(HL+d).b->CF
影響標(biāo)志位JF=c,CF=CF XOR(HL+d).b描述將標(biāo)志CF與寄存器對(duì)HL帶偏移量間接尋址單元的b位相異或,結(jié)果回寫到標(biāo)志CF。標(biāo)志JF與CF相反。
24、指令sjt(1)助記符sjt d編碼011* ****操作參見下列描述影響標(biāo)志位JF=1描述該指令跳轉(zhuǎn)范圍是向前15字節(jié)或退回16字節(jié)。如果標(biāo)志JF為1,則程序跳轉(zhuǎn)到當(dāng)前指令首地址的d+2偏移量處,即程序計(jì)數(shù)器PC增加d;否則程序無(wú)跳轉(zhuǎn)。標(biāo)志JF置1。
25、指令sjf(1)助記符sjf d編碼010* ****操作參見下列描述影響標(biāo)志位JF=1描述該指令跳轉(zhuǎn)范圍是向前15字節(jié)或退回16字節(jié)。如果標(biāo)志JF為0,則程序跳轉(zhuǎn)到當(dāng)前指令首地址的d+2偏移量處,即程序計(jì)數(shù)器PC增加d;否則程序無(wú)跳轉(zhuǎn)。標(biāo)志JF置1。
26、指令jt(1)助記符jt d編碼0010 1001操作參見下列描述影響標(biāo)志位JF=1描述該指令跳轉(zhuǎn)范圍是向前127字節(jié)或退回128字節(jié)。如標(biāo)志JF為1,則程序跳轉(zhuǎn)到當(dāng)前指令首地址的d+2偏移量處,即程序計(jì)數(shù)器PC增加d;否則程序無(wú)跳轉(zhuǎn)。標(biāo)志JF置1。
27、指令jf(1)助記符jf d
編碼0010 1000操作參見下列描述影響標(biāo)志位JF=1描述該指令跳轉(zhuǎn)范圍是向前127字節(jié)或退回128字節(jié)。如標(biāo)志JF為0,則程序跳轉(zhuǎn)到當(dāng)前指令首地址的d+2偏移量處,即程序計(jì)數(shù)器PC增加d;否則程序無(wú)跳轉(zhuǎn)。標(biāo)志JF置1。
28、指令jz(1)助記符jz d編碼0010 1111操作參見下列描述影響標(biāo)志位JF=1描述該指令跳轉(zhuǎn)范圍是向前127字節(jié)或退回128字節(jié)。如標(biāo)志ZF為1,則程序跳轉(zhuǎn)到當(dāng)前指令首地址的d+2偏移量處,即程序計(jì)數(shù)器PC增加d;否則程序無(wú)跳轉(zhuǎn)。標(biāo)志JF置1。
29、指令jnz(1)助記符jnz d編碼0010 1110操作參見下列描述影響標(biāo)志位JF=1描述該指令跳轉(zhuǎn)范圍是向前127字節(jié)或退回128字節(jié)。如標(biāo)志ZF為0,則程序跳轉(zhuǎn)到當(dāng)前指令首地址的d+2偏移量處,即程序計(jì)數(shù)器PC增加d;否則程序無(wú)跳轉(zhuǎn)。標(biāo)志JF置1。
30、指令jc(1)助記符jc d編碼0010 1101操作參見下列描述影響標(biāo)志位JF=1
描述該指令跳轉(zhuǎn)范圍是向前127字節(jié)或退回128字節(jié)。如標(biāo)志CF為1,則程序跳轉(zhuǎn)到當(dāng)前指令首地址的d+2偏移量處,即程序計(jì)數(shù)器PC增加d;否則程序無(wú)跳轉(zhuǎn)。標(biāo)志JF置1。
31、指令jnc(1)助記符jnc d編碼0010 1100操作參見下列描述影響標(biāo)志位JF=1描述該指令跳轉(zhuǎn)范圍是向前127字節(jié)或退回128字節(jié)。如標(biāo)志CF為0,則程序跳轉(zhuǎn)到當(dāng)前指令首地址的d+2偏移量處,即程序計(jì)數(shù)器PC增加d;否則程序無(wú)跳轉(zhuǎn)。標(biāo)志JF置1。
32、指令jmp(1)助記符jmp xy編碼0000 0001操作xy->PC影響標(biāo)志位JF=1描述程序跳轉(zhuǎn)到地址為16位立即數(shù)xy的指令存貯單元。即將立即數(shù)xy賦值給程序計(jì)數(shù)器PC。標(biāo)志JF置1。
(2)助記符jmp(x)編碼0001 1111 0000 0001操作(x+1,x)->PC影響標(biāo)志位JF=1描述程序跳轉(zhuǎn)到地址為內(nèi)存單元(x+1,x)內(nèi)容的指令存貯單元。即將內(nèi)存單元(x+1,x)中的數(shù)據(jù)賦值給程序計(jì)數(shù)器PC。標(biāo)志JF置1。
(3)助記符jmp (hl+d)編碼0001 1011 0000 0001操作(hl+d+1,hl+d)->PC影響標(biāo)志位JF=1
描述程序跳轉(zhuǎn)到地址為存貯單元(hl+d+1,hl+d)內(nèi)容的指令存貯單元。即將存貯單元(hl+d+1,hl+d)中的數(shù)據(jù)賦值給程序計(jì)數(shù)器PC。標(biāo)志JF置1。
33、指令calv(1)助記符calv d編碼0011 ****操作PC-1->(SP,SP-1),SP-2->SP,(FFC1+d*2,F(xiàn)FC0+d*2)->PC影響標(biāo)志位無(wú)描述該指令為矢量調(diào)用指令,可訪問(wèn)16個(gè)不同的子程序。首先將程序計(jì)數(shù)器PC的當(dāng)前值減1后壓棧,同時(shí)把棧頂指針減2,然后將矢量表單元對(duì)(d*2+FFC1,d*2+FFC0)中的16位數(shù)據(jù)賦給PC,程序跳轉(zhuǎn)到此時(shí)PC指向的地址,即所調(diào)用子程序的首地址。
34、指令calp(1)助記符calp d編碼0000 0010操作PC->(SP,SP-1),SP-2->SP,F(xiàn)F00+d->PC影響標(biāo)志位無(wú)描述該指令為頁(yè)面調(diào)用指令。首先將程序計(jì)數(shù)器PC的當(dāng)前值壓棧,同時(shí)棧頂指針減2,然后將頁(yè)面首地址FF00加上偏移量d賦給PC,程序跳轉(zhuǎn)到此時(shí)PC指向的地址,即所調(diào)用子程序的首地址。
35、指令cal(1)助記符cal xy編碼0000 0011操作PC+1->(SP,SP-1),SP-2->SP,xy->PC影響標(biāo)志位無(wú)描述首先將程序計(jì)數(shù)器PC的當(dāng)前值加1后壓棧,同時(shí)棧頂指針減2,然后將16位數(shù)據(jù)xy賦給PC,程序跳轉(zhuǎn)到此時(shí)PC指向的地址,即所調(diào)用子程序的首地址。
(2)助記符cal (x)
編碼0001 1111 0000 0011操作PC+1->(SP,SP-1),SP-2->SP,(x+1,x)->PC影響標(biāo)志位無(wú)描述首先將程序計(jì)數(shù)器PC的當(dāng)前值加1后壓棧,同時(shí)棧頂指針減2,然后將內(nèi)存單元(x+1,x)中的16位數(shù)據(jù)賦給PC,程序跳轉(zhuǎn)到此時(shí)PC指向的地址,即所調(diào)用子程序的首地址。
(3)助記符cal (hl+d)編碼0001 1011 0000 0011操作PC+1->(SP,SP-1),SP-2->SP,(hl+d+1,hl+d)->PC影響標(biāo)志位無(wú)描述首先將程序計(jì)數(shù)器PC的當(dāng)前值加1后壓棧,同時(shí)棧頂指針減2,然后將存貯單元(hl+d+1,hl+d)中的16位數(shù)據(jù)賦給PC,程序跳轉(zhuǎn)到此時(shí)PC指向的地址,即所調(diào)用子程序的首地址。
36、指令ret(1)助記符ret編碼1111 1010操作SP+2->SP,(SP,SP-1)->PC影響標(biāo)志位無(wú)描述該指令為子程序調(diào)用返回指令。首先將棧頂指針加2,然后將堆棧單元(SP,SP-1)中的數(shù)據(jù)賦給PC,程序跳轉(zhuǎn)到此時(shí)PC指向的地址,即執(zhí)行調(diào)用子程序指令的下一條指令。
37、指令reti(1)助記符reti編碼1111 1011操作SP+3->SP,(SP-1,SP-2)->PC,(SP)->PSW影響標(biāo)志位參見下列描述描述該指令為可屏蔽中斷服務(wù)程序返回指令。首先將棧頂指針加3,然后將堆棧單元(SP-1,SP-2)中的數(shù)據(jù)賦給PC,同時(shí)將堆棧單元(SP)中的數(shù)據(jù)賦給程序狀態(tài)字PSW,程序跳轉(zhuǎn)到此時(shí)PC指向的地址,即執(zhí)行中斷發(fā)生時(shí)將要執(zhí)行的下一條指令。此時(shí)各狀態(tài)標(biāo)志位(JF,ZF,CF,HF)恢復(fù)為中斷服務(wù)程序執(zhí)行前的數(shù)值。
38、指令retn(1)助記符retn編碼0001 0111 1111 1011操作SP+3->SP,(SP-1,SP-2)->PC,(SP)->PSW影響標(biāo)志位參見下列描述描述該指令為不可屏蔽中斷服務(wù)程序返回指令。首先將棧頂指針加3,然后將堆棧單元(SP-1,SP-2)中的數(shù)據(jù)賦給PC,同時(shí)將堆棧單元(SP)中的數(shù)據(jù)賦給程序狀態(tài)字PSW,程序跳轉(zhuǎn)到此時(shí)PC指向的地址,即執(zhí)行中斷發(fā)生時(shí)將要執(zhí)行的下一條指令。此時(shí)各狀態(tài)標(biāo)志位(JF,ZF,CF,HF)恢復(fù)為中斷服務(wù)程序執(zhí)行前的數(shù)值。
39、指令push(1)助記符push PSW編碼1111 1000操作(PSW)->(SP),SP-1->SP影響標(biāo)志位無(wú)描述將程序狀態(tài)字PSW壓棧,同時(shí)將棧頂指針減1。
(2)助記符push pp編碼0001 01** 1111 1000操作pp->(SP,SP-1),SP-2->SP影響標(biāo)志位無(wú)描述將寄存器對(duì)pp中的數(shù)據(jù)壓棧,同時(shí)將棧頂指針減2。
40、指令pop(1)助記符pop PSW編碼1111 1001操作SP+1->SP,(SP)->PSW影響標(biāo)志位參見下列描述描述將棧頂指針加1,然后將堆棧單元(SP)中的數(shù)據(jù)賦給程序狀態(tài)字PSW。此時(shí)各狀態(tài)標(biāo)志位(JF,ZF,CF,HF)恢復(fù)為最近一條壓棧指令執(zhí)行前的數(shù)值。
(2)助記符pop pp編碼0001 01** 1111 1001操作SP+2->SP,(SP,SP-1)->pp影響標(biāo)志位無(wú)描述將棧頂指針加2,然后將堆棧單元(SP,SP-1)中的數(shù)據(jù)賦給寄存器對(duì)pp。
41、指令swi(1)助記符swi編碼0000 0000操作PSW->(SP),PC-1->(SP-1,SP-2),SP-3->SP,0->IEN,(FFFD,F(xiàn)FFC)->PC影響標(biāo)志位無(wú)描述該指令為軟件中斷指令。先將程序狀態(tài)字PSW壓棧到堆棧單元(SP),再將程序計(jì)數(shù)器遞減后壓棧到堆棧單元(SP-1,SP-2),同時(shí)棧頂指針減3,并將中斷使能總標(biāo)志IEN清0。禁止對(duì)所有可屏蔽中斷的響應(yīng)。最后將中斷入口地址存貯單元(FFFD,F(xiàn)FFC)中的數(shù)據(jù)賦給程序計(jì)數(shù)器PC,從而執(zhí)行軟件中斷服務(wù)程序。
42、指令nop(1)助記符nop編碼1111 1111操作無(wú)影響標(biāo)志位無(wú)描述該指令為空操作指令。
權(quán)利要求
1.一種基于CISC結(jié)構(gòu)的微控制器構(gòu)架,該微控制器核包括程序存儲(chǔ)器,數(shù)據(jù)隨機(jī)存儲(chǔ)器,特殊功能寄存器堆,數(shù)據(jù)總線和地址總線,流水線指令結(jié)構(gòu),數(shù)據(jù)緩沖區(qū),通用算術(shù)邏輯單元,指令讀取及譯碼器和系統(tǒng)控制模塊,其中,所述的數(shù)據(jù)總線分為各自分離的8位內(nèi)部數(shù)據(jù)總線和8位程序數(shù)據(jù)總線,所述的系統(tǒng)控制模塊用于產(chǎn)生系統(tǒng)時(shí)鐘、系統(tǒng)復(fù)位以及各種讀寫控制電路,所述的流水線指令結(jié)構(gòu)為單級(jí)四段流水線指令結(jié)構(gòu),該單級(jí)四段流水線指令處理結(jié)構(gòu)分為4個(gè)部分,首先是指令讀取及譯碼電路,該指令讀取及譯碼器通過(guò)上述8位程序數(shù)據(jù)總線從程序存儲(chǔ)器讀入指令,并對(duì)指令進(jìn)行譯碼分解;然后通過(guò)控制電路根據(jù)譯碼結(jié)果讀取寄存器或者存儲(chǔ)器的內(nèi)容;再通過(guò)算術(shù)邏輯單元進(jìn)行運(yùn)算;之后對(duì)運(yùn)算的結(jié)果存入寄存器或者數(shù)據(jù)存儲(chǔ)器單元;當(dāng)執(zhí)行調(diào)用、返回等指令時(shí),會(huì)對(duì)程序指針進(jìn)行壓棧和出棧操作,當(dāng)執(zhí)行跳轉(zhuǎn)等指令時(shí),有指針偏移操作,同時(shí)在每讀下一字節(jié)指令時(shí),會(huì)對(duì)PC有加1的操作。
2.根據(jù)權(quán)利要求1所述的基于CISC結(jié)構(gòu)的微控制器構(gòu)架,其特征在于所述的數(shù)據(jù)存儲(chǔ)器(RAM)、程序存儲(chǔ)器(ROM)、特殊功能寄存器和數(shù)據(jù)緩沖區(qū)域是空間獨(dú)立的,利用地址映射電路將它們的地址映射在連續(xù)的空間上,并可擴(kuò)展。
3.一種基于CISC結(jié)構(gòu)的微控制器的指令實(shí)現(xiàn)方式,其特征在于該微控制器的指令集共有151條基本指令,該微控制器支持各類常見的微處理器指令,包括數(shù)據(jù)傳送交換、算術(shù)邏輯運(yùn)算、比較、乘除法、移位循環(huán)、半字節(jié)操作、位操作、跳轉(zhuǎn)、調(diào)用返回、進(jìn)棧退棧、軟中斷以及空操作類指令,指令執(zhí)行周期最短的1個(gè)工作周期,最長(zhǎng)的10個(gè)工作周期,指令可以進(jìn)行相應(yīng)的擴(kuò)展。
4.如權(quán)利要求3所述的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集包括25條數(shù)據(jù)傳送指令,每條指令有其唯一的操作碼識(shí)別,指令實(shí)現(xiàn)將源地址的數(shù)據(jù)傳送到目的地址中,由于源地址和目的地址可以是多種尋址方式,使得每條指令包含1-4個(gè)字節(jié)不等的指令編碼,產(chǎn)生一類控制信號(hào)控制完成1)控制有關(guān)寄存器將數(shù)據(jù)傳送至通用算術(shù)邏輯單元(2)控制通用算術(shù)邏輯單元完成地址的計(jì)算(3)控制從源地址提取數(shù)據(jù)(4)控制數(shù)據(jù)寫入目的地址。
5.如權(quán)利要求3所述的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括10條比較指令,每條指令有其唯一的操作碼識(shí)別,指令實(shí)現(xiàn)將源地址的數(shù)據(jù)與目的地址的數(shù)據(jù)進(jìn)行比較,每條指令包含1-4個(gè)字節(jié)不等的指令編碼,產(chǎn)生一類控制信號(hào)控制完成(1)控制有關(guān)寄存器將地址數(shù)據(jù)傳送至通用算術(shù)邏輯單元(2)控制通用算術(shù)邏輯單元完成地址的計(jì)算(3)控制從源地址和目的地址提取數(shù)據(jù)傳送至通用算術(shù)邏輯單元(4)控制通用算術(shù)邏輯單元執(zhí)行減法操作(5)控制將減法的結(jié)果設(shè)置標(biāo)志寄存器。
6.如權(quán)利要求3所述的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括50條算術(shù)邏輯運(yùn)算指令,每條指令有其唯一的操作碼識(shí)別,指令實(shí)現(xiàn)將源地址的數(shù)據(jù)與目的地址的數(shù)據(jù)進(jìn)行算術(shù)或邏輯運(yùn)算,每條指令包含1-4個(gè)字節(jié)不等的指令編碼,產(chǎn)生一類控制信號(hào)控制完成(1)控制有關(guān)寄存器將地址數(shù)據(jù)傳送至通用算術(shù)邏輯單元(2)控制通用算術(shù)邏輯單元完成地址的計(jì)算(3)控制從源地址和目的地址提取數(shù)據(jù)傳送至通用算術(shù)邏輯單元(4)控制通用算術(shù)邏輯單元執(zhí)行指令要求的算術(shù)邏輯操作(5)控制將運(yùn)算的結(jié)果寫入目的寄存器。
7.如權(quán)利要求3所述的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括2條十進(jìn)制調(diào)整指令,每條指令有其唯一的操作碼識(shí)別,根據(jù)不同的尋址方式,產(chǎn)生控制信號(hào),指令實(shí)現(xiàn)將寄存器中的16進(jìn)制結(jié)果進(jìn)行十進(jìn)制調(diào)整,產(chǎn)生BCD碼,調(diào)整后的結(jié)果仍回寫到寄存器p。
8.如權(quán)利要求3所述的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括2條乘除法指令,每條指令有其唯一的操作碼識(shí)別,根據(jù)不同的尋址方式,產(chǎn)生控制信號(hào),指令實(shí)現(xiàn)寄存器w與累加器a中的無(wú)符號(hào)數(shù)相乘并回寫結(jié)果,指令實(shí)現(xiàn)寄存器對(duì)wa與寄存器c中的無(wú)符號(hào)數(shù)相除并回寫。
9.如權(quán)利要求3所述的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括13條循環(huán)移位和半字節(jié)操作指令,每條指令有其唯一的操作碼識(shí)別,根據(jù)不同的尋址方式,產(chǎn)生控制信號(hào),指令實(shí)現(xiàn)寄存器或者寄存器與內(nèi)存的數(shù)據(jù)的移位或者半字節(jié)移位。
10.如權(quán)利要求3所述的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括24條位操作指令,每條指令有其唯一的操作碼識(shí)別,根據(jù)不同的尋址方式,產(chǎn)生控制信號(hào),指令實(shí)現(xiàn)對(duì)寄存器或者內(nèi)存單元數(shù)據(jù)的位進(jìn)行設(shè)置和運(yùn)算。
11.如權(quán)利要求3所述的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括11條跳轉(zhuǎn)指令,每條指令有其唯一的操作碼識(shí)別,根據(jù)不同的尋址方式,產(chǎn)生控制信號(hào),根據(jù)偏移量指令實(shí)現(xiàn)程序的跳轉(zhuǎn)。
12.如權(quán)利要求3所述的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括8條調(diào)用、返回指令,每條指令有其唯一的操作碼識(shí)別,根據(jù)不同的尋址方式,產(chǎn)生控制信號(hào),根據(jù)不同的尋址方式,指令實(shí)現(xiàn)子程序的調(diào)用和返回。
13.如權(quán)利要求3所述的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括4條進(jìn)棧退棧指令,產(chǎn)生控制信號(hào),指令實(shí)現(xiàn)對(duì)程序狀態(tài)字和寄存器內(nèi)容的壓棧和出棧。
14.如權(quán)利要求3所述的微控制器,其特征在于所述的指令集還包括1條軟中斷指令,產(chǎn)生控制信號(hào),指令實(shí)現(xiàn)軟件中斷。
15.如權(quán)利要求3所述的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述的指令集還包括1條空操作指令,產(chǎn)生控制信號(hào),指令實(shí)現(xiàn)空操作。
16.如權(quán)利要求3至15任一項(xiàng)所述的微控制器的指令實(shí)現(xiàn)方式,其特征在于讀入的指令通過(guò)所述的指令讀取及譯碼器分解,按分解后的微指令碼進(jìn)行譯碼,并執(zhí)行相應(yīng)的操作,根據(jù)尋址方式不同,譯碼后將操作數(shù)或者操作碼分別存儲(chǔ)于不同的操作數(shù)寄存器、微指令碼寄存器、內(nèi)存或者特殊的寄存器。
17.如權(quán)利要求16所述的微控制器的指令實(shí)現(xiàn)方式,其特征在于所述不同的尋址方式按尋址類型分別為立即數(shù)尋址、直接尋址、寄存器尋址、寄存器間接尋址、隱含尋址、相對(duì)尋址、變址尋址、絕對(duì)尋址、向量尋址、頁(yè)尋址和存儲(chǔ)器位尋址共11種類型。
18.如權(quán)利要求3至15任一項(xiàng)所述的微控制器的指令實(shí)現(xiàn)方式,其特征在于指令執(zhí)行的順序是在時(shí)鐘的第一相讀入指令碼并譯碼,同時(shí)處理中斷等,第二相讀內(nèi)存單元或者寄存器的數(shù)據(jù)并存儲(chǔ),第三相執(zhí)行通用算術(shù)邏輯單元操作,完成指令要求的各種運(yùn)算或者偏移量的計(jì)算,第四相將指令運(yùn)算得的結(jié)果寫入內(nèi)存及相關(guān)寄存器,同時(shí)在每一相進(jìn)行相關(guān)標(biāo)志位的設(shè)置和指令周期存儲(chǔ)計(jì)算的操作。
19.如權(quán)利要求3所述的微控制器的指令實(shí)現(xiàn)方式,其特征在于中斷處理的方式為當(dāng)中斷請(qǐng)求發(fā)生時(shí),置位中斷鎖存器,在指令執(zhí)行的第一相時(shí)鐘時(shí)檢測(cè)中斷鎖存器,響應(yīng)中斷,并清中斷使能標(biāo)志和中斷鎖存器,PC在中斷程序執(zhí)行前后自動(dòng)壓棧和出棧;所述的中斷的種類包括軟件中斷、外部中斷、定時(shí)器中斷、WDT中斷、串行接口中斷,中斷可嵌套,除軟件中斷和WDT中斷外可控制中斷源屏蔽。
全文摘要
本發(fā)明是一種微處理器構(gòu)架及其實(shí)現(xiàn)方式,其簡(jiǎn)化了CISC微處理器龐雜的指令集,內(nèi)部指令實(shí)現(xiàn)方式做了改進(jìn),數(shù)據(jù)線和指令線分離,使指令處理的速度加快,在一定程度上彌補(bǔ)了CISC微處理器指令集龐大、執(zhí)行效率低的缺點(diǎn)。指令集共有151條指令,支持常見典型各類指令,包括數(shù)據(jù)傳送交換、算術(shù)邏輯運(yùn)算、比較、乘除法、移位、循環(huán)、半字節(jié)操作、位操作、跳轉(zhuǎn)、調(diào)用返回、進(jìn)棧退棧、軟中斷以及空操作類指令。本發(fā)明的微處理器可配置適當(dāng)?shù)耐鈬Y源,其端口多,資源豐富,適用于實(shí)時(shí)控制各類嵌入式、SOC系統(tǒng),具有高速、高性能、低功耗、低噪聲等特性,抗干擾能力強(qiáng),是一款適用于家電、民用通信等消費(fèi)類電子產(chǎn)品的微控制器。
文檔編號(hào)G06F9/22GK1584824SQ0315040
公開日2005年2月23日 申請(qǐng)日期2003年8月18日 優(yōu)先權(quán)日2003年8月18日
發(fā)明者劉艷軍, 趙啟山, 賀理, 黃繼頗, 張文, 朱建國(guó) 申請(qǐng)人:上海海爾集成電路有限公司, 海爾集團(tuán)公司