微機原理與系統設計筆記1 | 緒論與數製表示

来源:https://www.cnblogs.com/Roboduster/archive/2023/01/20/17062593.html
-Advertisement-
Play Games

打算整理彙編語言與介面微機這方面的學習記錄。 參考資料 西電《微機原理與系統設計》周佳社 西交《微機原理與介面技術》 課本《彙編語言與介面技術》王讓定 小甲魚《彙編語言》 1. 介紹 2022年春學習了MIPS視角下的電腦體繫結構與組成原理,同年夏自學了操作系統(科普級別的瞭解),彙編語言是學習操 ...



  • 打算整理彙編語言與介面微機這方面的學習記錄。
  • 參考資料
    • 西電《微機原理與系統設計》周佳社
    • 西交《微機原理與介面技術》
    • 課本《彙編語言與介面技術》王讓定
    • 小甲魚《彙編語言》

1. 介紹

2022年春學習了MIPS視角下的電腦體繫結構與組成原理,同年夏自學了操作系統(科普級別的瞭解),彙編語言是學習操作系統的時候,基於學過的計組強行吃下來的,並沒有單獨學過。

秋天學學校的OS(比較深入),同時我也報了彙編語言與介面技術這門選修課。在這門選修課上我感覺彙編相關內容還是十分豐富的,並且在系統、底層、安全這些方面用處很多。

這個系列是對這方面知識的整理。打算在這個系列的最後進行課程內容的複習。

2. 概覽

課程10章,前四章為彙編語言,後6章為微機硬體介面電路。

2.1 電子信息系統

  • 有了CPU的電子信息系統功能更為豐富。

  • 電子信息系統的輸入是物理量

  • 物理量轉化為電量:感測器

    轉化後的電量為 mv 級

  • 電量放大並濾波:前端調理電路

    模電課程(本人不學),到伏特級,留調試點。

  • 模擬信號到數字信號:A/D轉化

    可以根據需求選擇A/D晶元轉化的精度和速度。

  • 數字信號提交給CPU處理:CPU型號也是根據需求選擇。

  • CPU應當可以向A/D轉化器件和前段調理電路發送控制信號,控制一些處理速度。CPU處理後的數字信號應有存儲器存儲。

  • 需要輸出的數字結果:D/A轉化

  • 前端調理對稱地,需要後端調理電路,其輸出量來控制外部器件/設備

    實驗時這裡後端調理結束後通過測試點引出到示波器了。

  • 另一些應用場合,輸出要顯示(電視機)、列印(印表機)。

我們需要給CPU編程式(彙編語言),來決定整個系統怎麼工作,這就是前4章的主要內容。不同的I/O設備的類型也有差異,設備接受信息的格式不同(如串列並行、模擬量數字量),所以CPU和設備之間要設計一段介面電路,這是後半部分硬體部分的內容(時序、存儲器、I/O設備介面)。

2.2 微型電腦系統組成

A. 軟體子系統

不是本課程的講解內容。也可以簡單再分為系統軟體和應用軟體。

分為

B. 硬體子系統

早期電腦硬體組成

1

  • 控制器控制ALU運算:ALU運算的數據在控制器控制下送往存儲器;

  • 存儲器中的數據被控制器控制器送到ALU;

  • 輸入設備(IO)控制器控制輸入設備輸入數據到存儲器或ALU。

  • 隨著集成電路發展,將ALU和控制器集成在一起,成為中央處理器CPU(也稱微處理器)。

  • 上述部件之間傳遞信息:

    • 數據信息、控制信息、地址信息

      (這點很好理解)

    • 對應的傳送信息的線/通道:數據匯流排、控制匯流排、地址匯流排。

