微機原理與系統設計筆記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
  • PasteSpider是什麼? 一款使用.net編寫的開源的Linux容器部署助手,支持一鍵發佈,平滑升級,自動伸縮, Key-Value配置,項目網關,環境隔離,運行報表,差量升級,私有倉庫,集群部署,版本管理等! 30分鐘上手,讓開發也可以很容易的學會在linux上部署你得項目! [從需求角度介 ...
  • SQLSugar是什麼 **1. 輕量級ORM框架,專為.NET CORE開發人員設計,它提供了簡單、高效的方式來處理資料庫操作,使開發人員能夠更輕鬆地與資料庫進行交互 2. 簡化資料庫操作和數據訪問,允許開發人員在C#代碼中直接操作資料庫,而不需要編寫複雜的SQL語句 3. 支持多種資料庫,包括但 ...
  • 在C#中,經常會有一些耗時較長的CPU密集型運算,因為如果直接在UI線程執行這樣的運算就會出現UI不響應的問題。解決這類問題的主要途徑是使用多線程,啟動一個後臺線程,把運算操作放在這個後臺線程中完成。但是原生介面的線程操作有一些難度,如果要更進一步的去完成線程間的通訊就會難上加難。 因此,.NET類 ...
  • 一:背景 1. 講故事 前些天有位朋友在微信上丟了一個崩潰的dump給我,讓我幫忙看下為什麼出現了崩潰,在 Windows 的事件查看器上顯示的是經典的 訪問違例 ,即 c0000005 錯誤碼,不管怎麼說有dump就可以上windbg開幹了。 二:WinDbg 分析 1. 程式為誰崩潰了 在 Wi ...
  • CSharpe中的IO+NPOI+序列化 文件文件夾操作 學習一下常見的文件、文件夾的操作。 什麼是IO流? I:就是input O:就是output,故稱:輸入輸出流 將數據讀入記憶體或者記憶體輸出的過程。 常見的IO流操作,一般說的是[記憶體]與[磁碟]之間的輸入輸出。 作用 持久化數據,保證數據不再 ...
  • C#.NET與JAVA互通之MD5哈希V2024 配套視頻: 要點: 1.計算MD5時,SDK自帶的計算哈希(ComputeHash)方法,輸入輸出參數都是byte數組。就涉及到字元串轉byte數組轉換時,編碼選擇的問題。 2.輸入參數,字元串轉byte數組時,編碼雙方要統一,一般為:UTF-8。 ...
  • CodeWF.EventBus,一款靈活的事件匯流排庫,實現模塊間解耦通信。支持多種.NET項目類型,如WPF、WinForms、ASP.NET Core等。採用簡潔設計,輕鬆實現事件的發佈與訂閱。通過有序的消息處理,確保事件得到妥善處理。簡化您的代碼,提升系統可維護性。 ...
  • 一、基本的.NET框架概念 .NET框架是一個由微軟開發的軟體開發平臺,它提供了一個運行時環境(CLR - Common Language Runtime)和一套豐富的類庫(FCL - Framework Class Library)。CLR負責管理代碼的執行,而FCL則提供了大量預先編寫好的代碼, ...
  • 本章將和大家分享在ASP.NET Core中如何使用高級客戶端NEST來操作我們的Elasticsearch。 NEST是一個高級別的Elasticsearch .NET客戶端,它仍然非常接近原始Elasticsearch API的映射。所有的請求和響應都是通過類型來暴露的,這使得它非常適合快速上手 ...
  • 參考delphi的代碼更改為C# Delphi 檢測密碼強度 規則(仿 google) 仿 google 評分規則 一、密碼長度: 5 分: 小於等於 4 個字元 10 分: 5 到 7 字元 25 分: 大於等於 8 個字元 二、字母: 0 分: 沒有字母 10 分: 全都是小(大)寫字母 20 ...