80X86微處理器
一痕貌、80x86系列微處理器概況:
8086、8088陨亡、80286、80386深员、80486之后型號(hào)為Pentium负蠕、PentiumⅡ......
- 集成度:是指cpu芯片中所包含的晶體管數(shù),單位為萬/片倦畅。
- 主頻:是指芯片所使用的主時(shí)鐘頻率遮糖,它直接影響計(jì)算機(jī)的運(yùn)行速度。
- 數(shù)據(jù)總線:是計(jì)算機(jī)內(nèi)各個(gè)組件之間傳輸數(shù)據(jù)傳輸?shù)耐ǖ赖停皟?nèi)部總線寬度”是CPU芯片內(nèi)部數(shù)據(jù)傳輸?shù)膶挾龋ㄎ粩?shù))止吁;“外部總線寬度”是CPU與外部交換數(shù)據(jù)時(shí)的數(shù)據(jù)寬度。顯然數(shù)據(jù)總線位數(shù)越多燎悍,數(shù)據(jù)交換越快。
- 地址總線:在對(duì)存儲(chǔ)器和I/O端口進(jìn)行訪問時(shí)盼理,傳送由CPU提供的要訪問的存儲(chǔ)器單元或者I/O端口地址信息的總線谈山,其寬度決定了處理器直接訪問主存容量大小。
如8086有20根地址線,使用這20根地址線上不同地址信息的組合,可直接對(duì)2020=1M個(gè)存儲(chǔ)單元進(jìn)行訪問畏腕;PentiumⅡ有36根地址線助赞,因此它可直接尋址的最大范圍為236=64G。
為了滿足微型計(jì)算機(jī)對(duì)存儲(chǔ)器系統(tǒng)高速度箍铲、大容量、低成本的要求,目前微型計(jì)算機(jī)系統(tǒng)采用下圖的三級(jí)存儲(chǔ)器組織結(jié)構(gòu)触机,即由高速緩沖器Cache、主存、外存組成儡首。
8086有16根數(shù)據(jù)引腳片任,可以存取8位或16位數(shù)據(jù);有20根地址引腳蔬胯,可以直接尋址1M(220)存儲(chǔ)單元和64K個(gè)I/O端口对供。在8086推出后不久,為方便原8位機(jī)用戶氛濒,Intel公司很快推出了8088微處理器产场,其指令系統(tǒng)與8086完全兼容,CPU內(nèi)部結(jié)構(gòu)仍為16位舞竿,但外部數(shù)據(jù)總線是8位的京景,這樣設(shè)計(jì)的目的主要是為了與原有的8位外圍接口芯片兼容。同時(shí)炬灭,IBM以8088 CPU為核心組成了IBM PC醋粟、 PCIXT等準(zhǔn)16位微型計(jì)算機(jī),由于其性價(jià)比高重归,很快占領(lǐng)了市場(chǎng)米愿。
二、8086/8088內(nèi)部結(jié)構(gòu):
1.總線接口單元BIU(BUS Interface Unit)——負(fù)責(zé)完成CPU與存儲(chǔ)器或I/O設(shè)備之間的數(shù)據(jù)傳送鼻吮。
BIU組成
(1)4個(gè)16位的段寄存器【代碼段寄存器CS(Code Segment)育苟、數(shù)據(jù)段寄存器DS(Data Segment)、堆棧段寄存器SS(Stack Segment)和附加數(shù)據(jù)段寄存器ES(Extra Segment)椎木;】
(2)1個(gè)16位的指針指令寄存器IP
(2)一個(gè)20位的地址加法器
(3)6個(gè)字節(jié)的指令緩沖器
(4)一個(gè)與EU通信的內(nèi)部寄存器和總線控制電路违柏。
8086CPU的地址引腳有20根,能提供20位的地址信息香椎,可直接對(duì)1M個(gè)存儲(chǔ)單元進(jìn)行訪問漱竖,但CPU內(nèi)部可用來提供地址信息的寄存器都是16位的,那么如何用16位寄存器實(shí)現(xiàn)20位地址的尋址呢畜伐?8086/8088采用了段結(jié)構(gòu)的內(nèi)存管理的方法馍惹。
??(1)段寄存器:將指令代碼和數(shù)據(jù)分別存儲(chǔ)在代碼段、數(shù)據(jù)段玛界、堆棧段万矾、附加數(shù)據(jù)段中,這些段的段地址分別由段寄存器CS慎框、DS良狈、SS、ES提供笨枯。
代碼段寄存器CS:存儲(chǔ)程序當(dāng)前使用的代碼段的段地址薪丁。代碼段用來存放程序的指令代碼遇西。下一條要讀取指令在代碼段中的偏移地址由指令指針寄存器IP提供;
數(shù)據(jù)段寄存器DS:用來存放程序當(dāng)前使用的數(shù)據(jù)段的段地址窥突。一般來說努溃,程序中所用到的原始數(shù)據(jù)、中間結(jié)果以及最終結(jié)果都存放在數(shù)據(jù)段中阻问;
堆棧段寄存器SS:用來存放程序當(dāng)前所使用的堆棧段的段地址梧税。堆棧是在存儲(chǔ)器中開辟的一個(gè)特定區(qū)域;
附加數(shù)據(jù)段寄存器ES:用來存放程序當(dāng)前使用的附加數(shù)據(jù)段的段地址称近。附加數(shù)據(jù)段通常用于存放字符串操作時(shí)的目的字符串第队。
??(2)指令指針寄存器: 指令指針寄存器IP用來存放下一條要讀取的指令在代碼段中的偏移地址。IP在程序運(yùn)行中能自動(dòng)加1修正刨秆,從而使其始終存放的是下一條要讀取的指令在代碼段的偏移地址凳谦。由于CS和IP的內(nèi)容決定了程序的執(zhí)行順序,因此程序員不能直接用賦值指令對(duì)其內(nèi)容進(jìn)行修改衡未。有些指令能使IP和CS的值改變(如跳轉(zhuǎn)指令)或使其值壓入堆検矗或從堆棧中彈出恢復(fù)原值(如子程序調(diào)用指令和返回指令)。
??(3)20位的地址加法器: CPU提供的用來對(duì)存儲(chǔ)單元進(jìn)行訪問的20位地址是由BIU中的地址加法器產(chǎn)生的缓醋。
存儲(chǔ)器中每個(gè)存儲(chǔ)單元的地址可有以下兩種表示方式:
(1)邏輯地址:表達(dá)形式為段地址:段內(nèi)偏移地址
段內(nèi)偏移地址又稱為“有效地址EA(Effective Address)如失。
讀指令時(shí),段地址由代碼段寄存器CS提供送粱,偏移地址由指令指針寄存器IP提供褪贵;
讀取或存儲(chǔ)操作數(shù)時(shí),段地址由DS抗俄、ES或SS提供脆丁,段內(nèi)偏移地址由指令給出。
(2)物理地址:CPU與存儲(chǔ)器進(jìn)行數(shù)據(jù)交換時(shí)在地址總線上提供的20位地址信息稱為物理地址动雹。
段寄存器內(nèi)容左移四位后(相當(dāng)于乘以10H)得到段基址(段內(nèi)第一個(gè)存儲(chǔ)單元的物理地址)槽卫。
把段內(nèi)偏移地址和段基址同時(shí)送到BIU中的地址加法器,形成一個(gè)20位的物理地址胰蝠,從而實(shí)現(xiàn)對(duì)存儲(chǔ)單元的訪問晒夹。
**物理地址=段地址×10H+段內(nèi)偏移地址 **
例如假設(shè)當(dāng)前(CS)=20A8H,(IP)=2008H姊氓,那么,下一條從內(nèi)存中讀取的指令所在存儲(chǔ)單元的物理地址為:20A8H×10H+ 2008H=22A88H喷好。
對(duì)于任何一個(gè)物理地址來說翔横,可以唯一被包含在一個(gè)邏輯段中,也可以包含在多個(gè)重疊的邏輯段中梗搅,只要能得到它所在段的首地址和段內(nèi)的相對(duì)地址禾唁,就可以對(duì)它進(jìn)行訪問效览。即一個(gè)物理地址可以對(duì)應(yīng)多個(gè)邏輯地址。
??(4)指令隊(duì)列緩沖器:8086的指令隊(duì)列有6個(gè)字節(jié)荡短,8088的指令隊(duì)列有4個(gè)字節(jié)丐枉。對(duì)8086而言,當(dāng)指令隊(duì)列出現(xiàn)2個(gè)空字節(jié)掘托,對(duì)8088而言瘦锹,指令隊(duì)列出現(xiàn)1個(gè)空字節(jié)時(shí),BIU就自動(dòng)執(zhí)行一次取指令周期闪盔,將下一條要執(zhí)行的指令從內(nèi)存單元讀入指令隊(duì)列弯院。它們采用“先進(jìn)先出”原則,按順序存放泪掀,并按順序取到EU中去執(zhí)行听绳。
指令隊(duì)列的引入使得EU和BIU可并行工作,即BIU在讀指令時(shí)异赫,并不影響EU單元執(zhí)行指令椅挣,EU單元可以連續(xù)不斷地直接從指令隊(duì)列中取到要執(zhí)行的指令代碼,從而減少了CPU為取指令而等待的時(shí)間塔拳,提高了CPU的利用率鼠证,加快了整機(jī)的運(yùn)行速度。
2.執(zhí)行單元EU(Execution Unit)——不與系統(tǒng)外部直接相連蝙斜,它的功能只是負(fù)責(zé)執(zhí)行命令名惩。 EU執(zhí)行的指令從BIU的指令隊(duì)列緩沖器中直接得到。執(zhí)行指令時(shí)若需要從存儲(chǔ)器或I/O端口讀寫操作數(shù)時(shí)孕荠,由EU向BIU發(fā)出請(qǐng)求娩鹉,再由BIU對(duì)存儲(chǔ)器或I/O端口進(jìn)行訪問。
EU組成
(1)16位算數(shù)邏輯單元(ALU):進(jìn)行算術(shù)和邏輯運(yùn)算稚伍。
(2)16位的表示寄存器FLAGS:存放CPU運(yùn)算的狀態(tài)和控制標(biāo)志弯予。
(3)通用寄存器:包括4個(gè)16位數(shù)據(jù)寄存器AX、BX个曙、CX锈嫩、DX和4個(gè)16位指針與變址寄存器SP、BP與SI垦搬、DI呼寸。
(4)數(shù)據(jù)暫存寄存器:暫存參加運(yùn)算的數(shù)據(jù)
(5)EU控制電路:它是控制、定時(shí)與狀態(tài)邏輯電路猴贰,接收從BIU中指令隊(duì)列取來的指令对雪,經(jīng)過指令譯碼形成各種定時(shí)控制信號(hào),對(duì)EU的各個(gè)部件實(shí)現(xiàn)特定的定時(shí)操作米绕。
三瑟捣、8086/8088寄存器結(jié)構(gòu):
1.通用寄存器:
(8個(gè)):包括四個(gè)數(shù)據(jù)寄存器AX(AH/AL), BX(BH/BL),CX(CH/CL),DX(DH/DL)馋艺,兩個(gè)地址指針寄存器(SP,BP)和兩個(gè)變址寄存器(SI,DI)。
1.數(shù)據(jù)寄存器AX迈套、BX捐祠、CX、DX
??數(shù)據(jù)寄存器一般用于存放參與運(yùn)算的操作數(shù)或運(yùn)算結(jié)果桑李。每個(gè)數(shù)據(jù)寄存器都是16位的踱蛀,但又可將高、低8位分別作為兩個(gè)獨(dú)立的8位寄存器來用芙扎。高8位分別記作AH星岗、BH、CH戒洼、DH俏橘,低8位分別記作AL,BL圈浇,CL寥掐,DL。注意:8086/8088 CPU的14個(gè)寄存器除了這4個(gè)16位寄存器能分別當(dāng)作兩個(gè)8位寄存器來用之外磷蜀,其它寄存器都不能如此使用召耘。
?? AX(Accumulator)稱為累加器:用該寄存器存放運(yùn)算結(jié)果可使指令簡(jiǎn)化,提高指令的執(zhí)行速度褐隆。此外污它,所有的I/O指令都使用該寄存器與外設(shè)端口交換信息。
??BX(Base)稱為基址寄存器:8086/8088CPU中有兩個(gè)基址寄存器BX和BP庶弃。BX用來存放操作數(shù)在內(nèi)存中數(shù)據(jù)段內(nèi)的偏移地址衫贬,BP用來存放操作數(shù)在堆棧段內(nèi)的偏移地址。
??CX(Counter)稱為計(jì)數(shù)器:在設(shè)計(jì)循環(huán)程序時(shí)使用該寄存器存放循環(huán)次數(shù)歇攻,可使程序指令簡(jiǎn)化固惯,有利于提高程序的運(yùn)行速度。
??DX(Data)稱為數(shù)據(jù)寄存器:在寄存器間接尋址的I/O指令中存放I/O端口地址缴守;在做雙字長(zhǎng)乘除法運(yùn)算時(shí)葬毫,DX與AX一起存放一個(gè)雙字長(zhǎng)操作數(shù),其中DX存放高16位數(shù)屡穗。
2. 地址指針寄存器SP贴捡、BP
??SP(Stack Pointer)稱為堆棧指針寄存器。在使用堆棧操作指令(PUSH或POP)對(duì)堆棧進(jìn)行操作時(shí)村砂,每執(zhí)行一次進(jìn)椑谜或出棧操作,系統(tǒng)會(huì)自動(dòng)將SP的內(nèi)容減2或加2,以使其始終指向棧頂源祈。
??BP(Base Pointer)稱為基址寄存器。作為通用寄存器色迂,它可以用來存放數(shù)據(jù)香缺,但更經(jīng)常更重要的用途是存放操作數(shù)在堆棧段內(nèi)的偏移地址。
3.變址寄存器SI歇僧、DI
??SI(Source Index)稱為源變址寄存器图张。
??DI(Destination Index)稱為目的變址寄存器。
??這兩個(gè)寄存器通常用在字符串操作時(shí)存放操作數(shù)的偏移地址诈悍,其中SI存放源串在數(shù)據(jù)段內(nèi)的偏移地址祸轮,DI存放目的串在附加數(shù)據(jù)段內(nèi)的偏移地址。
2.段寄存器:
??為了對(duì)1M個(gè)存儲(chǔ)單元進(jìn)行管理侥钳,8086/8088對(duì)存儲(chǔ)器進(jìn)行分段管理适袜,即將程序代碼或數(shù)據(jù)分別放在代碼段、數(shù)據(jù)段舷夺、堆棧段或附加數(shù)據(jù)段中苦酱,每個(gè)段最多可達(dá)64K個(gè)存儲(chǔ)單元。段地址分別放在對(duì)應(yīng)的段寄存器中给猾,代碼或數(shù)據(jù)在段內(nèi)的偏移地址由有關(guān)寄存器或立即數(shù)給出疫萤。
CS(Code Segment)——代碼段寄存器。用來存儲(chǔ)程序當(dāng)前使用的代碼段的段地址敢伸。
DS(Data Segment)——數(shù)據(jù)段寄存器扯饶。用來存放程序當(dāng)前使用的數(shù)據(jù)段的段地址。
SS(Stack Segment)——堆棧段寄存器池颈。用來存放程序當(dāng)前所使用的堆棧段的段地址尾序。
ES(Extra Segment)——附加數(shù)據(jù)段寄存器。用來存放程序當(dāng)前使用的附加數(shù)據(jù)段的段地址饶辙。
下圖為段寄存器與提供段內(nèi)偏移地址的寄存器之間的默認(rèn)組合
3.控制寄存器:
IP(Instruction Pointer)——指令指針寄存器蹲诀。用來存放下一條要讀取的指令在代碼段內(nèi)的偏移地址。用戶程序不能直接訪問IP弃揽。
FLAGS——標(biāo)志寄存器脯爪。它是一個(gè)16位的寄存器,但只用了其中9位矿微,這9位包括6個(gè)狀態(tài)標(biāo)志位痕慢,3個(gè)控制標(biāo)志位,如圖所示涌矢。
1. 狀態(tài)標(biāo)志位(6位)
??狀態(tài)標(biāo)志位用來反映算術(shù)和邏輯運(yùn)算結(jié)果的一些特征掖举。下面分別介紹這6個(gè)狀態(tài)標(biāo)志位的功能。
??CF(Carry Flag)——進(jìn)位標(biāo)志娜庇。當(dāng)進(jìn)行加減運(yùn)算時(shí)塔次,若最高位發(fā)生進(jìn)位或借位則CF為1方篮,否則為0。通常用于判斷無符號(hào)數(shù)運(yùn)算結(jié)果是否超出了計(jì)算機(jī)所能表示的無符號(hào)數(shù)的范圍励负。
??PF(Parity Flag)——奇偶標(biāo)志位藕溅。當(dāng)指令執(zhí)行結(jié)果的低8位中含有偶數(shù)個(gè)1時(shí),PF為1继榆,否則為0巾表。
??AF(Auxiliary Flag)——輔助進(jìn)位標(biāo)志位。當(dāng)執(zhí)行一條加法或減法運(yùn)算指令時(shí)略吨,若結(jié)果的低字節(jié)的低4位向高4位有進(jìn)位或借位集币,則AF為1,否則為0翠忠。
??ZF(Zero Flag)——零標(biāo)志位鞠苟。若當(dāng)前的運(yùn)算結(jié)果為0,則ZF為1负间,否則為0偶妖。
??SF(Sign Flag)——符號(hào)標(biāo)志位。當(dāng)運(yùn)算結(jié)果的最高位為1時(shí)政溃,SF=1趾访,否則為0。
??OF(Overflow Flag)——溢出標(biāo)志位董虱。當(dāng)運(yùn)算結(jié)果超出了帶符號(hào)數(shù)所能表示的數(shù)值范圍扼鞋,即溢出時(shí),OF=1愤诱,否則為0云头。用來判斷帶符號(hào)數(shù)運(yùn)算結(jié)果是否溢出。
例如: 設(shè)變量x=11101111B淫半,y=11001000B溃槐,X=0101101000001010B,Y=01001100 10100011B科吭,請(qǐng)問分別執(zhí)行x+y和X+Y操作后標(biāo)志寄存器中各狀態(tài)位的狀態(tài)如何昏滴?
2. 控制標(biāo)志位(3位)
用來控制CPU的操作,由程序設(shè)置或清除对人。它們是:
TF(Trap Flag)——跟蹤(陷阱)標(biāo)志位谣殊。是為測(cè)試程序的方便而設(shè)置。若將TF置1牺弄,CPU處于單步工作方式姻几。
IF(Interrupt Flag)——中斷允許標(biāo)志位。是用來控制可屏蔽中斷的控制標(biāo)志位。若將IF置1蛇捌,表示允許CPU接受外部從INTR引腳上發(fā)來的可屏蔽中斷請(qǐng)求抚恒;若用CLI指令將IF清0,則禁止CPU接受可屏蔽中斷請(qǐng)求信號(hào)络拌。
DF(Direction Flag)——方向標(biāo)志位柑爸。若將DF置1,串操作按減地址方式進(jìn)行盒音,也就是說,從高地址開始馅而,每操作一次地址自動(dòng)遞減祥诽;否則按增地址方式進(jìn)行。
四瓮恭、8086/8088存儲(chǔ)器和I/O組織
<一>.8086/8088存儲(chǔ)器組織
1.8086/8088存儲(chǔ)器結(jié)構(gòu)
??8086/8088有20條地址線雄坪,可直接對(duì)1 M個(gè)存儲(chǔ)單元進(jìn)行訪問。每個(gè)存儲(chǔ)單元存放一個(gè)字節(jié)型數(shù)據(jù)屯蹦,且每個(gè)存儲(chǔ)單元都有一個(gè)20位的地址维哈,這1 M個(gè)存儲(chǔ)單元對(duì)應(yīng)的地址為00000H~FFFFFH,如圖所示登澜。
一個(gè)存儲(chǔ)單元中存放的信息稱為該存儲(chǔ)單元的內(nèi)容阔挠。
?如00001H單元的內(nèi)容為9FH,記為:(00001H)=9FH脑蠕。
?如從地址0011FH開始的兩個(gè)連續(xù)單元中存放一個(gè)字型數(shù)據(jù)购撼,則該數(shù)據(jù)為DF46H,記為:(0011FH)=DF46H谴仙。
?若存放的是雙字型數(shù)據(jù)(32位二進(jìn)制數(shù))迂求,這種類型的數(shù)據(jù)要占用連續(xù)的4個(gè)存儲(chǔ)單元,同樣晃跺,低字節(jié)存放在低地址單元揩局,高字節(jié)存放在高地址單元。如從地址E800AH開始的連續(xù)4個(gè)存儲(chǔ)單元中存放了一個(gè)雙字型數(shù)據(jù)掀虎,則該數(shù)據(jù)為66A65E65H凌盯,記為:(E800AH)=66A65E65H。
??8086的1M存儲(chǔ)空間實(shí)際上分為兩個(gè)512KB的存儲(chǔ)體涩盾,又稱存儲(chǔ)庫(kù)十气,分別叫高位庫(kù)和低位庫(kù)。如下圖:
地址總線A19~A1可同時(shí)對(duì)高春霍、低位庫(kù)的存儲(chǔ)單元尋址砸西,A0和 BHE非 用于對(duì)庫(kù)的選擇。
當(dāng)A0=0時(shí),選擇偶數(shù)地址的低位庫(kù)芹枷;
當(dāng)BHE非=0時(shí)衅疙,選擇奇數(shù)地址的高位庫(kù);
當(dāng)兩者均為0時(shí)鸳慈,則同時(shí)選中高低位庫(kù)饱溢。
需注意的是,對(duì)于規(guī)則字(從偶數(shù)地址開始存放的字)的讀/寫操作只需一個(gè)總線周期走芋,而非規(guī)則字(從奇數(shù)地址開始存放的字)的讀/寫操作需兩個(gè)總線周期绩郎。
在8088系統(tǒng)中,可直接尋址的存儲(chǔ)空間同樣也是1 MB翁逞,但其存儲(chǔ)器的結(jié)構(gòu)與8086有所不同肋杖,它的1MB 存儲(chǔ)空間同屬于一個(gè)單一的存儲(chǔ)體,即存儲(chǔ)體為1 M×8位挖函。它與總線之間的連接方式很簡(jiǎn)單状植,其20根地址線A19~A0與8根數(shù)據(jù)線分別與8088 CPU對(duì)應(yīng)的地址線和數(shù)據(jù)線相連。8088 CPU每訪問一次存儲(chǔ)器只能讀/寫一個(gè)字節(jié)信息怨喘,因此在8088系統(tǒng)的存儲(chǔ)器中津畸,字型數(shù)據(jù)需要兩次訪問存儲(chǔ)器才能完成讀/寫操作。
2.存儲(chǔ)器的段結(jié)構(gòu):
??8086/8088 CPU中有關(guān)可用來存放地址的寄存器如IP必怜、SP等都是16位的肉拓,故只能直接尋址64 KB。為了對(duì)1 M個(gè)存儲(chǔ)單元進(jìn)行管理梳庆,8086/8088采用了段結(jié)構(gòu)的存儲(chǔ)器管理方法帝簇。
??8086/8088將整個(gè)存儲(chǔ)器分為許多邏輯段,每個(gè)邏輯段的容量小于或等于64 KB靠益,允許它們?cè)谡麄€(gè)存儲(chǔ)空間中浮動(dòng)丧肴,各個(gè)邏輯段之間可以緊密相連,也可以互相重疊胧后。
4.堆棧操作:
??堆棧是在存儲(chǔ)器中開辟的一個(gè)特定區(qū)域芋浮。開辟堆棧的目的主要有以下兩點(diǎn):
??(1) 存放指令中的操作數(shù)(變量)。此時(shí)壳快,對(duì)操作數(shù)進(jìn)行訪問時(shí)纸巷,段地址由堆棧段寄存器SS來提供,操作數(shù)在該段內(nèi)的偏移地址由堆棧指針SP或基址寄存器BP來提供眶痰。
??(2) 保護(hù)斷點(diǎn)和現(xiàn)場(chǎng)瘤旨。此為堆棧的主要功能。
??進(jìn)棧和出棧操作過程:
??在執(zhí)行進(jìn)棧和出棧操作時(shí)竖伯,段地址由堆棧段寄存器SS提供存哲,段內(nèi)偏移地址由堆棧指針寄存器SP提供因宇,當(dāng)堆棧空時(shí)祟偷,SP指向棧底察滑。每進(jìn)行一次進(jìn)棧操作,SP值減2修肠;每進(jìn)行一次出棧操作贺辰,SP值加2。在進(jìn)棧和出棧操作過程中嵌施,SP始終指向棧頂饲化。
<二>.8086/8088I/O組織
??8086/8088系統(tǒng)和外部設(shè)備之間是通過I/O接口電路來聯(lián)系的。每個(gè)I/O接口都有一個(gè)或幾個(gè)端口吗伤。在微機(jī)系統(tǒng)中每個(gè)端口分配一個(gè)地址號(hào)滓侍,稱為端口地址。一個(gè)端口通常為I/O接口電路內(nèi)部的一個(gè)寄存器或一組寄存器
??8086/8088CPU用地址總線的低16位作為對(duì)8位I/O端口的尋址線牲芋,所以8086/8088系統(tǒng)可訪問的8位I/O端口有65536(64K)個(gè)。兩個(gè)編號(hào)相鄰的8位端口可以組成一個(gè)16位的端口捺球。
??8086CPU對(duì)I/O設(shè)備的讀寫與對(duì)存儲(chǔ)器的讀寫操作類似缸浦。當(dāng)CPU與偶地址的I/O端口實(shí)現(xiàn)16位數(shù)據(jù)的存取操作時(shí),可在一個(gè)總線周期內(nèi)完成氮兵;當(dāng)CPU與奇地址的I/O端口實(shí)現(xiàn)16位數(shù)據(jù)的存取操作時(shí)裂逐,要占用兩個(gè)總線周期才能完成。
??需要說明的是泣栈,8086/8088 CPU的I/O指令可以用16位的有效地址A15A0來尋址0000FFFFH共64 K個(gè)端口卜高,但I(xiàn)BM PC系統(tǒng)中只使用了A9~A0 10位地址來作為I/O端口的尋址信號(hào),因此南片,其I/O端口的地址僅為000 ~3FFH共1K個(gè)掺涛。