現代微型電腦硬體組成

  • 以微處理器/CPU為核心來組成。CPU通過引腳來跟外部存儲器、I/O實現地址、數據、控制信息交互。而8位CPU8個引腳,16位CPU16個引腳,是無法同時滿足三條匯流排分開接入的。

    8086CPU有16根數據匯流排,20條地址匯流排和16條控制匯流排。

  • 因此實現了一種分時復用技術,部分引腳分時復用。

    因此需要設計一個電路(系統匯流排形成電路),鑒別復用的部分引腳此時到底輸出/入的是什麼信息,並輸出輸入。

    要想設計這個電路需要瞭解CPU引腳的時序(第五章)。

    引腳也稱微處理器級匯流排

    轉化後形成的三匯流排稱為系統匯流排。外設就掛接在系統匯流排上。

  • CPU具體如何與外設交互:

    • CPU要給存儲器寫數據,需要通過CPU的寫控制引腳發送寫控制命令,同時發送地址信息,寫入對應地址,控制匯流排還要接收外設的狀態信息。
  • 硬體子系統中的存儲子系統,由ROM和RAM組成。對於內部不含存儲電路的CPU電子系統而言,必須用這兩樣ROM和RAM,在三匯流排上擴展設計存儲器。

    計組實驗匯流排信息這裡講挺清楚的,彙編與介面這課詳細講了怎麼設計存儲器。

    ROM又稱程式存儲器,用專用設備寫入,接入系統電路時是只讀的。
    2

2.3 彙編簡介

指令的概念

  • 指令是一組二進位代碼。用於明確指示上述系統中CPU的工作。彙編語言是二進位代碼的符號化描述。

2.4 介面簡介

前面提到了,I/O設備不會直接接到CPU上,要通過一段介面電路來完成標準化並與CPU連接。

介面電路也就是常說的介面。

3

I/O介面是連接CPU和I/O設備的控制電路。比如顯示器與CPU之間通訊有顯卡電路,音響與CPU之間有音效卡。

當然,CPU要想向I/O設備讀寫數據,需要地址來引導。這就提出了I/O介面地址。這是為I/O設備對應的I/O介面電路分配的地址,這就完成了從介面電路進行讀寫操作到從介面地址進行讀寫操作的轉化。

這一點跟存儲器的轉化是相通的。

這裡有一個問題,如何對I/O介面編址?

  • 8086系統中,是通過地址線來統一編址。即既編址存儲器地址,也編址I/O介面。這時讀寫存儲器和I/O的指令相同。

    當然,對於存儲器地址空間和I/O地址空間,也有很多微處理器採用兩個獨立地址空間。這時存儲單元地址和I/O埠的地址值可能相同,所以需要採用存儲器讀寫信號和I/O讀寫信號來區分。這樣CPU讀寫存儲器和I/O的指令是不同的。

  • 對於一個I/O介面來說,地址碼通常只有一個,這裡需要設計一個電路來完成從16根地址線(16位二進位)+控制線上的有效位 到一個控制命令(高低電平0/1)的轉化。

    其實也就是一個I/O地址解碼器。這是數電/數字邏輯課的內容。

    存儲器相應也有類似的結構。

4

5

這部分課程後續會再詳細介紹。

2.5 有關微機系統

上述硬體結構還不能工作,只是一個微型電腦,而不是微型電腦系統。需要配上I/O設備、電源、軟體等,才能正常工作。

2.6 存儲器簡介

前面已經提到過很多次存儲器,這裡再簡單整理下。

存儲器有幾個要素,地址單元大小,地址號碼。一個地址單元內是一個位元組8bit=1byte。而地址號則決定地址單元的邏輯位置,地址線編碼了地址號,CPU通過地址線定址存儲器。所以大空間的存儲器也要求著地址線條數要多。

地址線和數據線寬度的區別:

  • 數據線的寬度決定一次傳送的數據規模。

  • 8086CPU數據線16位,所以一次可以取兩個位元組的內容。

    因此,兩個相鄰的地址單元(位元組),可以組成一個字單元(也就是16位)。字分為高八位和第八位。

  • 大端位元組序和小端位元組序。而8086系統是高位元組存放在高地址空間,低位元組存放在低地址空間。

  • 讀/寫一個字時,讀/寫的地址是低位元組的地址號。

