0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣通過改變寄存器中的內(nèi)容實(shí)現(xiàn)對(duì)CPU的控制呢?

冬至子 ? 來源:Flashield ? 作者:Flashield ? 2023-09-20 15:49 ? 次閱讀

寄存器

寄存器是CPU中程序員可以用指令讀寫的部件,通過改變寄存器中的內(nèi)容實(shí)現(xiàn)對(duì)CPU的控制。

  • 運(yùn)算器進(jìn)行信息處理;
  • 寄存器進(jìn)行信息存儲(chǔ)
  • 控制器控制各種器件進(jìn)行工作;
  • 內(nèi)部總線連接各種器件,在它們之間進(jìn)行數(shù)據(jù)的傳送。

2.1 通用寄存器

8086CPU的所有寄存器都是16位的,可以存放兩個(gè)字節(jié)。AX、BX、CX、DX這4個(gè)寄存器通常用來存放一般性的數(shù)據(jù),被稱為通用寄存器。8086CPU的上一代CPU中的寄存器都是8位的,為了保證兼容,8086CPU的AX、BX、CX、DX這4個(gè)寄存器都可分為兩個(gè)可獨(dú)立使用的8位寄存器來用:

  • AX可分為AH和AL;
  • BX可分為BH和BL;
  • CX可分為CH和CL;
  • DX可分為DH和DL。圖片

2.2 字在寄存器中的存儲(chǔ)

8086CPU可以一次性處理以下兩種尺寸的數(shù)據(jù)。

  • 字節(jié) :記為byte,一個(gè)字節(jié)由8個(gè)bit組成,可以存在8位寄存器中。
  • :記為word,一個(gè)字由兩個(gè)字節(jié)組成,這兩個(gè)字節(jié)分別稱為這個(gè)字的高位字節(jié)和低位字節(jié)。一個(gè)字可以存在16位寄存器中。

2.3 幾條匯編指令

  • 匯編指令不區(qū)分大小寫。
  • 在進(jìn)行數(shù)據(jù)傳送或運(yùn)算時(shí),要注意指令的兩個(gè)操作對(duì)象的位數(shù)應(yīng)當(dāng)是一致的。

2.4 物理地址

所有的內(nèi)存單元構(gòu)成的存儲(chǔ)空間是一個(gè)一維的線性空間,每一個(gè)內(nèi)存單元在這個(gè)空間中都有唯一的地址,我們將這個(gè)唯一的地址稱為物理地址。CPU通過地址總線送入存儲(chǔ)器的,必須是一個(gè)內(nèi)存單元的物理地址。

2.5 16位結(jié)構(gòu)的CPU

16位結(jié)構(gòu)(16位機(jī)、字長(zhǎng)為16位等常見說法,與16位結(jié)構(gòu)的含義相同)描述了一個(gè)CPU具有下面幾方面的結(jié)構(gòu)特性。

  • 運(yùn)算器一次最多可以處理16位的數(shù)據(jù);
  • 寄存器的最大寬度為16位;
  • 寄存器和運(yùn)算器之間的通路為16位。

2.6 8086CPU給出物理地址的方法

8086CPU采用一種在內(nèi)部用兩個(gè)16位地址合成的方法來形成一個(gè)20位(地址總線)的物理地址。當(dāng)8086CPU要讀寫內(nèi)存時(shí):

  1. CPU中的相關(guān)部件提供兩個(gè)16位的地址,一個(gè)稱為段地址,另一個(gè)稱為偏移地址;
  2. 段地址和偏移地址通過內(nèi)部總線送入一個(gè)稱為地址加法器的部件;
  3. 地址加法器將兩個(gè)16位地址合成為一個(gè)20位的物理地址;
  4. 地址加法器通過內(nèi)部總線將20位物理地址送入輸入輸出控制電路;
  5. 輸入輸出控制電路將20位物理地址送上地址總線;
  6. 20位物理地址被地址總線傳送到存儲(chǔ)器。

地址加法器采用物理地址=段地址×16+偏移地址的方法用段地址和偏移地址合成物理地址。

2.7 “段地址×16+偏移地址”的本質(zhì)含義

“段地址×16+偏移地址=物理地址”的本質(zhì)含義是:CPU在訪問內(nèi)存時(shí),用一個(gè) 基礎(chǔ)地址 (段地址×16)和一個(gè)相對(duì)于基礎(chǔ)地址的偏移地址相加,給出內(nèi)存單元的物理地址。

2.8 段的概念

內(nèi)存并沒有分段, 段的劃分來自于CPU ,由于8086CPU用“基礎(chǔ)地址(段地址×16)+偏移地址=物理地址”的方式給出內(nèi)存單元的物理地址,使得我們可以用分段的方式來管理內(nèi)存。

