chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>電子百科>主機(jī)配件>cpu>

一文看懂8086CPU寄存器的特點(diǎn)和作用

2018年04月16日 11:36 網(wǎng)絡(luò)整理 作者: 用戶評(píng)論(0
關(guān)鍵字:寄存器(116233)8086(18426)

  8086數(shù)據(jù)寄存器介紹

  通用寄存器

  在8086CPU中,通用寄存器有8個(gè),分別是AX,BX,CX,DX,SP,BP,SI,DI

  下面介紹這幾個(gè)通用寄存器:

  數(shù)據(jù)寄存器(AX,BX,CX,DX):

  數(shù)據(jù)寄存器有AX,BX,CX,DX四個(gè)組成,

  由于在8086之前的CPU為8位CPU,所以為了兼容以前的8位程序,在8086CPU中,每一個(gè)數(shù)據(jù)寄存器都可以當(dāng)做兩個(gè)單獨(dú)的寄存器來使用,由此,每一個(gè)16位寄存器就可以當(dāng)做2個(gè)獨(dú)立的8位寄存器來使用了。

  AX寄存器可以分為兩個(gè)獨(dú)立的8位的AH和AL寄存器;

  BX寄存器可以分為兩個(gè)獨(dú)立的8位的BH和BL寄存器;

  CX寄存器可以分為兩個(gè)獨(dú)立的8位的CH和CL寄存器;

  DX寄存器可以分為兩個(gè)獨(dú)立的8位的DH和DL寄存器;

  除了上面4個(gè)數(shù)據(jù)寄存器以外,其他寄存器均不可以分為兩個(gè)獨(dú)立的8位寄存器;

  注意在上面標(biāo)志中的“獨(dú)立”二字,這兩個(gè)字表明AH和AL作為8位寄存器使用時(shí),可以看做它們是互不相關(guān)的,也就是看做兩個(gè)完全沒有聯(lián)系的寄存器X和Y即可,比如指令MOVAH,12H,CPU在執(zhí)行時(shí)根本就不會(huì)知道AL中是什么鬼東西,因?yàn)樗徽J(rèn)識(shí)AH。

  下面給出一幅16位數(shù)據(jù)寄存器的結(jié)構(gòu)圖:

  表示16位寄存器AX可以表示成兩個(gè)8位寄存器,

  其中AH表示高位的8位寄存器,AL表示低位的8位寄存器。

