欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

匯編語言之寄存器詳解

 更新時間:2020年01月14日 00:05:58   作者:ivy_0709  
這篇文章主要介紹了匯編語言之寄存器詳解,需要的朋友可以參考下

上圖是cpu中三個組成部分:寄存器 運算器 控制器。其中寄存器是cpu中程序員用指令讀取的唯一部件(調劑界面中的 寄存器窗口)。如果是16位cpu,就是處理,傳輸,暫時存儲的數(shù)據長度都是16位。所以16位的cpu,寄存器也是16位?!秴R編語言》這本書中使用的是16位寄存器位例子來講的,所以下面的內容也都是16位寄存器的。

ps:查看處理器型號以及幾核cpu,我現(xiàn)在的電腦4核64位

寄存器名字

16位的寄存器有:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW。

32位寄存器就是前面加個E,64位前面加個R。

vs中解決方案平臺選擇x86——32位寄存器,可以存數(shù)32位二進制數(shù)據

vs中解決方案平臺選擇x64——64位

各種類型的寄存器

在下面介紹各個寄存器的時候,都用16位的寄存器作為介紹。同種類型的32位和64位寄存器功能一樣,只是處理的數(shù)據寬度更大了。同時介紹一些匯編指令(匯編指令不區(qū)分大小寫)。

1.通用寄存器——AX BX CX DX

作用:存放一般性的數(shù)據

傳送指令:move

mov 轉移指令,大部分的寄存器都可以用這個指令來改變其值。常用的有:不僅限于下面幾種

1.move 某一個合法寄存器 某一個合法寄存器

將一個寄存器的內容傳送到另一個寄存器

比如:move 段寄存器(ds,cs),通用寄存器——段寄存器的值不能直接通過數(shù)據來設定

2.move 某一個合法寄存器 數(shù)據

將數(shù)據直接傳入寄存器

3.move 某一個合法寄存器 [內存單元的偏移地址]

將一個內存單元中的內容存入一個寄存器中,后面將DS寄存器的時候再講。

算術運算指令:add,sub

add 寄存器,數(shù)據/寄存器/內存單元

add 內存單元,寄存器

如何記住一個二進制數(shù)據左移1位相當于乘以2,左移n位,相當于乘以2的N倍:

一個10進制的數(shù)左移1位,相當于乘以10,左移n位,相當于乘以10的N倍。

2.CS,IP——代碼段

CS(code)

IP(instruction pointer)

是最關鍵的兩個寄存器,代碼段寄存器和指令指針寄存器 ,他們的內容提供了cpu要執(zhí)行指令的地址。

而cpu就是一直重復讀指令,執(zhí)行指令的過程。cpu就認這個指向的地址為指令,然后進行執(zhí)行指令,所以把 代碼段的起始地址設置成cs:ip,讓程序開始執(zhí)行。

1:從cs:ip(段地址的方式)指向的內存單元中讀取指令,讀進來以后進入指令緩存器

2:ip = ip + 所讀指令的長度,從而指向下一條指令

3:執(zhí)行指令

4:回到第一步

疑問:

1. 怎么知道指令的長度的

2.什么時候修改cs 和 ip 的值的 (下面介紹)

最簡單的轉移指令——jmp

用來改變cs和ip的值的指令,CS*16 + IP 指向的內容被當作指令來執(zhí)行

jmp 某一個合法寄存器——改變IP的值

用這個寄存器的值改變IP寄存器的值,含義上[ mov IP寄存器,某一合法寄存 ] ,只不是mov不能用于IP寄存器。

jmp 段地址:偏移地址——同時修改CS的值,和IP的值

含義上,[ mov CS 段地址 ,move IP 偏移地址 ]

8080 8085 8位機、 8086 16位機。8086的cpu16位,地址總線20位,給物理地址的方式(20位) = 段地址(16位)*16(左移4位) + 段內偏移(16位,段最大長度是2^16 = 64k))

32位cpu 也可以開啟36位地址模式,所以也可以用用 36位物理尋址方式=段地址(32位)*16(左移四位) +段內偏移(32位,段最大長度是2^32 =4G)

