摩托羅拉六交八千
摩托羅拉六交八千型中央處理器,抑是稱MC 六桱八千,六百八十 x 零,m 六桱八千,m 六十八 k,六十八 k;是由美國摩托羅拉公司(Motorola)的半導體部門(這馬獨立成做飛思卡爾公司(Freescale)) 出品的一款三十二分之十六位 CISC(複雜指令集)微處理器。做為 M 六十八 K 處理器系列的頭一个成員,MC 六桱八千於一九七九年投放市場。因為內部咧使用三十二位匯流排佮暫存器,伊佇軟體層(指令集)基本佮綴尾的純三十二位產品保持兼。
歷史
摩托羅拉公司佇咧一九七六年起動 MACSS 計畫(Motorola Advanced Computer System on Silicon,摩托羅拉矽晶高級電腦系統), 拍算欲開發一款佮較早的產品完全無相容的全新微處理器。根據計劃,新 CPU 應該是對當時摩托羅拉主流八个 CPU 六千八百的一个高階互補產品,袂考慮兩者間的兼容性。猶毋過,當六豈八千設計出來了後,伊嘛是予人保留一个會當相容六千八百外部的匯流排協定模式,並且專門有八个匯流排的產品予生產出來。當然喔,設計人員猶是閣較要意其向後兼容性,這為六瀨八千確立佇咧三十二位 CPU 領域的領先優勢奠定了基礎。比如講,六桱八千使用三十二位暫存器佮內部匯流排,干焦其本身的結構真少愛直接操作長字。小型電腦諸如 PDP 鋪十一和 VAX—二者是採用類似的微編碼—對六分八千的設計有誠深的影響。
佇咧二十世紀七空年代中期,八个微處理器製造商紛紛競爭導入下一代十六个 CPU。國家半導體佇咧一九七三年到一九七五年頭起先開發出 IMP 鋪十六佮 PACE,毋過速度並無理想。英特爾公司佇一九七七年推出八千空八十六,快速受著歡迎。現此時,為著確保競爭上的領先,摩托羅拉意識著其實 MACSS 計畫必須跳過十六个系統,直接推出三十二分之十六位混合型 CPU。到一九七九年,摩托羅拉六交八千,即 MC 六桱八千,才告姍來遲。因為比八千空八十六暗兩年,其電晶體數目閣較濟,並且𪜶其易用性的問題。
上代先的 MC 六桱八千使用三配五微米 HMOS 技術(即高性能 N 通道金屬氧化物半導體,CMOS 較早是身)製造。一九七九年發佈了工程樣品,次年的產品型世間,速度有四、六、八、十兆赫茲幾種。上緊的十六曲痀六七 MHz 版本到八空年代尾才面市。
MC 六鼻八千佇較早得著足濟高階產品的佮意。踮昇陽公司的 Sun workstation 等等有偌種 Unix 工作站中,MC 六桱八千一度占領導地位。市場領先的其他一寡電腦,包括講 Amiga(阿米加)、 Atari ST(雅達利 ST)、 Apple Lisa(蘋果 Lisa)和 Macintosh(麥金塔), 佮第一代雷射印表機,若蘋果公司的 LaserWriter,攏使用 MC 六桱八千。一九八二年,摩托羅搝來到更新 MC 六交八千的指令集以支持虛擬記憶體,而且會使符合由 Popek 和 Goldberg 佇一九七四年提出的虛擬化標准。
為支援低成本系統佮使用較少記憶體的應用,摩托羅拉佇咧一九八二年猶閣推出面向八个外部匯流排的 MC 六桱八千空八。一九八二年以後,摩托羅拉開始共閣較濟的注意力投向六加八千空二十佮八千。
其他的製造商
由日立公司設計,一九八五年兩公司聯合推出使用 CMOS 技術的六十八 HC 零。六十八 HC 空的速度有八到二十 MHz 幾个版本。就算講除了使用 CMOS 電路,六十八 HC 零與因為 HMOS 的 MC 六桱八千完全一致,但正是就按呢其實會當趁著大。MC 六交八千佇二十五攝氏度環境下能規大約是一交三五瓦,而八 MHz 的六十八 HC 空是為空學一三瓦,較高頻率的版本是會當了嘛相對提懸(HMOS 技術是無仝:其在 CPU 空閒閣會食電,所以功了佮頻率基本無關係)。 後來九空年摩托羅拉閣推出 MC 六桱八千空八的 CMOS 版本,並共改進為會當相容十六分之八位兩種匯流排模式。
其他 HMOS 版六枋八千的製造商包括:Mostek、Rockwell(洛克維爾)、 Signetics、Thomson(湯姆頇顢)佮東芝。東芝嘛生產 CMOS 版六扣八千(TMP 六十八 HC 零)。
應用
六配八千首先予人應用佇真濟高端產品內底,親像用戶微型計算機 WICAT 百五佮阿爾法微系統的一寡早期計算機等。單用戶工作站如惠普公司的 HP 兩百分之九千、昇陽電腦的 Sun 影一;圖形終端如 DEC 的 VAXstation 一百和 Silicon Graphics 的 IRIS 一千攏使用六配八千。真濟 Unix 系統嘛開始使用六十八 K 系列 CPU。
佇咧八空年代中期,六桱八千閣成做首先應用於個人 / 家庭計算機的 CPU。先後有蘋果的 Apple Lisa 佮麥金塔(Macintosh 一百二十八 K)、 Amiga 的海軍准將(Commodore)、 雅達利 ST 佮夏普的 Sharp X 六桱八千採用六馮八千。
六桱八千上主要的成功佇咧控制器領域。早佇一九八一年 Imagen 公司就共六方八千用作其雷射印表機 Imprint 鋪十外部控制器的 CPU。惠普於一九八四年發布的頭一款 LaserJet 印表機亦使用一片八 MHz 的六桱八千作為內置控制器。類似的是六方八千的整合控制器嘛予人廣泛用佇其他多種印表機中。到九零年代,六肩八千猶佇誠濟低端印表機當中被使用。
除了傳統商業佮家用計算應用,六嬸八千佇咧工業控制系統當中嘛取得著大摸成功。Allen-Bradley、德州儀器佮西門子公司生產的可程式邏輯控制器(PLC)就算講用六交八千。一般來講,這類工業系統的用戶閣較重視產品的可用性,啊若毋是佮家庭用戶仝款傷過要緊若敢是過時。所以乎,猶有真濟使用六堵八千的系統,佇咧予人安裝二十外年後,佇生產一線提供著繼續咧靠的服務。
隨著技術的進步,六桱八千佇計算機單機市場漸漸予人淘汰,毋過其實用猶是活跳佇消費佮躉入式來領域。遊戲機製造商使用六石八千作為真濟街機佮家用遊戲機的處理器。雅達利在一九八三年推出的 Food Fight 就是使用六配八千的代表街機遊戲。世嘉的 System 十六、卡普空的 CPS 板一和 CPS 鋪二閣有 SNK 的 Neo Geo 嘛攏使用六配八千。
佇咧八空年代尾到九空年代初,一寡遊戲機廠商使用六石八千作為家用遊戲平台的中央處理器。這包括世嘉的 Mega Drive(MD)和 Neo Geo 家用版和 Super A'Can。到九零年代,就算講街機遊戲開始使用閣較強大的 CPU,六桱八千閣在生嘉的三十二位 CPU 遊戲機 Sega Saturn 來中用做聲音控制器。
是六交八千的六百八十三 XX 系列微控制器則廣泛應用於誠濟應用領域中,包括網路佮電話設備、電視機頂盒、實驗室佮醫療的設備。思科、三 Com 等公司捌佇𪜶生產的通訊設備內底使用 MC 六鼻八千三百空二佮其衍生產品。Palm 公司捌使用 DragonBall 系列 CPU(六十八 K 系列的後續)做其實 PDA 的處理器,一直到底是 RISC 的 ARM 處理器開始統治 PDA 市仔。此外,AlphaSmart 公司佇其實欲紮文字處理器中使用 DragonBall。
德州儀器佇一寡高端圖形計算器,如 TI 鋪八十九佮 TI 鋪九十二中,使用六瀨八千。這寡設備早期使用以六十八 EC 零為內核的專門化微控制器,尾仔是改用封裝好的 MC 六十八 SEC 零。
成做微控制器內核
佇被純三十二位 CPU 取代了後,六桱八千開始予人用作誠濟微控制器的內核。一九八九年,摩托羅拉發布矣 MC 六堵八千三百空二通訊處理器。兩年後閣推出獨立處理器晶片 MC 六十八 EC 零。一九九六年的 MC 六十八 SEC 零便使用矣這款晶片。
一九九六年摩托羅拉停產 HMOS MC 六桱八千佮 MC 六桱八千空八,毋過其實離出來的半導體部門,飛思卡爾公司,猶閣佇咧生產 MC 六十八 HC 空等六十八 K 家族系列的產品。六桱八千架構的後代,六百八十 x 零、CPU 三十二以及 Coldfire 系列,嘛猶佇咧生產。
架構
地址匯流排
六桱八千地址匯流排做二十四位,故支持十六 MB 上大物理內存。佇咧使用三十二位長字對地址進行存儲佮計算時陣,高位的一字節會予自動去關心。這種設計予其具備相當的向前兼容性,會當直接運行為後續的純三十二位 CPU 編寫的軟體。嘛因此,根據這馬的定義,六桱八千應稱得上是一款三十二位 CPU。摩托羅拉使用三十二位內部匯流排的目的佇咧希望會當佇咧六更八千頂懸編寫會當予將來的後續產品直接使用的軟體,相關指令毋免作位數的調整。
毋過,程式工程師猶是有可能編寫出無法度佮後續產品兼容的軟體。設死這款二十四位軟體挕捒高位字節,抑是將利用字節做尋址以外的目的,伊就有可能佇三十二位六十八 K 系列 CPU 上運行失敗。這就是講,著希望支持向前兼容的軟體,著愛用三十二位長字尋址,並且共上懸位字節置零。
內部暫存器
六桱八千包含八个三十二位通用暫存器(D 零-D 七), 佮八个三十二位地址暫存器(A 零-A 七)。 上尾一个地址暫存器,即 A 七,也成做標準棧指針使用,佇咧編程會當使用 SP 做同義詞。這組暫存器佇咧規模拄仔好處:既然會當對斷快速反應(只有十外个暫存器愛保存), 嘛有夠額的暫存器來進行快速計算。
就算講兩種暫存器而存有時會較麻煩,但是佇咧實踐中並毋是真歹掌握。根據稱,這猶閣有法度 CPU 的設計者會當通過對地址暫存器組使用輔助計算單元,毋過實現較懸程度並行機制。
儉的內容高位字節佇咧前(Big Endian 模式), 佮 x 八十六倒反。
狀態暫存器
六桱八千較、算是術和邏輯操作會佇狀態暫存器 SR 的低五字節(閣稱 CCR)中設一寡標誌位,以供了後的條件跳轉來使用。遮的標誌位是:得零(Z)、 進位(C)、 溢出(V)、 擴展(X)、 負數(N)。 就算講足濟時陣值是相仝的,X 佮 C 猶原是兩个無仝的標誌位。這就允准算講、邏輯佮移位操作的加額位佮邏輯控制 / 連接造成的進位區別開。
指令集
六交八千的指令集基本上是正交的。大部份的指令予人劃做是操作佮地址模式兩部份,並且大部份的地址模式攏對差不多全部指令會當用。這款近來若正交性佇編程人員當中毀譽參半。
編程者會清楚來發現,伊 / 伊所書寫的指令可能予人結麼做幾種無仝款的二進位操作碼。這實際上是一種袂䆀的妥協:一方面,佇便利性上佮純粹的正交指令系統相仿;一方面,CPU 設計者會當有閣較濟自由來設計操作碼錶仔。
對一台十六位時代的機器來講,由五十六條指令構成的上細指令集猶原顯大摸。此外,誠濟指令佮尋址模式會佇咧指令後壁加入地址 / 尋址模式碼。
真濟設計者確信 MC 六鼻八千體系結構應該基於成本考慮使用較精簡的指令碼,特別是使用編譯器自動生成的時。這種熟似為著伊設計的成功加分袂少,並且使之成做一種經久袂退的體系結構。這一信條繼續地保證規个系列指令集的設計優勢,一直到 ARM 體系結構引入仝款精簡的 Thumb 指令集。
特權級
六十八 K 系列 CPU 包含講兩个特權級。超級用戶(supervisor)模式佮用戶(user)模式。後者比前者只是禁用中斷級控制。斷節總會當 CPU 進入超級用戶態。超級用戶標誌位存儲於狀態暫存器 SR 中,並對用戶可見。
超級用戶態下會有一个分離的棧指針用佇斷節咧處理。
就斷去
六桱八千會使識別七級斷節,這个層別一到級別七。七級中斷嚴格揤優先級排列,一个高級中斷去總是有法度一个低級中斷去。會當使用專門的特權指令佇咧 SR 內底上細條的斷級別,對這个閘屏所有小於此級別的斷。毋過若欲做零,表示無欲接受斷節。級別七毋通予屏罩去,即 NMI。級別總是會當予高級斷節拍斷。
硬體中斷源將中斷信號以編碼方式通過三條輸入線傳送予 CPU。一般會當使用專門的斷控制器來匯總各外部設備,閣將中斷信號照級編碼佮 CPU 硬連。中斷控制器會當使用簡單如七十四 LS 一百四十八優先級編碼器,複雜如 MC 六桱八千九百空一多功能外設(支持可程式中斷控制、通用異步收發裝置、定時器佮並行輸入輸出等等)等各種的電路模塊仔。
佇內底存較低一 K 位置存儲中斷向量表,支持兩百五十六條斷向量。部份斷節向量有特殊的用途:一向量一為初初棧的地址;向量二為初代的碼地址;向量三到十五用於錯誤報告,包括匯流排錯誤、尋址錯誤、非法指令、無意無意、優先權違反等。對向量二十四起處理真正的斷節,包括偽中斷、針對級別一到級別七的默認處理向量,多達到十五个自陷向量,佮用戶定義向量。
因為必須要佇咧重啟的時間保證向量一佮二的內容有效,所以六分八千系統通常包含佇地址底使用非易失性存儲器(如 ROM)來存儲一寡例程向量佮啟動代碼。猶毋過,一个通用計算機的作業系統會向望佇咧行時改變向量內容。解決辦法是將 ROM 內的向量指向 RAM 的分支表,抑是使用較早佇八个 CPU 中廣泛使用的換頁技術(Bank switching)。
因為包括一條非特權指令 MOVE from SR,允准一般用戶干焦讀地訪問某寡特權狀態,六二八千並無完全滿足波佩克佮戈德堡虛擬化需求。該需求指出矣為構建某一 CPU 之等價虛擬機而對 CPU 提出來若干要求。
MC 六桱八千對虛擬內存欠缺方便的支持。一款支持虛擬內存的 CPU 應該會當佇內存訪問失敗了後自陷並恢復。猶毋過,六交八千確實提供一个匯流排錯誤異常來使 CPU 自陷,就算講猶會當保存有夠的狀態信息通好異常處理了後的恢復。為此,一寡仔 Unix 工作站通過使用兩塊六鼻八千來解決虛擬內存問題。兩塊 CPU 的運行的時鐘存在差一位。做頭一塊拄著尋址異常後,特殊的硬體會設法向第二塊發出斷節,以防止其嘛訪問錯誤地址。斷例程佇第二塊 CPU 上處理完內存換頁了後,會按較早的狀態重啟第一塊 CPU,自按呢閣再使兩 CPU 仝步。
猶毋過,以上遮的問題佇咧 MC 六桱八千空一十被徹底解決。佇咧 MC 六桱八千空一十中,匯流排異常和地址錯誤攏會予大量狀態信息壓入系統棧,以便若以後的恢復。MOVE from SR 嘛予人修正做特權指令。原本用佇咧訪問 SR 低五字節的代碼會當由新指令 MOVE from CCR 取代。
指令集細節
標準尋址模式
六桱八千提供真濟種尋址模式,並統稱做有效尋址(EA)。 佇咧 CPU 參考手冊內底,經常會有諸如 MOVE < ea > , < ea > 按呢的表記方式。這表示佇目的操作數佮源操作數頂頭會當分別使用一種(但是通常毋是全部)有效的地步。
- 暫存器直接揣址
- 數據暫存器直接尋址,如 D 零。
- 地址暫存器直接揣地址,如 A 零。通常無咧使用 A 七。
- 暫存器間接尋址
- 簡單間址,如 ( A 零 )。代先取得 A 零所存儲的地址,閣佇內底該地址取出數據。
- 自增間址,如 ( A 零 ) +。干焦會當用佇源操作數域。代先取得 A 零所存儲的地址,閣佇內底該地址取出數據,然後 A 零的內容(地址)自增一定長度(因為指令了後綴會著)。 這个操作其實攏足相當的 x 八十六中的出棧指令 POP(注意棧的方向佮內存的方向相反)。 佇遮,A 零予用做一个用戶自定義的棧指針,佮系統使用的 A 七 / A 七'無仝。
- 自減間址,如-( A 零 )。通用佇源抑是目的操作數域。先將 A 零的內容(地址)自減一定長度(因為指令了後綴會著); 然後取得 A 零所存儲的地址,閣佇內底該地址處存入數據,然後這个操作其實攏足相當的 x 八十六中的入棧指令 PUSH。
- 偏徙間址,如二 AFF ( A 零 )。前邊的偏徙量為十六位。實際取得的地址為 ( A 零 ) + 二 AFF。
- 加索引起偏移間址,如 E 三 ( A 零 , D 零 )。前邊的偏徙量為八个。實際取得的地址為 ( A 零 ) + ( D 零 ) + E 三。
- 程序計數器位徙
- 長位徙,如二 AFF ( PC )。前邊的偏徙量為十六位。PC 變做是 ( PC ) + 二 AFF。
- 短位徙,如 E 三 ( PC , D 零 )。前邊的偏徙量為八个。PC 變做是 ( PC ) + ( D 零 ) + E 三。
- 絕對內存尋址
- 直接使用內存地址值,如 $ 四千,表示目標地址佇內存地址為四千位。注意 $ 表示後壁所佮數字為十六進位,% 表示二進位。
- 佇實際編程當中,會當使用代碼中的標號來充當內存地址值。彙編器會自動翻譯做數字地址。
- 注意無應佮隨數相濫摻。用隨數時應該愛佇咧值前閣加一个 #。$ 四千表示十六進位地址四千;# $ 四千表示十六進位隨數四千;四千表示十進位地址四千箍;# 四千表示十進位隨數四千。
指令後綴
大部份指令攏有表示操作長度的後綴:. B、. W 抑是 . L,分別表示這一操作佇字節(八比特)上、字(十六比特)抑是躼躼長(三十二比特)上進行。運算的過程佮結果攏會受著後綴的影響。算是運算過程中,只有屬於操作長度範圍的部份才會參與運算。可比講,執行 MOVE . B D 二 , D 一時仔共 D 一的上低一字複製甲 D 字的上低一字鋩角,啊若兩个人賰的字節攏無受著影響。對於 CCR,各標誌位的值得會操作長度的上懸有效位決定。若某次 ADD . B 予得結果的第七 Bit 位為一,著 CCR 的 N 位會置一个;若某次 ADD . L 予得結果的第七 Bit 位為一,並且第十五 Bit 無為一,著 CCR 的 N 位置無一個。佇後一種情形下,CCR 的 N 干焦受著第十五 Bit,即一字的上懸有效位影響。另外一个例是咧自增 / 自減尋址中,自增 / 自減的長度因為操作了後綴咧異。若操作 MOVE . B,著自增 / 自減一;W 為而;L 為四。
定用指令
大部份六鼻八千的指令攏是兩箍的。目的操作數佇前,源操作數在後。
- 徙振動指令
- MOVE:標準移動指令。另外有一寡其他移動指令供選擇:MOVEA(徙動來到地址暫存器 An,袂影響著 CCR,但是隨著不可為 . B)、 MOVEQ(徙動一个八位數到目標暫存器,因為會當共數值直接寫入指令故稱快速徙動)、 MOVEM(徙振動暫存器組到指定閣疊,加減用中斷去 / 子程序處理第一步)等。
- LEA:徙動一个地址值到目標暫存器。` LEA $ 兩千 , A 零 ` 表示會 A 空的值設為十六進位的二千。應注意現此時無加隨數標誌 #。
- LINK / ULNK:建立 / 取消堆疊板。這个指令用著翻譯高級語言的函數調用。` LINK An , #-x ` 可將 An 成做函數棧指針,並 SP 所指向的用戶棧內取得 x 大細的空間存儲局部變量,了後 SP 猶原共指向棧頂,而且 An 指向棧頂懸 + x 的位置喔。x 的值在編譯時由編譯器自動算出。
- 算數指令:ADD(加)、 SUB(減)、 MULU / MULS(沒有 / 有符號乘)、 DIVU / DIVS(沒有 / 有符號除)、 NEG(取補)、 佮 CMP(類似減但是干焦會影響標誌位毋是改變操作數)。 算數指令嘛加成組提供。對於 ADD,閣有 ADDA(加地址,袂影響標誌位)、 ADDI(加隨數)、 ADDQ(快速加,加數無大過八以便若直接囥佇操作碼內底,比 x 八十六的 INC 指令書寫麻煩但功能閣較強)、 ADDX(影響進位符仔,用佇大數運算)等。
- BCD 碼算數指令:ABCD(加)和 SBCD(減)。
- 徙位指令
- 邏輯移位(徙位了後用零補充): LSL(倒徙)、 LSR(正徙)
- 算數徙位(徙位了後用原來上懸 / 上低的有效位補充): ASL(倒徙)、 ASR(正徙)
- 循環移位(徙位了後用所徙動位補充): ROL(倒徙)、 ROR(正徙)
- 循環擴展移位(徙位到 CCR 的 X 位,同時用進前的 X 位補充): ROXL(倒徙)、 ROXR(正徙)
- 位操作指令:BSET(置一)、 BCLR(清零)和 BTST(若測試位咧改變進前為零則將 CCR 的 Z 設做一个)。
- 多任務處理:TAS(測試並且置位)。 這个指令用佇實現信號燈等仝步機制。
- 流程控制:JMP(無責任跳轉)、 JSR(跳轉來到子例程)、 BSR(照對地址跳轉來到子例程,加用著跳轉至用戶定義例程)、 RTS(對子例程倒轉來)、 RTE(對異常 / 斷中返回)、 TRAP(自陷,就軟中斷去)、 CHK(檢查地址敢是越界,若是有出擢)。
- JMP 指令干焦是純粹跳轉,袂講後一條指令地址硩棧;JSR 和 BSR 會將下一條指令壓棧。
- RTS 共棧指針指向內容彈出予 PC。
- 條件測試並跳轉:Bcc 系列指令。cc 定義矣所測試的條件。捷用的如:
- BNE:無等於時跳轉。
- BEQ:等於時跳轉。
- BRA:沒條件跳轉。