設計存儲器時我們需要對晶元進行相關組織而達到相關存儲要求。

3. 數制碼制快速複習

這部分各個課(C、數字邏輯、計組)都講,實在重覆。

3.1 數制

  • 程式設計中的二進位->十進位的一種方法:

    • 除十取餘法

      二進位除十的二進位,然後餘數變成十進位,這樣就是十以內的轉化

    • 比較法

    後面彙編部分會實現這裡的簡單轉換演算法

  • 程式設計中的十進位->二進位:

    比如要從鍵盤輸入95,CPU中9*10得到的結果就是二進位,再加5,得到的就是二進位95.

    這個想法根本原因是:CPU只認識二進位。

    mov AL, 96

    add AL, 89

    中的96、89就是二進位的形式被CPU識別的。

3.2 二進位算術運算

首先要搞清楚運算的對象是8位二進位(位元組)還是16位二進位(字)。

  • 在現在大多數情況的彙編語言中數字是十六進位的, 如果最開頭的一位是A~F, 仍然要求在前面加零.

  • 處理器狀態字寄存器/標誌寄存器:

6

只有運算才能影響標誌寄存器。包括下麵的邏輯運算。

補充:

  • PF是奇偶校驗,只看低八位,如果1個數為偶數則為1,奇數為0.可以用於數據串列通信過程中的奇偶校驗的硬體實現。
  • AF是輔助進位,管理四位間的進位借位,有進位為1。

3.3 二進位邏輯運算

  • 邏輯與 AND:
    • 可以用於清零某些位,更寬泛說可以規範化數據(如操作系統中查頁表時的操作)
  • 邏輯或 OR:
    • 同上,規範化數據,將某些位置為1而其他位不變,置1的位為1即可。
  • 異或 XOR:
    • 這裡我經常記錯,兩運算對象對應位不同則為1,相同為0.
    • 可以用於某些位取反而其他位不變,取反的位置為1即可。

3.4 表示範圍和溢出問題

  • 無符號數表示範圍:
    • 8位:00H~FFH
    • 16位:0000H~FFFFH
  • 有符號數表示範圍:
    • 機器數表示法:0--正,1--負數
  • 有符號數原碼:
    • 符號位+正常二進位表示
    • 缺點,+0和-0的機器數表示並不同,這在電腦中是矛盾的
    • 表示範圍:
      • 8位:+127+0,-0-127
      • 16位:+32767+0,-0-32767
  • 有符號數反碼:
    • 正數就是原碼
    • 負數:符號數+原碼其餘位取反
  • 有符號數補碼:
    • 正數就是原碼
    • 負數:反碼+1==符號位不變,原碼按位取反+1
    • 表示範圍:
      • 8位,+127~-128
      • 16位:+32767~-32768
    • 電腦中用的就是補碼

最近遇到了一個C程式上的問題,從埠中拿出的狀態碼是char類型的,但是用char接收會溢出,所以向上適用int類型就會正常。

3.5 補碼的運算

公式1:[X+Y]補 = [X]補+ [Y]補

公式2:[X-Y]補 = [X]補- [Y]補

公式3:[X-Y]補 = [X]補+ [-Y]補

  • 看結果時不看最高位溢出的(第九位),只看八位
  • 公式三由公式2發展而來,思路更簡單,並且節省了硬體電路。

由補碼的運算結果(補碼)求原碼:對補碼求補碼(符號位不變,取反+1)。所以有公式4.

公式4:[X]=[X補]補

在上面公式3的情境中,需要實現一個操作:已知[Y]補,求[-Y]補。這時需要包括符號位在內全部取反,再加1。

3.6 BCD碼

