寄存器在哪里_二、汇编之寄存器
我們想用匯編語言控制我們想控制的外設,就必須通過控制器發送控制命令,那這些控制命令存放在哪里,就放在CPU內部組成單元之一,寄存器里面。
1、CPU內部一般由4部分組成
(1)運算器:進行信息的處理
(2)寄存器進行信息的存儲
(3)控制器控制各種器件進行工作
(4)內部總線:進行內部器件間的數據交互 2、匯編指令舉例
2、物理地址的理解 物理地址顧名思義就是硬件內存單元的地址,CPU通過地址總線訪問物理地址。
物理地址(以8086CPU為例)=段地址*16+偏移地址
為了更好理解物理地址我們舉個例子
如上圖:
(1)從學校走2826米到圖書館,這2826米可以認為是圖書館的物理地址
(2)從學校走2000米到圖書館,從體育館再走826米到圖書館,第一個距離2000米,就是相對于起點的基礎地址,(起點就是我們內存地址的開始地址)第二個距離826米就是對基礎地址的偏移地址。
這就相當于 基礎地址 = 段地址*16, 物理地址=基礎地址+偏移地址
3、什么是寄存器?
段寄存器就是存儲段地址的內存,常用的段寄存器有:CS,DS,SS,ES.
我們主要用到 CS:IP這兩個寄存器,這兩個寄存器分別為 代碼段寄存器和指令指針寄存器,下圖簡單給出8086CPU讀取,執行指令的工作原理
如上圖我們我們通過 CS:IP找到物理地址-》然后通過地址加法器-》輸入輸出控制電路-》20為地址總線-》通過匯編取D8,23,01-》數據總線-》指令緩存器-》執行控制器-》AX通用寄存器,就是這樣一個執行過程。
4、DS段寄存器的應用
mov bx,1000H
mov ds.bx
mov al,[0]
上面3條指令將1000H(1000:0)中的數據讀到al中
5、棧
每個平臺的CPU都有自己的棧的設計,8086CPU也不例外,棧的形式是LIFO后進先出,PUSH表示如棧,POP表示出棧。如:push ax 把寄存器 ax的數據送入棧中,pop ax把棧中的數據取出來賦值給ax,8086棧操作是以字為單位的,也就2個字節。
下圖為8086CPU對push指令的執行過程
8086CPU對pop指令的執行過程如下圖
總結
以上是生活随笔為你收集整理的寄存器在哪里_二、汇编之寄存器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot 获取配置文件中的值
- 下一篇: tcp为什么比udp慢_TCP和UDP那