有兩點(diǎn)需要注意:段地址×16必然是16的倍數(shù),所以一個(gè)段的起始地址也一定是16的倍數(shù);偏移地址為16位(寄存器位數(shù)),16位地址的尋址能力為64KB,所以一個(gè)段的長(zhǎng)度最大為64KB。

“數(shù)據(jù)在21F60H內(nèi)存單元中?!边@句話對(duì)于8086PC機(jī)一般不這樣講;而是如下說法:

  1. 數(shù)據(jù)存在內(nèi)存20001F60單元中;
  2. 數(shù)據(jù)存在內(nèi)存的2000H段中的1F60H單元中。

2.9 段寄存器

段地址在8086CPU的段寄存器中存放。8086CPU有4個(gè)段寄存器:CS、DS、SS、ES。當(dāng)8086CPU要訪問內(nèi)存時(shí)由這4個(gè)段寄存器提供內(nèi)存單元的段地址。

2.10 CS和IP

CS和IP是8086CPU中兩個(gè)最關(guān)鍵的寄存器,它們指示了 CPU當(dāng)前要讀取指令的地址 。

  • CS為代碼段寄存器;
  • IP為指令指針寄存器。

任意時(shí)刻,CPU將CS:IP指向的內(nèi)容當(dāng)作指令執(zhí)行。具體的工作過程:

  1. 從CS:IP指向的內(nèi)存單元讀取指令,讀取的指令進(jìn)入指令緩沖器;
  2. IP:=IP+所讀取指令的長(zhǎng)度,從而指向下一條指令;
  3. 執(zhí)行指令。轉(zhuǎn)到步驟1,重復(fù)這個(gè)過程。

在8086CPU加電啟動(dòng)或復(fù)位后(即CPU剛開始工作時(shí))CS和IP被設(shè)置為CS= FFFFH,IP=0000H,即在8086PC機(jī)剛啟動(dòng)時(shí),CPU從內(nèi)存 FFFF0H單元中讀取指令執(zhí)行,FFFF0H單元中的指令是8086PC機(jī)開機(jī)后執(zhí)行的第一條指令。

2.11 修改CS、IP的指令

在CPU中,程序員能夠用指令讀寫的部件只有寄存器,程序員可以通過改變寄存器中的內(nèi)容實(shí)現(xiàn)對(duì)CPU的控制。

能夠改變CS、IP的內(nèi)容的指令被統(tǒng)稱為 轉(zhuǎn)移指令 。若想同時(shí)修改CS、PP的內(nèi)容,可用形如“jmp段地址:偏移地址”的指令完成。

jmp 2AE3:3 #執(zhí)行后:CS=2AE3H,IP=0003H,CPU將從2AE33H處讀取指令。
jmp 3:0B16 #執(zhí)行后:CS=0003H,IP=0B16H,CPU將從00B46H處讀取指令。

若想僅修改IP的內(nèi)容,可用形如“jmp某一合法寄存器”的指令完成。

jmp ax, #指令執(zhí)行前:ax=1000H,CS=2000H,IP=000H
        #指令執(zhí)行后:ax=1000H,CS=2000H,IP=1000H
