彙編第一章--基礎知識梳理與總結

来源:https://www.cnblogs.com/Vincent12/archive/2018/10/04/9743660.html
-Advertisement-
Play Games

在談彙編語言的開始,我想大家可能有這樣的疑問:1、在電腦這個領域內,我們最不缺的就是語言,例如:C,C++,C#,JAVA,PHP,VB,Fortran,phthon·····共256種之多。這裡有這麼多高級語言,我們為什麼一定要學彙編語言,這個看上去並不流行而且比較古老的編程語言?2、彙編語言是 ...


在談彙編語言的開始,我想大家可能有這樣的疑問:1、在電腦這個領域內,我們最不缺的就是語言,例如:C,C++,C#,JAVA,PHP,VB,Fortran,phthon·····共256種之多。這裡有這麼多高級語言,我們為什麼一定要學彙編語言,這個看上去並不流行而且比較古老的編程語言?2、彙編語言是一種什麼樣的編程語言,它存在的魅力與價值在哪?3、學習了彙編語言以後我們能幹什麼?當然在我們學習彙編語言之初肯定無法回答這些問題,陸游就曾有一句;“絕知此事要躬行”,在我們慢慢進入了彙編的殿堂之後,我想這些問題就早已不言而喻了。

一、電腦編程語言的演進:

電腦語言總的來說分為機器語言,彙編語言,高級語言三大類,而這三種語言也恰恰是電腦語言發展的三個階段。

下圖為電腦的發展階段:

我們先來感受一下三個階段語言的不同的特點:

從這張圖你可能會發現,機器語言代碼這是什麼呀,人類根本讀不懂,那到底什麼是機器語言呢?

1、機器語言:

在早期,機器語言是直接對硬體進行操作,但是機器語言是0和1的字元串,這就是的早期程式員的工作十分繁雜,如果0或者1有一位出錯,那麼整個程式就會崩潰,那麼如何解決這個問題呢?在這時,彙編語言就應運而生了。

2、彙編語言:

這樣人類與電腦就通過彙編語言這一媒介第一次產生了聯繫:

機器指令:1000100111011000

操作:寄存器BX的內容送到AX中

彙編指令:MOV,AX,BX

電腦執行彙編語言的基本過程:

但是從圖二我們也可以看到,彙編語言還是過於繁瑣,只能在懂電腦的程式員之間廣泛流傳。而在普通人之中,他們無法理解這個比較複雜的語言,所以為了讓電腦編程語言更加普及,聰明的程式員們想出了更加簡潔的方式,這是高級語言橫空出世。

3、高級語言:

當今比較流行的高級語言:

二、彙編語言的組成與用法:

彙編語言發展至今,有以下3類指令組成。

(1):彙編指令:這是機器碼的助記符,有對應的機器碼。

(2):偽指令:沒有對應的機器碼,由編譯器執行,電腦並不執行

(3):其他符號:如 + - * / 等,由編譯器識別,沒有對應的機器碼

 彙編語言的核心是彙編指令,它決定了彙編語言的特性。

 學習電腦的人肯定都認識電腦之父------馮.諾依曼,他提出的電腦的五大體系至今仍是電腦的基本結構:

從該圖中我們可以發現電腦的核心是Central Contral——CPU,它控制整個電腦的運作併進行運算。要想讓一個CPU工作,就必須向它提供指令和數據,指令和數據是應用上的概念。在記憶體或磁碟上,指令和數據沒有任何區別,都為二進位信息。指令和數據在存儲器中存放,也就是Memory(記憶體),再好的CPU如果沒有記憶體,就無法工作。因此,我們要瞭解CPU到底是怎樣從記憶體中讀取信息以及向記憶體中寫入信息的。

存儲器被劃分為若幹個存儲單元,每個單元從0開始順序編號,就好比一棟大樓有128個房間,各個房間有門牌號0~127。那麼一個存儲單元能存儲多少信息呢?電子電腦的最小信息單位是bit,也就是一個二進位位。8個bit組成一個Byte,也就是一個位元組。微機存儲器的容量是以位元組為最小單位來計算的。對於大容量的存儲器一般還用以下的單位來計算容量:

1KB=1024B           1MB=1024KB          1GB=1024MB          1TB=1024GB

1GB=230Byte       1MB=220Byte          1KB=210Byte

CPU要想進行數據的讀寫必須與外部器件進行3類的信息交互:

•存儲單元的地址信息(地址信息)   •器件的選擇,讀或寫的命令(控制信息)   •讀或寫的數據(數據信息)

既然CPU要讀取數據,那麼數據怎麼傳輸呢?電子電腦能處理的都是電信號,電信號肯定要用導線傳送。電腦中有專門連接CPU和其他晶元的導線,通常稱為匯流排,匯流排從邏輯上又分為3類:地址匯流排,控制匯流排和數據匯流排。

CPU從3號單元讀取數據的過程如下:

(1)CPU通過地址線將地址信息3發出  (2)CPU通過控制線發出記憶體讀命令,選中存儲器晶元,並通知它,將要從中讀取數據  (3)存儲器將3號單元中的數據8通過數據線送入CPU

 地址匯流排:CPU通過地址匯流排來指定存儲器單元,因此地址匯流排的數量決定了能夠表示多少個地址,例如:一個CPU有10根地址匯流排,一根導線可以傳送的穩定狀態只有高電平與低電平,用二進位表達也就是0或1,10根導線可以傳送10位二進位數據,也就是可以傳送210個不同的數據,最小數為0,最大數為1023。

