8個通用暫存器和記憶體定址方式

2022-09-09 21:06:22 字數 4752 閱讀 8585

通用暫存器可用於傳送暫存資料,也可參與算術邏輯運算,並儲存運算結果。除此之外,它們還各自具有一些特殊功能。

組合語言程式設計師必須熟悉每個暫存器的一般用途和特殊用途,只有這樣,才能在程式中做到正確、合理地使用它們。

暫存器主要用途

編號儲存資料的範圍

eax累加器

00 - 0xffffffff

ecx計數

10 - 0xffffffff

edxi/o指標

20 - 0xffffffff

ebxds段的資料指標

30 - 0xffffffff

esp堆疊指標

40 - 0xffffffff

ebpss段的資料指標

50 - 0xffffffff

esi字串操作的源指標;ss段的資料指標

60 - 0xffffffff

edi字串操作的目標指標;es段的資料指標

70 - 0xffffffff

暫存器編號(二進位制)

編號(十進位制)

32位8位

eaxal

0ecxcl1

edxdl

10ebx

bl11

espah

100ebp

ch101

esidh

110edi

bh111

mov 的語法:mov 目標運算元,源運算元 作用將:源拷貝到目的

mov r/m8,r8

mov r/m16,r16

mov r/m32,r32

mov r8,r/m8

mov r16,r/m16

mov r32,r/m32

mov r8, imm8

mov r16, imm16

mov r32, imm32

add 的語法:add 目標運算元,源運算元 作用:將源運算元加到目標運算元上

add r/m8, imm8

add r/m16,imm16

add r/m32,imm32

add r/m16, imm8

add r/m32, imm8

add r/m8, r8

add r/m16, r16

add r/m32, r32

add r8, r/m8

add r16, r/m16

add r32, r/m32

sub 的語法:

例如 sub eax ,ebx;

eax = eax-ebx

sub 目標運算元,源運算元

作用:將源運算元減到目標運算元上

sub r/m8, imm8

sub r/m16,imm16

sub r/m32,imm32

sub r/m16, imm8

sub r/m32, imm8

sub r/m8, r8

sub r/m16, r16

sub r/m32, r32

sub r8, r/m8

sub r16, r/m16

sub r32, r/m32

or 的語法:

or 目標運算元,源運算元

作用:將源運算元與目標運算元或運算後將結果儲存到目標運算元中

or r/m8, imm8

or r/m16,imm16

or r/m32,imm32

or r/m16, imm8

or r/m8, r8

or r/m16, r16

or r/m32, r32

or r8, r/m8

or r16, r/m16

or r32, r/m32

xor 的語法:

xor 目標運算元,源運算元

作用:將源運算元與目標運算元異或運算後將結果儲存到目標運算元中

xor r/m8, imm8

xor r/m16,imm16

xor r/m32,imm32

xor r/m16, imm8

xor r/m8, r8

xor r/m32, r32

xor r8, r/m8

xor r16, r/m16

xor r32, r/m32

取反 0變1 1變0

lea:load effective address,即裝入有效位址的意思,它的運算元就是位址

lea r32,dword ptr ds:[記憶體編號(位址)]

將記憶體位址賦值給32位通用暫存器

lea是傳址,mov是傳值,注意區別

記憶體(memory)是計算機的重要部件之一,也稱記憶體儲器主儲存器,它用於暫時存放cpu中的運算資料,與硬碟等外部儲存器交換的資料。它是外存與cpu進行溝通的橋梁,計算機中所有程式的執行都在記憶體中進行,記憶體效能的強弱影響計算機整體發揮的水平。只要計算機開始執行,作業系統就會把需要運算的資料從記憶體調到cpu中進行運算,當運算完成,cpu將結果傳送出來。

注意區別我們所說的32位一般都是說的是記憶體位址定址範圍,而不是說暫存器的資料寬度

32位計算機的編號最大是32位,也就是32個1 換成16進製為ffffffff,也就是說,32位計算機記憶體定址的最大範圍是ffffffff+1