用四位二進位描述0~9十個十進位數

  • 對應關係

    • 0000---0
    • 0001---1
    • ..........
    • 1001---9
  • 也稱8421碼

  • 更複雜的表示

    • 組合BCD數,兩個BCD碼放在存儲器的一個位元組中。
    • 分離BCD數,兩個BCD碼分別放在兩個位元組的低四位,高四位為0.
    • 加減法有以上兩種表示,而乘除只有分離BCD數。
  • BCD碼的運算:主要是換算進位問題。

    如下圖,53+28的運算中需要判斷是否超過9,如果超過9而未達16,需要+6強制轉化。

    這時就用到了AF。

7

程式實現中

mov AL,53
add AL,28
DAA;如果設計BCD計算,+6調整
;如果是分離BCD,需要AAA指令

3.7 字元表示 ASCII碼

  • '0''9':30H39H

  • 字元到數字轉化:-30H

  • 'A''F':41H46H

    • 字元到數字轉化:-37H
  • 'a''f':61H66H

    • 大小寫轉化:

      ;假設將AL中轉換為大寫
      ;大寫和小寫僅在第五位有區別
      ;;大寫:0100_xxxx
      ;;小寫:0110_xxxx
      AND AL,0DFH
      ;;由於第七位必然為0
      AND AL,5FH
      
      
      ;AL中轉換為小寫
      OR AL,20H
      

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Loj鏈接:接竹竿 $ {\scr \color {SkyBlue}{\text{Solution}}} $ 題目大意: 給定一個數組,每次加入一種顏色的數,可以取走與它顏色相同的兩個數之間的所有數,問最後取走的所有數中最大和是多少 分析: 第一眼看到的是二分答案,但不知道二分的check()函數怎 ...
  • 2023-01-19 Spring聲明式事務管理屬性 一、隔離級別 1、概念:一個事務與其他事務之間的隔離等級(1,2,4,8)。 2、隔離級別: (1)讀未提交(1):READ UNCOMMTTED 存在問題:臟讀(讀取到了未提交數據) (2)讀已提交(2):READ COMMTTED 存在問題: ...
  • 概述 web管理系統中可以對業務數據執行新增和刪除,現在需要當業務數據發生新增或刪除操作後,儘可能實時的反應到WPF客戶端上面。 web管理系統用VUE編寫,後端服務為SpringBoot,WPF客戶端基於.Netframework4.8編寫。 整體架構 sequenceDiagram title: ...
  • 在工作中,為了防止文件被隨意複製和傳播,通常我們會選擇在文檔中添加水印來對文件進行有效保護。文字水印是比較常見的一種保護手段,它可以有效防止文件被任意複製和隨意列印傳播。不過,Excel預設並沒有水印功能。此時,我們可以把插入的藝術字作為水印,將水印和工作表融合在一起,以防止文檔被覆制傳播。那麼如何 ...
  • 如何實現在react現有項目中嵌入Blazor? 目前官方只提供了angular和react倆種示例所以本教程只將react教程 思路講解: 首先在現有react項目中我們可能某些組件是在Blazor中完成,但是我們沒辦法找到怎麼在react中輕量級使用blazor組件,可能會有人會使用iframe ...
  • 字元格式設置是指用戶對字元的屏幕顯示和列印輸出形式的設定。Word文檔中的字元格式有:字體、字型大小、字體顏色、高亮顏色、邊框、下劃線、斜體、陰影字、著重號等等。帶格式的文本可以突出內容重點,引起讀者註意。應用字元格式可以使簡單的文檔變得比只使用純文本更具吸引力。本文將為您介紹一種高效便捷的方法,通過編 ...
  • 這周收到兩片基於LGT8F328P LQFP32的Arduino Mini EVB, 機器上沒有 Arduino 環境需要新安裝, 正好感受一下新出的 Arduino IDE 2.x, 記錄一下 Ubuntu 20.04/22.04 下安裝 Arduino IDE 2.x 的過程. ...
  • 最近幾天用Python寫了個介面後臺服務,把它部在了伺服器的300埠上。之後,我又要把一個二級功能變數名稱解析到該伺服器的300埠上,此時就要用到NGINX了。因為之前對NGINX的使用並不熟悉,特此記錄下來,方便回顧。用了該方法,就能為伺服器上的多個不同介面服務綁定不同的功能變數名稱了,這也就是把多個功能變數名稱解析 ...
