當前位置:編程學習大全網 - 腳本源碼 - 8086CPU有哪些寄存器?各有什麽用途?

8086CPU有哪些寄存器?各有什麽用途?

8086 有14個16位寄存器,這14個寄存器按其用途可分為(1)通用寄存器、(2)指令指針、(3)標誌寄存器和(4)段寄存器等4類。\x0d\\x0d\(1)通用寄存器有8個, 又可以分成2組,壹組是數據寄存器(4個),另壹組是指針寄存器及變址寄存器(4個).\x0d\\x0d\數據寄存器分為:\x0d\AH&AL=AX(accumulator):累加寄存器,常用於運算;在乘除等指令中指定用來存放操作數,另外,所有的I/O指令都使用這壹寄存器與外界設備傳送數據.\x0d\BH&BL=BX(base):基址寄存器,常用於地址索引;\x0d\CH&CL=CX(count):計數寄存器,常用於計數;常用於保存計算值,如在移位指令,循環(loop)和串處理指令中用作隱含的計數器.\x0d\DH&DL=DX(data):數據寄存器,常用於數據傳遞。\x0d\他們的特點是,這4個16位的寄存器可以分為高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。這2組8位寄存器可以分別尋址,並單獨使用。\x0d\\x0d\另壹組是指針寄存器和變址寄存器,包括:\x0d\SP(Stack Pointer):堆棧指針,與SS配合使用,可指向目前的堆棧位置;\x0d\BP(Base Pointer):基址指針寄存器,可用作SS的壹個相對基址位置;\x0d\SI(Source Index):源變址寄存器可用來存放相對於DS段之源變址指針;\x0d\DI(Destination Index):目的變址寄存器,可用來存放相對於 ES 段之目的變址指針。\x0d\這4個16位寄存器只能按16位進行存取操作,主要用來形成操作數的地址,用於堆棧操作和變址運算中計算操作數的有效地址。\x0d\\x0d\(2) 指令指針IP(Instruction Pointer)\x0d\指令指針IP是壹個16位專用寄存器,它指向當前需要取出的指令字節,當BIU從內存中取出壹個指令字節後,IP就自動加1,指向下壹個指令字節。註意,IP指向的是指令地址的段內地址偏移量,又稱偏移地址(Offset Address)或有效地址(EA,Effective Address)。\x0d\\x0d\(3)標誌寄存器FR(Flag Register)\x0d\8086有壹個18位的標誌寄存器FR,在FR中有意義的有9位,其中6位是狀態位,3位是控制位。\x0d\\x0d\OF: 溢出標誌位OF用於反映有符號數加減運算所得結果是否溢出。如果運算結果超過當前運算位數所能表示的範圍,則稱為溢出,OF的值被置為1,否則,OF的值被清為0。\x0d\DF:方向標誌DF位用來決定在串操作指令執行時有關指針寄存器發生調整的方向。 \x0d\IF:中斷允許標誌IF位用來決定CPU是否響應CPU外部的可屏蔽中斷發出的中斷請求。但不管該標誌為何值,CPU都必須響應CPU外部的不可屏蔽中斷所發出的中斷請求,以及CPU內部產生的中斷請求。具體規定如下: \x0d\(1)、當IF=1時,CPU可以響應CPU外部的可屏蔽中斷發出的中斷請求; \x0d\(2)、當IF=0時,CPU不響應CPU外部的可屏蔽中斷發出的中斷請求。 \x0d\TF:跟蹤標誌TF。該標誌可用於程序調試。TF標誌沒有專門的指令來設置或清楚。\x0d\(1)如果TF=1,則CPU處於單步執行指令的工作方式,此時每執行完壹條指令,就顯示CPU內各個寄存器的當前值及CPU將要執行的下壹條指令。\x0d\(2)如果TF=0,則處於連續工作模式。\x0d\SF:符號標誌SF用來反映運算結果的符號位,它與運算結果的最高位相同。在微機系統中,有符號數采用補碼表示法,所以,SF也就反映運算結果的正負號。運算結果為正數時,SF的值為0,否則其值為1。 \x0d\ZF: 零標誌ZF用來反映運算結果是否為0。如果運算結果為0,則其值為1,否則其值為0。在判斷運算結果是否為0時,可使用此標誌位。 \x0d\AF:下列情況下,輔助進位標誌AF的值被置為1,否則其值為0: \x0d\(1)、在字操作時,發生低字節向高字節進位或借位時; \x0d\(2)、在字節操作時,發生低4位向高4位進位或借位時。 \x0d\PF:奇偶標誌PF用於反映運算結果中“1”的個數的奇偶性。如果“1”的個數為偶數,則PF的值為1,否則其值為0。 \x0d\CF:進位標誌CF主要用來反映運算是否產生進位或借位。如果運算結果的最高位產生了壹個進位或借位,那麽,其值為1,否則其值為0。) \x0d\\x0d\4)段寄存器(Segment Register)\x0d\為了運用所有的內存空間,8086設定了四個段寄存器,專門用來保存段地址:\x0d\\x0d\CS(Code Segment):代碼段寄存器;\x0d\DS(Data Segment):數據段寄存器;\x0d\SS(Stack Segment):堆棧段寄存器;\x0d\ES(Extra Segment):附加段寄存器。\x0d\\x0d\當壹個程序要執行時,就要決定程序代碼、數據和堆棧各要用到內存的哪些位置,通過設定段寄存器 CS,DS,SS 來指向這些起始位置。通常是將DS固定,而根據需要修改CS。所以,程序可以在可尋址空間小於64K的情況下被寫成任意大小。 所以,程序和其數據組合起來的大小,限制在DS 所指的64K內,這就是COM文件不得大於64K的原因。8086以內存做為戰場,用寄存器做為軍事基地,以加速工作

  • 上一篇:如何制作接收無線路由氣信號的定向天線
  • 下一篇:10大不能惹的車
  • copyright 2024編程學習大全網