亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

匯編語言之寄存器詳解

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

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

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

寄存器名字

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

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

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

vs中解決方案平臺(tái)選擇x64——64位

各種類型的寄存器

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

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

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

傳送指令:move

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

1.move 某一個(gè)合法寄存器 某一個(gè)合法寄存器

將一個(gè)寄存器的內(nèi)容傳送到另一個(gè)寄存器

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

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

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

3.move 某一個(gè)合法寄存器 [內(nèi)存單元的偏移地址]

將一個(gè)內(nèi)存單元中的內(nèi)容存入一個(gè)寄存器中,后面將DS寄存器的時(shí)候再講。

算術(shù)運(yùn)算指令:add,sub

add 寄存器,數(shù)據(jù)/寄存器/內(nèi)存單元

add 內(nèi)存單元,寄存器

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

一個(gè)10進(jìn)制的數(shù)左移1位,相當(dāng)于乘以10,左移n位,相當(dāng)于乘以10的N倍。

2.CS,IP——代碼段

CS(code)

IP(instruction pointer)

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

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

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

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

3:執(zhí)行指令

4:回到第一步

疑問:

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

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

最簡單的轉(zhuǎn)移指令——jmp

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

jmp 某一個(gè)合法寄存器——改變IP的值

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

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

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

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

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

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

所以看map文件中的地址 也是 使用的段+段內(nèi)偏移,只不是那個(gè)段是指的是段號(hào)。

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

DS(data)

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

通過move指令進(jìn)行設(shè)置其值,先把其值賦值給一般寄存器,再通過一般計(jì)算器傳送給DS

move bx,1000H

move ds,bx

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

4.SS,SP——??臻g(高地址往低地址增長)

SS(stack) SP(instruction pointer)

任意時(shí)刻,ss:sp指向棧頂元素的內(nèi)存地址。

cpu不保證對(duì)棧的操作不超過空間

cpu只知道棧頂在何處(ss:sp),而不知道棧空間大小

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

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

入棧出棧指令 Push 和 Pop 指令

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

或者

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

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

《匯編語言》

相關(guān)文章

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

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

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

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

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

    匯編高效乘法運(yùn)算的具體使用方法

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

    匯編跳轉(zhuǎn)指令使用總結(jié)

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

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

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

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

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

    Debug的基本使用()

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

    匯編 JCC指令表與筆記

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

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

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

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

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

最新評(píng)論