Can you summarize the following document?
        
  

  1972年,Intel釋出了8008微處理器——世界上第一款8位微處理器。 8008微處理器有18個引腳,其中地址匯流排使用了14個引腳,並且與8位資料匯流排複用引腳。指令集源自是Datapoint公司為計算機的CRT-鍵盤終端設計的但相當通用的指令集。當時英特爾還是一家生產DRAM為主業的公司,缺乏這方面的技術儲備。  1974年,Intel釋出了8080微處理器, 被公認是第一款真正可用的微處理器。8080的晶片封裝採用40個引腳,其中8個資料匯流排引腳、16個地址匯流排引腳都是專用的,因此資料匯流排與地址匯流排可以並行工作。8080的擴充套件後的指令集在原始碼級別上向前相容8008指令集。  1975年,Intel釋出了第三款8位微處理器——8085。採用了新的製造工藝,簡化了輸入電壓引腳的數量。同一時期還有Motorola 6800(1974)、Microchip PIC16X(1975)、MOS Technology 6502(1975)、Zilog Z80(1976)及Motorola 6809(1978)等8位微處理器。在8位微處理器市場競爭中Z80最為成功。

  8086專案起始於1976年5月,是英特爾公司當時更為看重的16位的Intel iAPX 432微處理器的備份專案。8086一方面要與Motorola, Zilog, National Semiconductor等公司的16位、32位微處理器競爭市場份額,另一方面也是對Zilog Z80在8位微處理器市場上的成功的回擊。由於採用了與8085微處理器近似的微體系結構與物理實現工藝,8086專案進展相當快。  8086微處理器被設計為在彙編源程式上向前相容8008, 8080, 8085等微處理器。指令集與程式設計模式是基於8080微處理器,但指令集做了擴充套件以完全支援16位計算。  新增加的指令包括:完全支援有符號整數、段基址+偏移量定址、類似於Z80的自重複操作、直接支援巢狀的ALGOL類語言如Pascal或PL/M、微碼實現的乘法除法指令、以及更好支援與協處理器(8087或8089)和多處理器系統的匯流排結構.  第一版的指令集與高層的體系結構的設計僅用了3個月。 在沒有CAD工具的時代,4名工程師與12名佈線繪圖員平行工作, 用了2年多的時間才把8086的高層設計實現為可執行測試的產品。這在當時算是很快的研發速度。  8086是隨機邏輯與微碼的混合實現,使用了大約20,000個電晶體(算上所有的ROM與可程式設計邏輯陣列為29,000個電晶體)。晶片面積為33 mm2,製造工藝為3.2 μm.  8086體系結構由Stephen P. Morse設計,並在最後定案時得到Bruce Ravenel(8087體系結構設計者)的幫助。邏輯設計者是以Jim McKevitt與John Bayliss為首的硬體開發工程師團隊。專案經理William Pohlman。迄今8086的指令集仍然是PC機與伺服器的基本指令集。

  

  所有的內部暫存器、內部及外部資料匯流排都是16位寬,因此是完全的16位微處理器。20位外部地址匯流排,因此物理定址空間為1MiB (即2 = 1,048,576).由於內部暫存器都是16位,對1M地址空間定址時採取了段定址方式。8086的封裝採用40引腳的雙列直插(dual in-line),資料匯流排與地址匯流排複用了前16個引腳。16位的I/O地址,因此獨立的I/O定址空間為64KiB的虛擬定址空間 (即2 = 65,536).由於8086內部的地址暫存器是16 位寬,因而最大線性定址空間為64 KiB.使用超過64 KiB記憶體空間的程式設計時,需要調整段暫存器(segment registers)。直到32位的80386出現之前,8086的這種段定址相當不便.  8086晶片封裝的8個控制引腳在"min"或"max"下有不同功能。"min"模式是使用單處理器的小型計算機系統,"max"模式是使用多處理器的中到大型計算機系統。

  8086有8個16位元的暫存器,包括棧暫存器SP與BP,但不包括指令暫存器IP、控制暫存器FLAGS以及四個段暫存器。AX, BX, CX, DX,這四個暫存器可以按照位元組訪問;但BP, SI, DI, SP,這四個地址暫存器只能按照16位寬訪問。  8086以8080和8085(它與8080有組合語言上的原始碼相容性)的設計為基礎,擁有類似的暫存器集合,但是擴充為16位元。匯流排介面單元(Bus Interface Unit)透過6位元組預存(prefetch)的貯列(queue)將指令送給執行單元(Execution Unit),所以取指令和執行是同步的-一種流水線的原始形式(8086指令長度變化從1到6位元組)。  8086有四個完全一樣的16位元暫存器,但也能夠當作八個8位元暫存器來存取;以及四個16位元索引暫存器(包含堆疊索引)。資料暫存器通常由指令隱含地使用,針對暫存值需要複雜的暫存器配置。它提供64K 8位元的輸出輸入(或32K 16位元)埠,以及固定的向量中斷。大部分的指令只能夠存取一個記憶體位址,所以其中一個運運算元必須是一個暫存器。運算結果會儲存在運運算元中的一個。  8086有4個記憶體區段(segment)暫存器,可以通過索引暫存器來設定。區段暫存器可以讓CPU一種當時是全新的方式存取多達1MB之記憶體。在現今有區段的處理器中,8086把區段暫存器左移4位元然後把它加上去定址。這通常被認為是一個不太好的設計,因為這麼做會讓各區段有重疊。儘管這樣對於組合語言而言會顯得有用——因為可以充分控制區段,但同時卻使高階語言中的指標(像是C程式語言)使用變得困難。它降低了指標的高效率,且有可能產生兩個指向同一個地方的指標擁有不同的位址。更壞的是,這種方式產生要讓記憶體擴充到大於1MB的困難。而80286的定址方式改變讓記憶體擴充較有效率。  由於8位機(如Intel 8008)時代沿襲下來的緊湊編碼,大多數指令雖然有兩個源運算元(operands)及一個輸出結果,但單條指令至多使用兩個地址,因此運算結果被存入一個源運算元中。且最多只能有一個記憶體運算元,另外的運算元是暫存器或立即數。記憶體運算元也可以用於儲存指令的輸出結果。8位微處理器的指令集不能把輸出結果直接儲存在記憶體運算元中,因此8086指令集的如此設計大大提高了程式碼密度(code density)。  相比與8080或8085,8086有更強的暫存器通用性,但比起典型的小型計算機來說仍有很大不如。8086的某些指令隱式使用某些暫存器。比起更為規則的16- 或32-位處理器如PDP-11, VAX, 68000,等等,8086的暫存器分配特性使得編譯器的工作更為複雜;另一方面,比起半現代化的但廣為使用的8位微處理器如6502, 6809,或8085,編譯器生成程式碼就容易太多了.  8086有64 KiB的字寬為8位的(或32K個寬度為16位的)I/O定址空間.  棧的長度最大為64 KB(一個段),8086硬體支援棧頂由高地址向低地址生長。入棧、彈棧的資料單元長度為2位元組。棧頂位置由暫存器的組合SS:SP給出.  共有256 箇中斷,包括硬體中斷與軟中斷。中斷可以巢狀,使用棧來儲存中斷返回地址。  8086增加了一些8080與8085所沒有的新指令,用於更好地支援Pascal與PL/M的高階程式設計特性;如push "mem-op", ret "size", (其它一些指令如push "immed" and enter,在隨後的80186, 80286, and 80386中陸續增加.)

  8086有一個16位寬的標誌暫存器FLAGS.其中9個位元是被使用的,另外7個位元保留未用。具體是:進位標誌CF、奇偶標誌PF、輔助標誌AF、為零標誌ZF、符號標誌SF、追蹤標誌TF、中斷允許標誌IF、方向標誌DF、溢位標誌OF。

  在Intel的8位、16位處理器中,由於暫存器的寬度為8或16位元,而地址匯流排的寬度一般是要大於暫存器的寬度,所以為了能訪問整個地址空間,需要採取特殊的定址計算——分段定址。從80386開始的32位微處理器,地址匯流排寬度也是32位元,可以視作扁平(flat)地址空間,不再需要分段定址。  8086的分段定址,是指一個實體地址由段地址(segment selector)與偏移量(offset)兩部分組成,長度各是16位元。其中段地址左移4位(即乘以16)與偏移量相加即為實體地址。例如,06EFh:1234h,表示段地址為06EFh,偏移量為1234h,實體地址為06EF0h + 1234h = 08124h。在計算實體地址時如果發生上溢位,8086處理器捨棄進位。例如,FFFFh:0010h所對應的實體地址為00000h.  一個20位的實體地址對應著4096個不同的"段地址:偏移量"的組合。這是因為,偏移量的最低4位對應於實體地址的最低四位,而偏移量的高12位共有4096個取值。  段地址所對應的實體地址的粒度是16位元組(=2),稱之為paragraph。  段地址確定後,偏移量的取值最多為64KiB(=65536),這就是分段定址的最大的線性地址空間。實際上在8086處理器上,作業系統分配的線性地址空間可以是不大於64KiB的任意數量。程式可以自由訪問整個實體記憶體空間,作業系統沒有任何許可權限制或監管(supervision)。  8086處理器有20根地址匯流排引腳(pins),因此實體記憶體空間最大為2=1MiB=1,048,576位元組。這還包括了IO記憶體。因此使用8086處理器的計算機的主存的容量少於1MiB,最常見的主存容量是640KiB。  由於X86指令集的向後相容原則,計算實體地址時,段地址左移4位被所有後繼支援真實模式的X86處理器所繼承。80286是使用24位寬地址匯流排的16位微處理器,如果要在整個2=16MiB物理儲存空間定址,就必須採用其它方式,即保護模式定址,這時16位的段地址是指向段描述符表(segment descriptors table)的一個包含24位基地址的條目,基地址加上16位偏移量即為24位的實體地址。 在8086上執行的編譯器,一般支援兩種C語言的指標:近指標(near)與遠指標(far)。近指標是16位的地址偏移值,隱式與程式的程式碼段地址或資料段地址結合使用以確定實體地址。遠指標是32位的“段地址:偏置量”成對出現,用以確定20位的實體地址。某些編譯器支援“巨指標”(huge),類似於遠指標。但巨指標的地址運算是線性20位;而遠指標的地址運算在16位偏移值溢位時不影響段地址部分,因此遠指標的線性部分是16位。  為了避免對大量的指標、資料結構、函式指出是“近”還是“遠”,編譯器提供了記憶體模式(memory model)給出了預設的記憶體訪問方式: 預編譯庫對不同的記憶體模式要分別編譯為相應版本。

  8位機上的程式可以不考慮段地址直接以.com可執行檔案以“微模式”在8086上執行。這是當時8086與MS-DOS作為新平臺取得市場成功的關鍵原因——大量已存的CP/M應用程式能很快得到利用。

  以下8086/8088彙編原始碼是將給定大小的資料塊從一個位置拷貝到另一個位置的叫做codice_1的子程式。每次拷貝一個位元組,資料移動和迴圈邏輯採用16位操作。  上面的程式碼使用BP(基指標)暫存器建立一個呼叫幀(包含子程式執行過程中的所有引數和區域性變數的棧的區域)。這種呼叫約定支援可重入和遞迴程式碼,大多數類ALGOL語言上世紀50年代後期就已採用這種約定。ES段暫存器儲存在堆疊上,並用DS段暫存器中的值替換,於是指令 會在相同的源資料段和目的資料段之間操作。在返回前,子程式恢復了ES暫存器以前的值。  上面的子程式是一種比較麻煩的拷貝成塊資料的方法。若源資料區域和目的資料區域都是處於單個65,536位元組的段中(上述程式的要求),使用8086的塊codice_2指令更有優勢。上面的迴圈部分可以替換為:  這種方法每次可以拷貝一個字。codice_3指令使下面的codice_4重複直至CX=0,重複之時自動遞增SI和DI。另外,codice_5或codice_6指令可以用來一次拷貝單個位元組或雙字。大多數彙編器在codice_3指令用在codice_4之前為codice_9的情況下都會正確彙編。  如果被中斷,這個程式也能正確執行,因為程式計數器會繼續指向codice_3指令,知道塊拷貝已經結束。拷貝會在中斷服務程式將控制恢復的時候繼續。

  外部匯流排作為資料與地址的複用,降低了CPU的效能。取16位元或8位元資料需要4個時鐘週期。指令的長度為1-6個位元組,取指令與執行是併發完成的。CPU內的匯流排介面單元把取到的指令儲存在6位元組的預取佇列中。  8086涉及記憶體訪問的指令,包括跳轉(jump)指令需要比8080與8085更多的時間,原因在於:  8086的後繼處理器的記憶體訪問效能大大增強了。80186與80286有專門的地址計算硬體,節約了很多時間週期。80286的外部地址匯流排與資料匯流排是分開各自專用的。

  8086/8088可以連線上專用的數學協處理器以增加浮點計算效能。標準的數學協處理是Intel 8087,執行80位浮點數運算。

  第一個以8086為基礎的商業微電腦是Mycron2000。  IBM Displaywriter文書處理機也使用8086。在大部分顯要的所有微處理器中,IBM PC使用了更窄的記憶體匯流排版本的8086,也就是Intel 8088。 8086CPU結構上的一個重要特點是分為二大部分,即匯流排介面單元BIU和執行單元EU,其中BIU負責外部資訊交換,EU負責指令執行,二者合理分工、並行工作,工作效率比此前的CPU明顯提高,常稱之為流水線結構。

  8086和8088支援兩種硬體模式:最大模式和最小模式。最大模式是用在大型應用中的多重處理,並且也是支援8087處理器的必需。該模式通常硬體化在電路中,不能由軟體改變。具體來說,#33引腳(MN/)是連載高電壓還是接地決定了模式。改變引腳#33的狀態就改變了其他特定引腳的功能,這些引腳中大多數是CPU處理(區域性)匯流排的。IBM PC和PC/XT使用工作在最大模式的Intel 8088,讓CPU與PC或PC/XT主辦上安裝在數學協同處理器插口的可選8087協同處理器。(PC和PC/XT可能因為其他原因而要求用最大模式,比如要支援DMA控制器。)

  2018年6月8日,英特爾在官網上開啟了限量抽獎活動,獎品為i7-8086k,限量生產8086個。

  "Article based on Intel 8086 at FOLDOC,used with permission."
Intel 8086(亦稱之為iAPX 86)是由英特爾公司於1976年初開始設計,1978年年中發表的Intel第一款16位元微處理器。隨後於1979年,又推出了Intel 8088,它在晶片的外部連線椎使用8位資料匯流排(允許使用更廉價和更少積體電路)的支援,成為8086的一個低成本的簡化產品,並用在IBM PC的原始設計中的處理器(包括廣為人所知的IBM PC XT)中而被人知曉。