因此我們可以總結:一個CPU有N根地址線,則可以說這個CPU的地址匯流排的寬度為N。這樣的CPU最多可以尋找2n個記憶體單元,編號為:0~2n-1

10根地址匯流排的CPU向記憶體發出地址信息11的二進位示意圖:

 

②數據匯流排:數據匯流排的寬度決定了CPU和外界的數據的傳送的速度,8根數據匯流排一次可以傳送8位2進位數據(即是一個位元組),16根數據匯流排就是兩個位元組,8088CPU的數據匯流排的寬度為8,8086CPU的數據匯流排寬度是16,下圖展示了8086CPU數據匯流排的傳輸情況:

③控制匯流排:控制匯流排的寬度決定了CPU對外界部件的控制能力。

下麵開始一個新的內容:記憶體地址空間,比如說,一個CPU的地址匯流排寬度為10,那麼可以定址1024個記憶體單元,這1024個可尋的記憶體單元就構成了這個CPU的記憶體地址空間,記憶體地址空間並不是真正存在的,是邏輯上的地址空間。記憶體地址空間比較抽象,若想深入瞭解就必須具備兩個知識點:主板與介面卡。

主板:上面有核心器件,和一些主要器件,這些器件通過匯流排相連,器件有CPU,存儲器,外圍晶元組,擴展插槽(其中插有RAM記憶體條和各類介面卡)

介面卡:就是連接一些外部設備,可以讓CPU對外部設備進行控制,比如顯示器,音響,印表機·······

CPU在控制這些器件時,只是把它們當作記憶體來看,把它們總的看作一個由若幹存儲單元組成的邏輯存儲器,這個邏輯存儲器就是我們所述的記憶體地址空間

在上圖中,所有物理存儲器被看做一個邏輯存儲器,每個物理存儲器在邏輯存儲器中都有一個地址段,即是一段地址空間(註意:存儲器並不是一段一段的)CPU在這段地址上讀寫數據,實際上就是在相應的物理存儲器中讀寫數據。記憶體空間的大小受到地址匯流排寬度的限制,比如:8086CPU地址匯流排寬度為20,則定址能力為2^20 即是1MB,80836CPU的地址匯流排寬度是32 則記憶體地址空間最大為4GB,所以我們在基於電腦硬體編程時,要知道這個系統的第一個單元地址,和最後一個單元的地址,才能保證讀寫操作是在預期的存儲器中進行。

 


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

-Advertisement-
Play Games
更多相關文章
  • 現如今,微信已經被老老少少、全民所用。可是,在運用的過程中,也會呈現不少過錯的操作導致被封號,而許多封號都需求老友輔佐驗證的,接下來我就說下輔佐驗證的註意事項。 辦法/步驟 現如今,微信已經被老老少少、全民所用。可是,在運用的過程中,也會呈現不少過錯的操作導致被封號,而許多封號都需求老友輔佐驗證的, ...
  • 許多人來訴苦,說自己的號被平白無故封了,約束登錄,需求約請老友來輔佐,可是自己第一次遇到這個狀況,又怕犯錯導致更嚴重的封號。今日就寫這篇文章,通知咱們具體的操作過程,依照我說的一步步做,確保不會出問題。 許多人來訴苦,說自己的號被平白無故封了,約束登錄,需求約請老友來輔佐,可是自己第一次遇到這個狀況 ...
  • 微信在咱們日程日子中在許多人現已習慣了這個溝通方式。 但是有些運用者在運用不當的狀況下,會莫名的被封號。或許在運用過程中運用外掛軟體、群發廣告、發佈國家不允許的內容(如涉黃、涉賭、暴利、反動等)。 在這兒就需要給微信號解封了。怎麼解封成了許多用戶心中的疑慮。小編將為您回答,告訴您怎麼自助免除微信號封 ...
  • 跟著2018年國家展開的凈網舉動,在互聯網上任何行為舉止都需求慎重對待,一不留神的言語失去或違規,則會存在處分的危險,微信也不破例。近期微信嚴打違規微信號,讓不少對準則不瞭解的用戶也絕不留情的也直接給予了處分封禁。本次經歷講解的則是微信約束登入不可解封是否還能夠解封? 方法/過程: 跟著2018年國 ...
  • 題意 "題目鏈接" Sol 非常妙的一道題。。 可以這樣想,在BFS序中較早出現的一定是先訪問的,所以把每個點連出去的邊按出現的前後順序排個序 看一下按順序遍歷出來的序列與給出的是否相同就行了 cpp include using namespace std; const int MAXN = 2e5 ...
  • ·實驗任務 (1)使用Debug,用E命令和A命令以兩種方式將指令寫入記憶體 機器碼 彙編指令 b8 20 4e mov ax,4e20h 05 16 14 add ax,1416h bb 00 20 mov bx,2000h 01 d8 add ax,bx 89 c3 mov bx,ax 01 d8 ...
  • 第一章,我們介紹了有關彙編語言的基礎知識,在第二章我們主要介紹寄存器。 CPU的主要部件是寄存器,在8086CPU有14個寄存器,它們分別是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。8086CPU的所有寄存器都是16位的,可以存放兩個位元組。AX、BX、C ...
  • 一.資料庫連接 (前面為jdbc的其他參數,文章下部分為ResultSet詳解) ResultSet rs = st.executeQuery(sqlStr) 1. java的sql框架支持多種資料庫連接,不同的資料庫需要使用不同的資料庫連接驅動,驅動來自於資料庫廠商; 2. 主要需要四個參數,一個 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...