一周排行
    -Advertisement-
    Play Games
  • 一:背景 1. 講故事 年前遇到了好幾例托管堆被損壞的案例,有些運氣好一些,從被破壞的托管堆記憶體現場能觀測出大概是什麼問題,但更多的情況下是無法做出準確判斷的,原因就在於生成的dump是第二現場,借用之前文章的一張圖,大家可以理解一下。 為了幫助更多受此問題困擾的朋友,這篇來整理一下如何 快狠準 的 ...
  • 前言 .NET6 開始,.NET Croe API 項目取消了 Startup.cs 文件,在 Program.cs 文件的 Main 函數中完成服務的註冊和中間件管道的管理。但當我們項目引入更多包的時候,Program.cs 文件也會看起來很臃腫。 而且,我們不只會有一個後端項目,為了方便快速創建 ...
  • 目錄 背景 get 與 post 的區別 所有介面都用 post 請求? 背景 最近在逛知乎的時候發現一個有趣的問題:公司規定所有介面都用 post 請求,這是為什麼? 看到這個問題的時候其實我也挺有感觸的,因為我也曾經這樣問過我自己。在上上一家公司的時候接到一個項目是從零開始搭建一個微服務,當時就 ...
  • *以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 微信公眾號「englyf」https://mp.weixin.qq.com/s/2GFLTstDC7w6u3fTJxflNA 本文大概 1685 個字,閱讀需花 6 分鐘內容不多, 但也花了一些精力如要交流, 歡迎關註我然後評論區留言 謝謝你的 ...
  • 在新版本的pandas中,上述代碼會引起警告,建議改成SQLAlchemy connectable(engine/connection),後續代碼將引入這種升級的連接方式。 ...
  • 幾乎所有的高級編程語言都有自己的垃圾回收機制,開發者不需要關註記憶體的申請與釋放,Python 也不例外。Python 官方團隊的文章 https://devguide.python.org/internals/garbage-collector 詳細介紹了 Python 中的垃圾回收演算法,本文是這篇 ...
  • 如果您想查找高於或低於平均值的數字,可以不必計算該平均值,就能查看更高或更低的值。通過Java應用程式,可以自動突出顯示這些數字。除了快速突出顯示高於或低於平均值的值外,您還可以查看高於或低於的值的個數。現在讓我們看看如何在 Java應用程式中實現此操作。 引入jar包 導入方法1: 手動引入。將  ...
  • 第一種方式:使用{} firstDict = {"name": "wang yuan wai ", "age" : 25} 說明:{}為創建一個空的字典對象 第二種方式:使用fromkeys()方法 second_dict = dict.fromkeys(("name", "age")) #valu ...
  • 在golang中可以使用a := b這種方式將b賦值給a,只有當b能進行深拷貝時a與b才不會互相影響,否則就需要進行更為複雜的深拷貝。 下麵就是Go賦值操作的一個說明: Go語言中所有賦值操作都是值傳遞,如果結構中不含指針,則直接賦值就是深度拷貝;如果結構中含有指針(包括自定義指針,以及切片,map ...
  • 本文結合京東監控埋點場景,對解決樣板代碼的技術選型方案進行分析,給出最終解決方案後,結合理論和實踐進一步展開。通過關註文中的技術分析過程和技術場景,讀者可收穫一種樣板代碼思想過程和解決思路,並對Java編譯器底層有初步瞭解。 ...