彙編語言學習分享第2章

来源:https://www.cnblogs.com/Timesi/archive/2020/01/14/12193386.html
-Advertisement-
Play Games

CPU的組成 CPU是由運算器(信息處理)、控制器(控制器件工作)、寄存器(信息存儲)等器件組成,他們之間通過匯流排相連。 通用寄存器 通用寄存器時用於存放一般性數據的,以8086 CPU為例,8086 CPU所有的寄存器都是16位的,8086 CPU中的通用寄存器有AX、BX、CX、DX。為了相容上 ...


CPU的組成

CPU是由運算器(信息處理)、控制器(控制器件工作)、寄存器(信息存儲)等器件組成,他們之間通過匯流排相連。

通用寄存器

通用寄存器時用於存放一般性數據的,以8086 CPU為例,8086 CPU所有的寄存器都是16位的,8086 CPU中的通用寄存器有AX、BX、CX、DX。為了相容上一代CPU中的8位寄存器,這4個寄存器都可以拆成兩個8位的寄存器使用,也就是將16位分成兩個8位,AX可分為AH和AL,BX可分為BH和BL,CX可分為CH和CL,DX可分為DH和DL。這裡的H可以記為High,高位,L可以記為Low,低位。
再來說一下數據寬度,因為寄存器有16位和8位兩種,所以數據寬度可以分為位元組和字,一個位元組由8個bit組成,可以直接使用低位存儲,一個字由兩個位元組,也就是16位,比如一個十六進位3E10,將這個十六進位存放到AX寄存器總,3E就存放在高位AH中,10存放在低位AL中。

記憶體單元的物理地址

之前說過數據是通過地址線存放在記憶體單元中的,那麼就必須要確定這個記憶體單元的地址。
基礎地址=段地址x16
基礎地址+偏移地址=物理地址
所以物理地址=段地址x16+偏移地址,這裡的16是十進位的16,也就是十六進位的A。
這裡的段地址可以理解為一段一段的記憶體存儲單元,但是段地址並不是固定的,可以認為10000H-100FFH是一個段,也可以將這段地址看成是10000H-1007F和10080H-100FFH組成的段,以10000H-100FFH為例,它的段地址是1000H,偏移地址為FF,這樣基礎地址就是1000Hx10H=10000H,這樣就可以確定基礎地址。再加上偏移地址,就可以確定這段記憶體。

段寄存器

既然可以通過段地址和偏移地址確定物理地址,那麼就需要寄存器來存放段地址,8086 CPU中有4個段地址:CS、DS、SS、ES,偏移地址存放在IP寄存器中,這裡以CS寄存器為例,可以簡單的理解為通過CS(代碼段寄存器)、IP(指令指針寄存器)兩個寄存器可以確定CPU需要讀取的指令的地址,也就是CPU會將CS:IP指向的內容當作指令執行。

操作指令

  • mov指令
    mov指令稱為傳送指令,可以使用這個指令為寄存器賦值,例:mov ax,123 這個語句就類似於C語言中的賦值操作ax=123;

  • jmp指令
    jmp指令叫做轉移指令,可以用於設置CS、IP中的值(mov指令不能修改CS、IP中的值),例:jmp 2AE3:3,執行這個指令後,CS的值被修改為2AE3H,IP的值被修改為0003H,CPU將從2AE33H處讀取指令。

8086CPU工作過程

(1)從CS:IP指向的記憶體單元讀取指令,讀取的指令進入指令緩衝器
(2)IP指向下一條指令
(3)執行讀取進指令緩衝器的指令
(4)重覆上述三個步驟


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

-Advertisement-
Play Games
更多相關文章
  • 數據結構(Data structure):是電腦組織數據和存儲數據的方式,是指一組相互之間存在一種或多種特定關係的數據的組織方式和它們在電腦內的存儲方式,以及定義在該組數據上的一組操作。 ...
  • 操作系統:Windows7 64bit Python版本:3.8下載地址:https://www.python.org/downloads/release/python-380/,選擇下方的Windows x86-64 executable installer 安裝步驟: 雙擊安裝文件python- ...
  • 最近困擾自己很久的膝蓋積液手術終於做完,在家養傷,逛技術博客看到easyswoole開發組成員仙士可博客有關mysql索引方面的知識,自己打算重溫下。 正常業務起步數據表數據量較少,不用考慮使用索引,當後期累積的數據數量非常可觀時,使用索引是提升查詢的一條途徑,其他的像表分區,分庫分表等等。 【索引 ...
  • 計數排序是需要假設輸入數據的排序之一,它假設輸入元素是0到k區間內的一個整數,其中k為某個整數。當k=O(n)時,計數排序的時間複雜度為θ(n)。 因為不是通過比較來排序,所以它的時間複雜度可以達到θ(nlgn)以下。 計數排序是穩定的排序之一。 代碼如下:(僅供參考) //計數排序期望輸入數據都是 ...
  • 安全與加密 無論是開發Web應用的開發者還是企圖利用Web應用漏洞的攻擊者,對於Web程式安全這個話題都給予了越來越多的關註。特別是最近CSDN密碼泄露事件,更是讓我們對Web安全這個話題更加重視,所有人都談密碼色變,都開始檢測自己的系統是否存在漏洞。那麼我們作為一名Go程式的開發者,一定也需要知道 ...
  • 歸併排序利用分治策略進行排序。原理如下 分解:分解待排的n個元素的序列成個具n/2個元素的兩個子序列。 解決:使用歸併排序遞歸地排序兩個子序列。 合併:合併兩個已排序的子序列以產生已排序的答案。 歸併排序的時間複雜度是θ(nlgn)。 歸併排序是穩定排序之一。 歸併排序不是原址排序,在合併階段需要申 ...
  • 插入排序是最常用的排序之一。 在輸入規模較小的時候,插入排序的性能較好。 最好情況下插入排序的時間複雜度是O(n),平均情況則為O(n2)。 插入排序是穩定的排序演算法之一。 基本思路為從第二個元素開始,依次插入前面已經排好序的序列,利用迴圈不變式很容易理解。 代碼如下:(僅供參考) 1 void I ...
  • 1. MVC設計模式 MVC設計模式:Model-View-Controller簡寫。 最早由TrygveReenskaug在1978年提出,是施樂帕羅奧多研究中心(Xerox PARC)在20世紀80年代為程式語言Smalltalk發明的一種軟體設計模式,是為了將傳統的輸入(input)、處理(p ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...