微機原理與系統設計筆記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、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...