所以一個段的其實地址一定是16的倍數(shù)(16進制表示,最后一位肯定是0)

所以看map文件中的地址 也是 使用的段+段內偏移,只不是那個段是指的是段號。

3.DS——數(shù)據段

DS(data)

存放要訪問的數(shù)據的段地址,再通過加上偏移地址,把數(shù)據所在的內存地址賦值上。

通過move指令進行設置其值,先把其值賦值給一般寄存器,再通過一般計算器傳送給DS

move bx,1000H

move ds,bx

move al,[0]————訪問到了ds:0所指的內存單元了

4.SS,SP——棧空間(高地址往低地址增長)

SS(stack) SP(instruction pointer)

任意時刻,ss:sp指向棧頂元素的內存地址。

cpu不保證對棧的操作不超過空間

cpu只知道棧頂在何處(ss:sp),而不知道??臻g大小

就像cpu只知道當前要執(zhí)行的指令在何處(cs:ip),而不知道要執(zhí)行的指令有多少

程序定義了棧段以后,把ss:sp指向我們定義的棧端就可以了

入棧出棧指令 Push 和 Pop 指令

ss:sp指向的內存單元處的數(shù)據取出,sp = sp + 2

或者

往 ss:sp指向的內存單元處 存入數(shù)據,sp = sp - 2

push/pop 寄存器/段寄存器/[內存單元的偏移地址](段地址由ds指示)

《匯編語言》

相關文章

  • 匯編語言系列之匯編實現(xiàn)字符串操作

    匯編語言系列之匯編實現(xiàn)字符串操作

    本文列出了字符串匹配和字符串輸入顯示的代碼,對匯編語言系列之匯編實現(xiàn)字符串操作相關知識感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • 匯編語言實現(xiàn)電子鬧鐘思路詳解

    匯編語言實現(xiàn)電子鬧鐘思路詳解

    這篇文章主要介紹了匯編語言實現(xiàn)電子鬧鐘思路詳解,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 匯編高效乘法運算的具體使用方法

    匯編高效乘法運算的具體使用方法

    在匯編語言中,乘法指令通常是通過mul(無符號乘法)和imul(有符號乘法)這兩個指令實現(xiàn)的,本文就來詳細的介紹一下匯編高效乘法運算,感興趣的可以了解一下
    2024-03-03
  • 匯編跳轉指令使用總結

    匯編跳轉指令使用總結

    這篇文章主要介紹了匯編跳轉指令使用總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • UEFI開發(fā)基礎HII代碼示例

    UEFI開發(fā)基礎HII代碼示例

    這篇文章主要為大家介紹了UEFI開發(fā)基礎HII代碼示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 匯編實現(xiàn)簡單選擇排序的方法示例

    匯編實現(xiàn)簡單選擇排序的方法示例

    這篇文章主要介紹了匯編實現(xiàn)簡單選擇排序的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • Debug的基本使用()

    Debug的基本使用()

    Debug是一個通過操作系統(tǒng)(os)對cpu寄存器進行訪問用于學習匯編的程序,但是如今的win10(64位)已經不支持cmd打開debug,但是我們可以通過DOSBOX模擬器對其進行訪問
    2023-08-08
  • 匯編 JCC指令表與筆記

    匯編 JCC指令表與筆記

    這篇文章主要介紹了匯編 JCC指令表與筆記,需要的朋友可以參考下
    2020-01-01
  • 使用匯編語言實現(xiàn)if else 循環(huán)函數(shù)調用的具體方法

    使用匯編語言實現(xiàn)if else 循環(huán)函數(shù)調用的具體方法

    這篇文章主要介紹了使用匯編語言實現(xiàn)if else 循環(huán)函數(shù)調用的具體方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • 匯編語言loop命令的具體使用

    匯編語言loop命令的具體使用

    LOOP指令是根據ECX計數(shù)器循環(huán),將語句塊重復執(zhí)行特定次數(shù),本文主要介紹了匯編語言loop命令的具體使用,感興趣的可以了解一下
    2024-03-03

最新評論