色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

一文看懂8086CPU寄存器的特點和作用

2018年04月16日 11:36 網(wǎng)絡整理 作者: 用戶評論(0

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

  通用寄存器

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

  下面介紹這幾個通用寄存器:

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

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

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

  AX寄存器可以分為兩個獨立的8位的AH和AL寄存器;

  BX寄存器可以分為兩個獨立的8位的BH和BL寄存器;

  CX寄存器可以分為兩個獨立的8位的CH和CL寄存器;

  DX寄存器可以分為兩個獨立的8位的DH和DL寄存器;

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

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

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

  表示16位寄存器AX可以表示成兩個8位寄存器,

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

一文看懂8086CPU寄存器的特點和作用

  AX寄存器:

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

  在寫匯編程序時,AX寄存器可以說是使用率最高的寄存器(不過,總共才那么14個寄存器,哪一個不經常使用咯?),既然AX是數(shù)據(jù)寄存器的話,那么理所當然,其可以用來存放普通的數(shù)據(jù),由于其是16位寄存器,自然也就可以存放16位數(shù)據(jù),但是因為其又可以分為2個獨立的8位寄存器AH和AL,所以,在AH和AL中又可以獨立的存放2個8位的數(shù)據(jù),可以有以下代碼(即將AX當做普通的寄存器使用,即可以用來暫存數(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又被稱作為累加器,自然其還有一點點特殊的地方的:

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

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

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

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

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

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

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

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

  DIVBX;執(zhí)行計算

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

一文看懂8086CPU寄存器的特點和作用

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

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

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

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

  MULBX;執(zhí)行計算

  BX寄存器:

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

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

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

一文看懂8086CPU寄存器的特點和作用

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

  上面介紹的這種尋址方式是BX在尋址中最最簡單的應用了,而對于稍微復雜的尋址方式,

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

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

  MOVBX,5H

  MOVAH,11H

  MOVAH,[BX];設置AX的值為偏移地址為BX中的值時所代表的內存單元

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

一文看懂8086CPU寄存器的特點和作用

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

一文看懂8086CPU寄存器的特點和作用

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

  CX寄存器:

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

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

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

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

  MOVAX,0B800H

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

  MOVBX,0;從0xB8000開始

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

  MOVDX,41H;A的16進制為41H

  MOVAX,01110001B;顯示白底藍字

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

  ADDBX,1

  MOV[BX],AX;設置字符顯示屬性

  ADDBX,1

  LOOPs

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

一文看懂8086CPU寄存器的特點和作用

  DX寄存器:

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

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

  8086CPU各類寄存器特點及用途

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

  1、通用寄存器

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  3、標志寄存器FR(FlagRegister)

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

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

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

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

  (1)、當IF=1時,CPU可以響應CPU外部的可屏蔽中斷發(fā)出的中斷請求;

  (2)、當IF=0時,CPU不響應CPU外部的可屏蔽中斷發(fā)出的中斷請求。

  TF:跟蹤標志TF。該標志可用于程序調試。TF標志沒有專門的指令來設置或清楚。

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

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

  SF:符號標志SF用來反映運算結果的符號位,它與運算結果的最高位相同。在微機系統(tǒng)中,有符號數(shù)采用補碼表示法,所以,SF也就反映運算結果的正負號。運算結果為正數(shù)時,SF的值為0,否則其值為1。

  ZF:零標志ZF用來反映運算結果是否為0。如果運算結果為0,則其值為1,否則其值為0。在判斷運算結果是否為0時,可使用此標志位。

  AF:下列情況下,輔助進位標志AF的值被置為1,否則其值為0:

  (1)、在字操作時,發(fā)生低字節(jié)向高字節(jié)進位或借位時;

  (2)、在字節(jié)操作時,發(fā)生低4位向高4位進位或借位時。

  PF:奇偶標志PF用于反映運算結果中“1”的個數(shù)的奇偶性。如果“1”的個數(shù)為偶數(shù),則PF的值為1,否則其值為0。

  CF:進位標志CF主要用來反映運算是否產生進位或借位。如果運算結果的最高位產生了一個進位或借位,那么,其值為1,否則其值為0。)

  4、段寄存器(SegmentRegister)

  為了運用所有的內存空間,8086設定了四個段寄存器,專門用來保存段地址:

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

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

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

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

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

非常好我支持^.^

(750) 97.7%

不好我反對

(18) 2.3%

( 發(fā)表人:姚遠香 )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?
      主站蜘蛛池模板: 国产人妻精品无码AV在线五十路| 男女边吃奶边做边爱视频| 日本久久免费大片| 18美女腿打开无遮软件| 饥渴的护士自慰被发现| 无码AV免费精品一区二区三区| MM131亚洲精品久久安然| 免费网站在线观看国产v片| 伊人久久大香线蕉综合99| 国产午夜精品理论片影院| 忘忧草在线影院WWW日本动漫| 刺激一区仑乱| 色欲人妻无码AV精品一区二区| 被老师按在办公桌吸奶头| 欧美亚洲日本日韩在线| MATURETUBE乱妇| 琪琪色原网站ying| 丰满老熟女白浆直流| 四虎永久免费| 国产高清视频免费在线观看| 天堂色| 国产专区青青在线视频| 亚洲伊人色综合久久天天伊人| 久久国产香蕉视频| 97国产露脸精品国产麻豆| 欧美一区二区视频97色伦| 处破女免费播放| 性欧美videos俄罗斯| 黄色网址在线看| 中国成人在线视频| 欧美精品熟妇乱| 国产成人理在线观看视频| 亚洲免费国产在线日韩| 久久久久青草大香线综合精品| 99re5.久久热在线视频| 十二月综合缴缴情| 精品视频一区二区三三区四区| 99精品国产福利在线观看| 天美传媒果冻传媒入口视频| 久久99这里只有精品| 把内衣脱了把奶露出来|