微機原理與系統設計筆記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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...