匯編入門

      網友投稿 1009 2025-03-31

      一、基礎知識

      ( 1 )機器語言

      機器語言是機器指令的集合。電子計算機的機器指令是一系列二進制數字。計算機將之轉換為一系列高低電平脈沖信號來驅動硬件工作的。

      (2)匯編語言的產生

      我們知道機器只能看懂機器語言,也就是0和1。實際上0和1只是我們規定的數字,機器其實連0和1也看不懂,這里的0和1實際上是指兩種不同的電壓狀態,計算機是用電的,它能理解的就是電壓的變化,所以我們通過不同的電壓驅動計算機運算,來完成我們所需要的任務。

      在早期,人們通過紙帶來編程,打孔的地方表示1, 不 打孔的地方表示0,然后將紙帶輸入計算機中。這種方式不但費時費力,而且不同發現錯誤。

      例如下面的程序:

      -

      Java 代碼

      1

      101110000000000000000011

      2

      000001010000000000110000

      3

      001011010000000000000101

      這是8086CPU完成運算s=768+12288-1280的程序,如果這個程序中錯誤的將一個0寫成了1,試想要想發現這個錯誤是多么的困難。

      為了方便人們編寫程序,并且避免01代碼容易出錯的問題,人們發明了匯編語言。

      例如:機器指令1000100111011000表示把寄存器BX的內容送到AX中。匯編指令則寫成 mov ax,bx 。這樣的寫法與人類語言接近,便于閱讀和記憶。

      (3)匯編語言的組成

      匯編指令 ( 機器碼的助記符,有對應的機器碼 ) ;

      偽指令 ( 由編譯器執行 ) 和 其他符號 ( 由編譯器識別 ) 。

      (4) 存儲器

      CPU工作需要指令和數據,指令和數據存儲在存儲器中。

      (5)指令和數據

      在內存或者磁盤中存儲的都是為二進制信息, 指令和數據由我們設定(走的總線) 。

      (6) 存儲單元

      ? 存儲器被劃分為若干個存儲單元,每個存儲單元從0開始順序編號。

      ? B、KB、MB、GB、TB等單位。

      (7)CPU對存儲器的讀寫

      我們知道數據和指令是放在內存中的,CPU通過總線對存儲器進行訪問,但實際上總線是分為三部分的,即地址線,控制線和數據線。地址線表示CPU要對內存中的哪個地址進行操作,所以地址線的條數決定了CPU能夠訪問的內存范圍,因為一根線上最多只能有兩種不同的狀態即0和1,所以10根地址線能夠訪問的存儲單元的個數就是2^10個。

      地址 線僅僅 是送出了要操作的地址,但是并沒有聲明要進行什么操作,所以控制線就是來決定對存儲單元的操作的。所以說控制線的條數決定了CPU能夠執行的操作的種類。

      數據線是用來在CPU和內存之間進行數據傳送的,所以數據線的條數決定了一次最多傳送的數據的數量,例如8根數據線一次就能傳送8個bit即一個字節。

      上圖展示了CPU從3號內存單元中讀取數據的過程。首先CPU利用數據線送出地址3,然后通過控制線發送讀命令,然后內存將結果通過數據線返回給CPU。

      (8) 內存地址空間

      什么是內存地址空間呢?舉例來講,一個CPU的地址總線寬度為10,那么可以尋址1024個內存單元,這1024個可尋到的內存單元就構成了這個CPU的內存地址空間。當然這里所說的內存并不單單是內存條中的內存,還包括其他各種外設中的RAM和ROM。例如,顯卡也有自己的內存,用來存儲在顯示屏上顯示的內容,另外顯卡BIOS ROM也被 當做 是內存空間中的一部分,此外還有網卡的BIOS ROM和系統BIOS ROM地址空間等。

      因此我們在基于一個計算機硬件系統編程時,必須要知道這個系統中的內存地址空間分配情況。應為當我們想在某類存儲器中讀寫數據的時候,必須知道它的第一個單元地址和最后一個單元地址,才能保證讀寫操作是在預期的存儲器中進行的。比如,我們希望在顯示器上輸出一段信息,那么必須將這段信息寫到顯存中,顯卡才能將它輸出到顯示器上,要想向顯存中寫入數據,必須知道 顯存在 地址空間中的地址。

      上圖展示了8086PC機內存地址空間分配的基本情況。從地址0~9FFFF的內存單元中讀取數據,實際上就是在 讀取住 隨機存儲器中的數據;向地址A0000~BFFFF的內存單元中寫數據,就是向顯示器中寫入數據,這些數據 會被顯卡 顯示到顯示器上;我們向C0000~FFFFFF的內存單元中寫入數據的操作是無效的,因為這等于改寫只讀存儲器中的內容。

      小結:

      1、匯編指令時機器指令的助記符,與機器指令一一對應。

      2、每一種CPU都有自己的匯編指令集。

      3、CPU可以直接使用的信息在存儲器中存放。

      4、在存儲器中指令和數據都是二進制信息。

      5、存儲單元從0開始順序編號。

      6、一個存儲單元可以存儲8個bit。

      7、B、KB、MB、GB等單位之間的轉換。

      8、CPU管腳和總線相連。總線的寬度表示CPU不同方面的性能:

      (1)地址總線的寬度決定了CPU的尋址能力;

      (2)數據總線的寬度決定了CPU與其他器件進行一次數據傳送的量;

      (3)控制總線寬度決定了CPU對系統中其他器件的控制。

      二、寄存器(CPU的工作原理)

      CPU由運算器、控制器、寄存器 等器件組成,靠內部總線相連。

      內部總線實現CPU內部各器件之間的聯系;外部總線實現CPU和主板上其他器件的聯系。

      在CPU中:

      (1)運算器進行信息處理;

      (2)寄存器進行信息存儲;

      (3)控制器控制各種器件進行工作;

      (4)內部總線連接各種器件在它們之間進行數據的傳送。

      1、 通用寄存器

      8086有14個寄存器:

      AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、CS、ES、PSW。

      AX、BX、CX、DX通常用來存放一般性數據,被稱為通用寄存器。

      16位寄存器所能存儲的數據最大值為2^16-1 。

      為保證兼容性,8086 CPU的通用寄存器可以分為兩個獨立的8位寄存器使用。例: AX可分為AH和AL。

      2、 字在寄存器中的存儲

      (1)8086 CPU所有的寄存器是16位,可以存放2個字節(一個字)

      (2) 一 字節由8 bit 組成,可以存在8位寄存器中

      (3)字(word)是兩字節,16位。

      3、幾條匯編指令

      匯編指令對大小寫不敏感

      匯編入門

      4、 物理地址

      ? 所有的內存單元構成一個一維的線性存儲空間。

      ? CPU訪問內存單元時要給出內存單元的唯一地址就是物理地址。

      5、16位結構的CPU

      ? 運算器一次最多可以處理16位數據。

      ? 寄存器的最大寬度為16位。

      ? 寄存器和運算器之間的通路是16位。

      6、 8086 CPU給出物理地址的方法

      ? 8086有20位的地址總線,可以傳送20位地址,尋址能力為1M;但8086內部為16位結構,只能傳送16位的地址。

      ? 8086CPU采用一種在內部用兩個16位地址合成的方法來形成一個20位的物理地址。

      8086CPU讀寫內存的步驟:

      (1)CPU中的相關部件提供段子和偏移地址這兩個16位的地址;

      (2)段地址和偏移地址通過內部總線送入到一個稱為地址加法器的部件;

      (3)地址加法器將兩個16位地址合并成一個20位的地址;

      (4)地址加法器通過內部總線將20位物理地址 送 送入輸入輸出地址;

      (5)輸入輸出控制電路將20位物理地址送上地址總線;

      (6)20位物理地址被地址總線傳送到存儲器。

      地址加法器工作原理:物理地址=段地址*16+偏移地址。

      段地址*16就是數據左移4位(二進制)

      一個數據的二進制形式左移N位,相當于該數據乘以2的N次方。一個數據X進制形式左移N位,相當乘以N^X。

      7、段地址*16+偏移地址=物理地址

      CPU可以通過不同的段地址和偏移地址形成一個相同的物理地址。

      8、段的概念

      人為定義的,將若干地址連續的內存單元看作一個段。用段地址*16定位段的起始地址(基址),用偏移地址定位段中的內存單元。

      一個段的起始地址是16的倍數。偏移地址為16位,尋址能力為64K,所以段的最大長度也是64K

      三、寄存器(內存訪問)

      1、 mov 、add、sub指令

      ? 有兩個操作對象, jmp 只有一個操作對象。

      ? 使用 匯編金 手指查閱指令

      ? mov 指令的幾種形式

      -

      Java 代碼

      1

      mov 寄存器,數據;???????????? mov ax,8

      2

      mov 寄存器,寄存器;????????? mov ax,bx

      3

      mov 寄存器,內存單元;????? mov ax,[0]

      4

      mov 內存單元,寄存器;????? mov [0],ax

      5

      mov 段寄存器,寄存器;????? mov ds,ax

      6

      mov 寄存器,段寄存器;????? mov ax,ds

      ? add指令的幾種形式

      -

      Java 代碼

      1

      add 通用寄存器,數據

      2

      add 通用寄存器,通用寄存器

      3

      add 通用寄存器,內存單元

      4

      add 內存單元,寄存器

      ? sub指令的幾種形式

      -

      Java 代碼

      1

      sub 通用寄存器,數據

      2

      sub 通用寄存器,通用寄存器

      3

      sub 通用寄存器,內存單元

      4

      sub 內存單元,通用寄存器?

      2、 棧

      ? 具有特殊的訪問方式的存儲空間,也是內存空間的一部分,數據 先進后出。

      ? 有兩個基本操作:

      o 入 棧 :將一個新的元素放到 棧 頂;

      o 出 棧 :從 棧 頂取出一個元素。

      ? 棧 頂元素最后入 棧 最先出 棧 。

      3、8086 CPU提供的 棧 機制

      現今的CPU都有 棧 的設計,基于8086CPU編程可以將一段內存當作 棧 來使用。

      8086CPU的入 棧 (PUSH)和POP(出 棧 ),以字為單位。

      push ax 將寄存器ax中的數據送入 棧

      pop ax 從 棧 頂取出數據送入ax

      段寄存器SS存放 棧 頂的段地址,寄存器SP存放 棧 頂的偏移地址。任意時刻SS:SP指向 棧 頂元素。push時SP先自減法后寫內存,pop先讀內存 sp 后自加。

      pop之后數據還是存在內存中,push時覆蓋。

      CS和IP存放當前指令的段地址和偏移地址。

      4、 棧 頂越界的問題

      ? 棧 是空的,則SP指向 棧 底+1的內存。

      ? 8086 CPU只紀錄 棧 頂, 棧 空間由自己控制。 棧 頂越界問題導致溢出漏洞。

      ? 8086CPU只考慮當前的情況:

      o 當前 棧 頂在何處;

      o 當前要執行的指令時哪一條。

      匯編語言

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:word里的表格怎么調行間距(word中表格行間距怎么調)
      下一篇:在線編輯器插入表格,讓你的內容更有組織和效果
      相關文章
      国产精品亚洲综合网站| 在线a亚洲老鸭窝天堂av高清| 亚洲AV无码专区在线观看成人| 亚洲1区1区3区4区产品乱码芒果| 亚洲一区综合在线播放| 亚洲国产成人一区二区三区| 成人午夜亚洲精品无码网站| 亚洲精品456播放| 亚洲国产精品丝袜在线观看| www.91亚洲| 亚洲国产精品无码久久青草| 亚洲国产成人精品无码区二本| 亚洲色大情网站www| 亚洲日韩国产一区二区三区在线 | 伊在人亚洲香蕉精品区麻豆| 亚洲av乱码中文一区二区三区| 亚洲精品国产av成拍色拍| 亚洲国产日韩a在线播放| 亚洲精品GV天堂无码男同| 亚洲AV成人精品日韩一区| 国产成人综合久久精品亚洲| 国产成人+综合亚洲+天堂| 亚洲国产精品一区二区第一页免| 亚洲色欲久久久久综合网| 日韩一卡2卡3卡4卡新区亚洲| 亚洲午夜久久久影院| 久久噜噜噜久久亚洲va久| 亚洲欧洲在线观看| 中文字幕亚洲综合久久2| 亚洲国产理论片在线播放| xxx毛茸茸的亚洲| 亚洲精品无播放器在线播放| 最新亚洲人成无码网站| 亚洲精品无码日韩国产不卡?V| 国产亚洲成人在线播放va| 亚洲成AV人片在线观看| 久久精品国产亚洲av水果派| 亚洲伊人久久精品| 亚洲精品国产首次亮相| 国产L精品国产亚洲区久久| 亚洲韩国精品无码一区二区三区 |