一文看懂8086CPU寄存器的特點(diǎn)和作用

  AX寄存器:

  如上所說,AX的另外一個(gè)名字叫做累加寄存器或者簡稱為累加器,其可以分為2個(gè)獨(dú)立的8位寄存器AH和AL;

  在寫匯編程序時(shí),AX寄存器可以說是使用率最高的寄存器(不過,總共才那么14個(gè)寄存器,哪一個(gè)不經(jīng)常使用咯?),既然AX是數(shù)據(jù)寄存器的話,那么理所當(dāng)然,其可以用來存放普通的數(shù)據(jù),由于其是16位寄存器,自然也就可以存放16位數(shù)據(jù),但是因?yàn)槠溆挚梢苑譃?個(gè)獨(dú)立的8位寄存器AH和AL,所以,在AH和AL中又可以獨(dú)立的存放2個(gè)8位的數(shù)據(jù),可以有以下代碼(即將AX當(dāng)做普通的寄存器使用,即可以用來暫存數(shù)據(jù)):

  MOVAX,1234H;向寄存器AX傳入數(shù)據(jù)1234H

  MOVAH,56H;向寄存器AX的高8位寄存器AH中傳入數(shù)據(jù)56H

  MOVAL,78H;向寄存器AX的低8位寄存器AL中傳入數(shù)據(jù)78H

  3條語句的執(zhí)行過程如下:

  而既然AX又被稱作為累加器,自然其還有一點(diǎn)點(diǎn)特殊的地方的:

  AX寄存器還具有的特殊用途是在使用DIV和MUL指令時(shí)使用,DIV在8086CPU中是除法指令,而在使用除法的時(shí)候有兩種情況,即除數(shù)可以是8位或者是16位的,而且除數(shù)可以存放在寄存器中或者是內(nèi)存單元中,而至于被除數(shù)的話,自然,應(yīng)該由AX來代替了,當(dāng)除數(shù)是8位時(shí),被除數(shù)一定會(huì)是16位的,并且默認(rèn)是放在AX寄存器中,而當(dāng)除數(shù)是16位時(shí),被除數(shù)一定是32位的,因?yàn)锳X是16位寄存器,自然,放不下32位的被除數(shù),所以,在這里還需要使用另一個(gè)16位寄存器DX,其中DX存放32位的被除數(shù)的高16位,而AX則存放32位的被除數(shù)的低16位,同時(shí),AX的作用還不僅僅是用來保存被除數(shù)的,當(dāng)除法指令執(zhí)行完成以后,如果除數(shù)是8位的,則在AL中會(huì)保存此次除法操作的商,而在AH中則會(huì)保存此次除法操作的余數(shù),當(dāng)然,如果除數(shù)是16位的話,則AX中會(huì)保存本次除法操作的商,而DX則保存本次除法操作的余數(shù)。

  上面介紹的是AX寄存器在除法操作中的應(yīng)用,下面還需要介紹一下AX在乘法操作中的應(yīng)用,

  當(dāng)使用MUL做乘法運(yùn)算時(shí),兩個(gè)相乘的數(shù)要么都是8位,要么都是16位,如果兩個(gè)相乘的數(shù)都是8位的話,則一個(gè)默認(rèn)是放在AL中,而另一個(gè)8位的乘數(shù)則位于其他的寄存器或者說是內(nèi)存字節(jié)單元中,而如果兩個(gè)相乘的數(shù)都是16位的話,則一個(gè)默認(rèn)存放在AX中,另一個(gè)16位的則是位于16的寄存器中或者是某個(gè)內(nèi)存字單元中。

  同時(shí),當(dāng)MUL指令執(zhí)行完畢后,如果是8位的乘法運(yùn)算,則默認(rèn)乘法運(yùn)算的結(jié)果是保存在AX中,而如果是16位的乘法運(yùn)算的話,則默認(rèn)乘法運(yùn)算的結(jié)果有32位,其中,高位默認(rèn)保存在DX中,而低位則默認(rèn)保存在AX中。

  AX寄存器在DIV指令中的使用:

  MOVDX,0H;設(shè)置32位被除數(shù)的高16位為0H

  MOVAX,8H;設(shè)置32位被除數(shù)的低16位為8H

  MOVBX,2H;設(shè)置16位除數(shù)為2H

  DIVBX;執(zhí)行計(jì)算

  4條語句的執(zhí)行過程如下:

一文看懂8086CPU寄存器的特點(diǎn)和作用

  AX寄存器在MUL指令中的使用:

  MOVAX,800H;設(shè)置16位乘數(shù)為800H

  MOVBX,100H;設(shè)置16位乘數(shù)為100H

  MOVDX,0H;清空用來保存乘法結(jié)果的高16位

  MULBX;執(zhí)行計(jì)算

  BX寄存器:

  首先可以明確的是,BX作為數(shù)據(jù)寄存器,表明其是可以暫存一般的數(shù)據(jù)的,即在某種程度上,它和AX可以暫存一般性數(shù)據(jù)的功能是一樣的,其同樣為了適應(yīng)以前的8位CPU,而可以將BX當(dāng)做兩個(gè)獨(dú)立的8位寄存器使用,即有BH和BL,除了暫存一般性數(shù)據(jù)的功能外,BX作為通用寄存器的一種,BX主要還是用于其專屬功能–尋址(尋址物理內(nèi)存地址)上,BX寄存器中存放的數(shù)據(jù)一般是用來作為偏移地址使用的。

  在8086CPU中,CPU是根據(jù)《段地址:偏移地址》來進(jìn)行尋址操作的,而BX中存放的數(shù)據(jù)表示的是偏移地址的話,自然,便可以通過《段地址:[BX]》的方式來完成尋址操作了。

  為了介紹BX在尋址當(dāng)中的作用,下面我給出一副示意圖:

一文看懂8086CPU寄存器的特點(diǎn)和作用

  上面的示意圖表示:可以令BX=2,然后通過DS:[BX]來訪問到內(nèi)存中段地址為DS,且偏移量為2的內(nèi)存單元了。

  上面介紹的這種尋址方式是BX在尋址中最最簡單的應(yīng)用了,而對(duì)于稍微復(fù)雜的尋址方式,

  還可以依賴于SI,DI,BP等寄存器來一起完成。

  BX寄存器在尋址中的使用:

  MOVBX,5H

  MOVAH,11H

  MOVAH,[BX];設(shè)置AX的值為偏移地址為BX中的值時(shí)所代表的內(nèi)存單元

  3條語句的執(zhí)行過程如下:

一文看懂8086CPU寄存器的特點(diǎn)和作用

  從上圖可以看出,在偏移地址為5時(shí)的內(nèi)存單元中的數(shù)據(jù)位BBH,

一文看懂8086CPU寄存器的特點(diǎn)和作用

  而從這幅圖上面就可以看出,確實(shí)通過[BX]找到了偏移地址為5處的內(nèi)存單元,并且將內(nèi)存單元移入了AH中。

  CX寄存器:

  CX寄存器作為數(shù)據(jù)寄存器的一種呢,其同樣具有和AX,BX一樣的特點(diǎn),即可以暫存一般性的數(shù)據(jù),同時(shí)還可以將其當(dāng)做兩個(gè)獨(dú)立的8位寄存器使用,即有CH和CL兩個(gè)8位寄存器,當(dāng)然,CX也是有其專門的用途的,CX中的C被翻譯為Counting也就是計(jì)數(shù)器的功能,當(dāng)在匯編指令中使用循環(huán)LOOP指令時(shí),可以通過CX來指定需要循環(huán)的次數(shù),而CPU在每一次執(zhí)行LOOP指令的時(shí)候,都會(huì)做兩件事:

  一件就是令CX=CX–1,即令CX計(jì)數(shù)器自動(dòng)減去1;

  還有一件就是判斷CX中的值,如果CX中的值為0則會(huì)跳出循環(huán),而繼續(xù)執(zhí)行循環(huán)下面的指令,當(dāng)然如果CX中的值不為0,則會(huì)繼續(xù)執(zhí)行循環(huán)中所指定的指令。

  CX寄存器在循環(huán)中的使用(輸出5個(gè)白底藍(lán)字的A):

  MOVAX,0B800H

  MOVDS,AX;使用80x25彩色字符模式,內(nèi)存地址0xB8000-0xBFFFFF

  MOVBX,0;從0xB8000開始

  MOVCX,5H;循環(huán)5次

  MOVDX,41H;A的16進(jìn)制為41H

  MOVAX,01110001B;顯示白底藍(lán)字

  s:MOV[BX],DX;顯示ASCII字符

  ADDBX,1

  MOV[BX],AX;設(shè)置字符顯示屬性

  ADDBX,1

  LOOPs

  語句的執(zhí)行過程如下:

一文看懂8086CPU寄存器的特點(diǎn)和作用

  DX寄存器:

  DX寄存器作為數(shù)據(jù)寄存器的一種,同樣具有和AX,BX,CX一樣的特點(diǎn),即可以暫存一般性的數(shù)據(jù),同時(shí)還可以將其當(dāng)做兩個(gè)獨(dú)立的8位寄存器使用,極有DH和DL,同時(shí),DX作為一個(gè)通用寄存器的話,關(guān)于DX在其他方面的用途,當(dāng)在使用DIV指令進(jìn)行除法運(yùn)算時(shí),如果除數(shù)為16位時(shí),被除數(shù)將會(huì)是32位,而被除數(shù)的高16位就是存放在DX中,而且執(zhí)行完DIV指令后,本次除法運(yùn)算所產(chǎn)生的余數(shù)將會(huì)保存在DX中,同時(shí),在執(zhí)行MUL指令時(shí),如果兩個(gè)相乘的數(shù)都是16位的話,那么相乘后產(chǎn)生的結(jié)果顯然需要32位來保存,而這32位的結(jié)果的高16位就是存放在DX寄存器中。

  DX寄存器在DIV指令中的使用(即2293812/256=8960余數(shù)為52):

  MOVDX,0023H;32位被除數(shù)的高16位

  MOVAX,0034H;32位被除數(shù)的低16位

  MOVBX,100H;16的除數(shù)

  DIVBX

  語句的執(zhí)行過程如下:

一文看懂8086CPU寄存器的特點(diǎn)和作用

  可以看到在語句結(jié)束以后,AX=2300H即十進(jìn)制的8960,而DX=34H即十進(jìn)制的52和我們的結(jié)果是一致的。

  8086CPU各類寄存器特點(diǎn)及用途

  8086有14個(gè)16位寄存器,這14個(gè)寄存器按其用途可分為通用寄存器、指令指針、標(biāo)志寄存器和段寄存器等4類。

  1、通用寄存器

  通用寄存器有8個(gè),又可以分成2組,一組是數(shù)據(jù)寄存器(4個(gè)),另一組是指針寄存器及變址寄存器(4個(gè))。

  數(shù)據(jù)寄存器分為:

  AH&AL=AX(accumulator):累加寄存器,常用于運(yùn)算;在乘除等指令中指定用來存放操作數(shù),另外,所有的I/O指令都使用這一寄存器與外界設(shè)備傳送數(shù)據(jù)。

  BH&BL=BX(base):基址寄存器,常用于地址索引;

  CH&CL=CX(count):計(jì)數(shù)寄存器,常用于計(jì)數(shù);常用于保存計(jì)算值,如在移位指令,循環(huán)(loop)和串處理指令中用作隱含的計(jì)數(shù)器。

  DH&DL=DX(data):數(shù)據(jù)寄存器,常用于數(shù)據(jù)傳遞。他們的特點(diǎn)是,這4個(gè)16位的寄存器可以分為高8位:AH,BH,CH,DH.以及低八位:AL,BL,CL,DL。這2組8位寄存器可以分別尋址,并單獨(dú)使用。

  另一組是指針寄存器和變址寄存器,包括:

  SP(StackPointer):堆棧指針,與SS配合使用,可指向目前的堆棧位置;

  BP(BasePointer):基址指針寄存器,可用作SS的一個(gè)相對(duì)基址位置;

  SI(SourceIndex):源變址寄存器可用來存放相對(duì)于DS段之源變址指針;

  DI(DestinationIndex):目的變址寄存器,可用來存放相對(duì)于ES段之目的變址指針。

  這4個(gè)16位寄存器只能按16位進(jìn)行存取操作,主要用來形成操作數(shù)的地址,用于堆棧操作和變址運(yùn)算中計(jì)算操作數(shù)的有效地址。

  2、指令指針I(yè)P(InstructionPointer)

  指令指針I(yè)P是一個(gè)16位專用寄存器,它指向當(dāng)前需要取出的指令字節(jié),當(dāng)BIU從內(nèi)存中取出一個(gè)指令字節(jié)后,IP就自動(dòng)加1,指向下一個(gè)指令字節(jié)。注意,IP指向的是指令地址的段內(nèi)地址偏移量,又稱偏移地址(OffsetAddress)或有效地址(EA,EffectiveAddress)。

  3、標(biāo)志寄存器FR(FlagRegister)

  8086有一個(gè)18位的標(biāo)志寄存器FR,在FR中有意義的有9位,其中6位是狀態(tài)位,3位是控制位。

  OF:溢出標(biāo)志位OF用于反映有符號(hào)數(shù)加減運(yùn)算所得結(jié)果是否溢出。如果運(yùn)算結(jié)果超過當(dāng)前運(yùn)算位數(shù)所能表示的范圍,則稱為溢出,OF的值被置為1,否則,OF的值被清為0。

  DF:方向標(biāo)志DF位用來決定在串操作指令執(zhí)行時(shí)有關(guān)指針寄存器發(fā)生調(diào)整的方向。

  IF:中斷允許標(biāo)志IF位用來決定CPU是否響應(yīng)CPU外部的可屏蔽中斷發(fā)出的中斷請(qǐng)求。但不管該標(biāo)志為何值,CPU都必須響應(yīng)CPU外部的不可屏蔽中斷所發(fā)出的中斷請(qǐng)求,以及CPU內(nèi)部產(chǎn)生的中斷請(qǐng)求。具體規(guī)定如下:

 ?。?)、當(dāng)IF=1時(shí),CPU可以響應(yīng)CPU外部的可屏蔽中斷發(fā)出的中斷請(qǐng)求;

 ?。?)、當(dāng)IF=0時(shí),CPU不響應(yīng)CPU外部的可屏蔽中斷發(fā)出的中斷請(qǐng)求。

  TF:跟蹤標(biāo)志TF。該標(biāo)志可用于程序調(diào)試。TF標(biāo)志沒有專門的指令來設(shè)置或清楚。

 ?。?)如果TF=1,則CPU處于單步執(zhí)行指令的工作方式,此時(shí)每執(zhí)行完一條指令,就顯示CPU內(nèi)各個(gè)寄存器的當(dāng)前值及CPU將要執(zhí)行的下一條指令。

  (2)如果TF=0,則處于連續(xù)工作模式。

  SF:符號(hào)標(biāo)志SF用來反映運(yùn)算結(jié)果的符號(hào)位,它與運(yùn)算結(jié)果的最高位相同。在微機(jī)系統(tǒng)中,有符號(hào)數(shù)采用補(bǔ)碼表示法,所以,SF也就反映運(yùn)算結(jié)果的正負(fù)號(hào)。運(yùn)算結(jié)果為正數(shù)時(shí),SF的值為0,否則其值為1。

  ZF:零標(biāo)志ZF用來反映運(yùn)算結(jié)果是否為0。如果運(yùn)算結(jié)果為0,則其值為1,否則其值為0。在判斷運(yùn)算結(jié)果是否為0時(shí),可使用此標(biāo)志位。

  AF:下列情況下,輔助進(jìn)位標(biāo)志AF的值被置為1,否則其值為0:

 ?。?)、在字操作時(shí),發(fā)生低字節(jié)向高字節(jié)進(jìn)位或借位時(shí);

 ?。?)、在字節(jié)操作時(shí),發(fā)生低4位向高4位進(jìn)位或借位時(shí)。

  PF:奇偶標(biāo)志PF用于反映運(yùn)算結(jié)果中“1”的個(gè)數(shù)的奇偶性。如果“1”的個(gè)數(shù)為偶數(shù),則PF的值為1,否則其值為0。

  CF:進(jìn)位標(biāo)志CF主要用來反映運(yùn)算是否產(chǎn)生進(jìn)位或借位。如果運(yùn)算結(jié)果的最高位產(chǎn)生了一個(gè)進(jìn)位或借位,那么,其值為1,否則其值為0。)

  4、段寄存器(SegmentRegister)

  為了運(yùn)用所有的內(nèi)存空間,8086設(shè)定了四個(gè)段寄存器,專門用來保存段地址:

  CS(CodeSegment):代碼段寄存器;

  DS(DataSegment):數(shù)據(jù)段寄存器;

  SS(StackSegment):堆棧段寄存器;

  ES(ExtraSegment):附加段寄存器。

  當(dāng)一個(gè)程序要執(zhí)行時(shí),就要決定程序代碼、數(shù)據(jù)和堆棧各要用到內(nèi)存的哪些位置,通過設(shè)定段寄存器CS,DS,SS來指向這些起始位置。通常是將DS固定,而根據(jù)需要修改CS。所以,程序可以在可尋址空間小于64K的情況下被寫成任意大小。所以,程序和其數(shù)據(jù)組合起來的大小,限制在DS所指的64K內(nèi),這就是COM文件不得大于64K的原因。8086以內(nèi)存做為戰(zhàn)場(chǎng),用寄存器做為軍事基地,以加速工作。

非常好我支持^.^

(750) 97.7%

不好我反對(duì)

(18) 2.3%

( 發(fā)表人:姚遠(yuǎn)香 )

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?