8086 彙編學習 Part 9

AlwaysBeShine發表於2024-05-05

埠的讀寫

CPU 的鄰居

  1. CPU 內部的暫存器
  2. 記憶體單元
  3. 埠(各種介面卡、網路卡,顯示卡,主機板上的介面晶片等)
  • 各種晶片工作時,都有一些暫存器由 CPU 讀寫
  • 從 CPU 角度,將各暫存器當埠,並統一編制
  • CPU 用統一的方法與各種裝置通訊
    螢幕截圖 2024 05 03 230106

讀寫埠的指令

  • 在對 \([0,255]\) 的埠進行讀寫時,埠號用立即數給出
  • 在對 \([256,65535]\) 的埠進行讀寫時,埠號放在 DX 中
  • IN 和 OUT 指令中,只能用 AX 或 AL 來存放從埠中讀入的資料或要傳送到埠的資料。
  • 訪問 8 位埠時用 AL ,訪問 16 位埠時用 AX

I/O 埠分配

螢幕截圖 2024 05 03 230951

IN

功能

CPU 從埠讀取資料

格式

IN 資料 , 埠號

執行時與匯流排相關的操作

  1. CPU 透過地址線將地址資訊發出
  2. CPU 透過控制線發出埠讀命令,並選中埠所在的晶片,並通知要從中讀取資料
  3. 埠所在的晶片將對應埠中的資料透過資料匯流排送入 CPU

OUT

功能

CPU 往埠寫入資料

格式

OUT 埠號 , 資料

CMOS RAM 晶片關於埠讀寫的操作

CMOS RAM 晶片

  1. 包含一個實時鐘和一個有 128 個儲存單元的 RAM 儲存器
  2. 128 個位元組的 RAM 中儲存:內部實時鐘、系統配置資訊、相關的程式(用於開機時配置系統資訊)
  3. CMOS RAM 晶片靠電池供電,關機後其內部的實時鐘仍可正常工作,RAM 中的資訊不丟失
  4. 該晶片內部有兩個埠,埠地址為 70H 和 71H,CPU 透過這兩個埠讀寫 CMOS RAM
  5. 70H 地址埠,存放要訪問的 CMOS RAM 單元的地址
  6. 71H 資料埠,存放從選定的單元中讀取的資料,或要寫入到其中的資料
  7. 讀取 CMOS RAM 要先將要讀取的單元地址送入 70H 地址埠,再從資料埠 71H 讀出指定單元的內容

CMOS RAM 中儲存的時間資訊

內容
地址 00 01 02 03 04 05 06 07 08 09
  • 當前時間在 CMOS RAM 中用 6 個位元組存放,用 BCD 碼存放
  • 6 個資訊的長度都為 1 個位元組

外設的連線與中斷

CPU 在執行指令過程中,可以檢測到傳送過來的中斷資訊,引發中斷過程,處理外設的輸入。

外中斷 :由外部裝置發生的事件引起的中斷

  • 幾乎所有由外設引發的外中斷,都是可遮蔽中斷
  • 不可遮蔽中斷在系統中有必須處理的緊急情況發生時用來 CPU 的中斷資訊

可遮蔽中斷

  • 可遮蔽中斷時 CPU 可以不響應的外中斷
  • CPU 是否響應可遮蔽中斷,要看標誌暫存器 IF 位的設定
  • 當 CPU 檢測到可遮蔽中斷資訊時,如果 IF = 1,則 CPU 在執行完當前指令後響應中斷,引發中斷過程;如果 IF = 0,則不影響可遮蔽中斷。

不可遮蔽中斷

  • 不可遮蔽中斷是 CPU 必須響應的外中斷
  • 當 CPU 檢測到不可遮蔽中斷資訊時,則在執行完當前指令後,立即響應,引發中斷過程
  • 對於 8086 CPU 不可遮蔽中斷的中斷型別碼固定為 2

外中斷處理過程

可遮蔽中斷所引發的中斷過程

  1. 取中斷型別碼(可遮蔽中斷資訊來自於 CPU 外部,中斷型別碼透過資料匯流排送入 CPU)
  2. 標誌暫存器入棧,IF = 0 , TF = 0(將 IF 置 0 的原因是 :進入中斷處理程式後,禁止其他的可遮蔽中斷,如果在中斷處理程式中需要處理可遮蔽中斷,可以用指令將 IF 置 1)
  3. CS 和 IP 入棧
  4. \((IP) = (中斷型別碼 \times 4)\)\((CS) = (中斷型別碼 \times 4)\)

不可遮蔽中斷的中斷過程(不必取中斷碼,固定為2)

  1. 標誌暫存器入棧,IF = 0,TF = 0
  2. CS 和 IP 入棧
  3. (IP) = (8) ,(CS) = (0AH)

相關文章