jmp bx, #指令執(zhí)行前:bx=0B16H,CS=2000H,IP=0003H
        #指令執(zhí)行后:bx=0B16H,CS=2000H,IP=0B16H
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16367

    瀏覽量

    178112
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5343

    瀏覽量

    120385
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7492

    瀏覽量

    163853
  • PC機(jī)
    +關(guān)注

    關(guān)注

    2

    文章

    201

    瀏覽量

    28578
  • 加法器
    +關(guān)注

    關(guān)注

    6

    文章

    183

    瀏覽量

    30129
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    解析CPU寄存器

    8位寄存器在16位寄存器,而16位寄存器在32位寄存器。
    發(fā)表于 09-19 10:10 ?4145次閱讀

    使用FPGA通過SPI總線控制AD9266寄存器無法改變寄存器

    使用FPGA通過SPI總線控制AD9266寄存器,可以回讀寄存器默認(rèn)值,但是無法改變寄存器值。不
    發(fā)表于 01-16 11:52

    怎樣通過寄存器的輸出來控制GPIO從而點(diǎn)亮LED

    GPIO端口的結(jié)構(gòu)部件是由哪些部分組成的?GPIO的工作模式有哪幾種?怎樣通過寄存器的輸出來控制GPIO從而點(diǎn)亮LED
    發(fā)表于 11-29 07:33

    CPU的主要部件之寄存器詳解

    寄存器寄存器CPU中程序員可以用指令讀寫的部件,CPU的主要部件是寄存器,程序員通過
    發(fā)表于 12-10 06:02

    怎樣通過寄存器控制STM32F4 IO口的高低電平

    怎樣通過寄存器控制STM32F4 IO口的高低電平?并實(shí)現(xiàn)一個(gè)經(jīng)典的跑流水燈程序?
    發(fā)表于 02-11 08:02

    Audio HAL控制驅(qū)動(dòng)寄存器是如何實(shí)現(xiàn)

    Audio HAL控制驅(qū)動(dòng)寄存器是如何實(shí)現(xiàn)的?[RK3288][Android6.0] 用戶空間對(duì)音頻寄存器
    發(fā)表于 03-10 08:00

    CPU寄存器詳解

    計(jì)算機(jī)是一種數(shù)據(jù)處理設(shè)備,它由CPU和內(nèi)存以及外部設(shè)備組成。CPU負(fù)責(zé)數(shù)據(jù)處理,內(nèi)存負(fù)責(zé)存儲(chǔ),外部設(shè)備負(fù)責(zé)數(shù)據(jù)的輸入和輸出,它們之間通過總線連接在一起。CPU內(nèi)部主要由
    發(fā)表于 06-04 20:32 ?1.2w次閱讀
    <b class='flag-5'>CPU</b><b class='flag-5'>寄存器</b>詳解

    寄存器變量

    C語言中使用關(guān)鍵字register來聲明局部變量為寄存器變量。寄存器變量的值會(huì)被存放在CPU寄存器,每當(dāng)需要使用它們時(shí),
    發(fā)表于 06-03 10:13 ?2383次閱讀

    如何在VHDL實(shí)現(xiàn)一個(gè)簡(jiǎn)單的寄存器

    存儲(chǔ)的位數(shù)上有所不同,具體取決于系統(tǒng)的配置。在本教程,我們將學(xué)習(xí)如何在 VHDL 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的寄存器。
    發(fā)表于 07-29 16:48 ?4656次閱讀
    如何在VHDL<b class='flag-5'>中</b><b class='flag-5'>實(shí)現(xiàn)</b>一個(gè)簡(jiǎn)單的<b class='flag-5'>寄存器</b>

    labview讀取三菱plc寄存器內(nèi)容

    如何使用LabVIEW讀取三菱PLC的寄存器內(nèi)容,并提供一些實(shí)例代碼和注意事項(xiàng)。 首先,我們需要了解PLC寄存器的基本概念。PLC寄存器是一種用于存儲(chǔ)數(shù)據(jù)的內(nèi)部變量,被用于傳輸和保存信
    的頭像 發(fā)表于 12-27 16:31 ?2287次閱讀

    CPU的6個(gè)主要寄存器

    CPU寄存器是中央處理內(nèi)的組成部分,是有限存貯容量的高速存貯部件。寄存器CPU內(nèi)部的元件,包括通用
    的頭像 發(fā)表于 02-03 15:15 ?4331次閱讀

    CPU寄存器的用途

    在計(jì)算機(jī)體系結(jié)構(gòu),中央處理單元(CPU)無疑是整個(gè)系統(tǒng)的核心。CPU負(fù)責(zé)執(zhí)行指令、處理數(shù)據(jù)、控制計(jì)算機(jī)系統(tǒng)的運(yùn)行等關(guān)鍵任務(wù)。而在這個(gè)過程
    的頭像 發(fā)表于 05-30 17:09 ?1439次閱讀

    寄存器分為基本寄存器和什么兩種

    寄存器是計(jì)算機(jī)中用于存儲(chǔ)數(shù)據(jù)的高速存儲(chǔ)單元,它們是CPU內(nèi)部的重要組成部分。寄存器可以分為基本寄存器和擴(kuò)展寄存器兩種類型。 一、基本
    的頭像 發(fā)表于 07-12 10:31 ?1381次閱讀

    寄存器尋址的實(shí)現(xiàn)方式

    在計(jì)算機(jī)體系結(jié)構(gòu)寄存器尋址是一種常見的尋址方式,它允許程序直接訪問CPU內(nèi)部的寄存器。寄存器尋址可以提高程序的執(zhí)行效率,因?yàn)樗苊饬藢?duì)內(nèi)
    的頭像 發(fā)表于 07-12 10:36 ?674次閱讀

    接口的控制與狀態(tài)寄存器什么作用

    的行為并獲取硬件的狀態(tài)信息。 接口的控制與狀態(tài)寄存器的作用 在現(xiàn)代計(jì)算機(jī)系統(tǒng),硬件設(shè)備與軟件之間的交互是通過一系列的接口來實(shí)現(xiàn)的。這些接口
    的頭像 發(fā)表于 10-17 10:42 ?457次閱讀