記憶體的單位是位元組,那記憶體中能儲存的資訊最多為:ffffffff+1 位元組 即4g,這也是為什麼我們在乙個xp的系統上面如果物理記憶體超過4g是沒有意義的原因

只要是32位的計算機,那麼最多識別的記憶體為4g,對嗎?

不對。可以通過打補丁,或者拓展作業系統來,定址方式是由作業系統決定的

只要是涉及到記憶體讀寫的,一定要指定記憶體的寬度

mov 讀/寫的資料寬度 ptr ds:[位址],***

例:mov eax,dword ptr ds:[0x0012ff34]

dword :要讀/寫多少 此時是32bit (byte 位元組 8bit word字 16bit dword雙字 32bit)

ds:段暫存器 這裡為資料段(後續學習會講段暫存器)

0x0012ff34 記憶體編號,必須是32位的,前面的0可以省略

注意:記憶體編號不要隨便寫,因為記憶體是有保護的,並不是所有的記憶體都可以直接讀寫(需要特別處理)

讀取記憶體的值:

mov eax,dword ptr ds:[0x13ffc4]

mov eax,dword ptr ds:[0x13ffc8]

向記憶體中寫入資料:

mov dword ptr ds:[0x13ffc4],eax

mov dword ptr ds:[0x13ffc8],ebx

獲取記憶體編號:

lea eax,dword ptr ds:[0x13ffc4]

lea eax,dword ptr ds:[esp+8]

reg代表暫存器 可以是8個通用暫存器中的任意乙個

讀取記憶體的值:

mov ecx,0x13ffd0

mov eax,dword ptr ds:[ecx]

向記憶體中寫入資料:

mov edx,0x13ffd8

mov dword ptr ds:[edx],0x87654321

獲取記憶體編號:

lea eax,dword ptr ds:[edx]

讀取記憶體的值:

mov ecx,0x13ffd0

mov eax,dword ptr ds:[ecx+4]

向記憶體中寫入資料:

mov edx,0x13ffd8

mov dword ptr ds:[edx+0xc],0x87654321

獲取記憶體編號:

lea eax,dword ptr ds:[edx+4]

讀取記憶體的值:

mov ecx,0x13ffd0

mov eax,dword ptr ds:[ecx+4]

向記憶體中寫入資料:

mov edx,0x13ffd8

mov dword ptr ds:[edx+0xc],0x87654321

獲取記憶體編號:

lea eax,dword ptr ds:[edx+4]

讀取記憶體的值:

mov eax,13ffc4

mov ecx,2

mov edx,dword ptr ds:[eax+ecx*4+4]

向記憶體中寫入資料:

mov eax,13ffc4

mov ecx,2

mov dword ptr ds:[eax+ecx*4+4],87654321

獲取記憶體編號:

lea eax,dword ptr ds:[eax+ecx*4+2]

暫存器定址方式

指令所要的運算元已儲存在某暫存器中,或把目標運算元存入暫存器。把在指令中指出所使用暫存器 即 暫存器的助憶符 的定址方式稱為暫存器定址方式。指令中可以引用的暫存器及其符號名稱如下 8位暫存器有 ah al bh bl ch cl dh和dl等 16位暫存器有 ax bx cx dx si di sp...

暫存器定址方式

微機系統有七種基本的定址方式 立即定址方式 暫存器定址方式 直接定址方式 暫存器間接定址方式 暫存器相對定址方式 基址加變址定址方式 相對基址加變址定址方式等。其中,後五種定址方式是確定記憶體單元有效位址的五種不同的計算方法,用它們可方便地實現對陣列元素的訪問。立即數定址方式 mov ah,80h ...

通用暫存器和記憶體

計算機在執行時,需要提供資料的容器 容器由記憶體和cpu提供,記憶體提供的容器比較多 cpu提供的容器較少但其中的資料計算速度快 cpu提供的容器就是暫存器,暫存器有特定的資料寬度,決定了該暫存器儲存資料的範圍 1.常用的32位暫存器 32位通用暫存器還可以拆分來使用 將低16位當做16位暫存器 一...