計算機怎麼知道指標指向的具體型別

2021-10-19 10:52:21 字數 2696 閱讀 3544

編譯器 x86-64 gcc 10.2

彙編風格 at&t 風格

彙編**基於x86-64,由於 x86 系列的 cpu 向後相容,在指令上,相容就是intel8086這個16bit的處理器的指令,在intel80386這個32bit的處理器上也能使用。以此類推。先來了解下暫存器的變化。詳細的可以檢視 x86 暫存器歷史。

16bit

32bit

64bit

axeax

rax

可以了解 eax 是 32bits,rax 是 64bits。 其他指令類似。用er來區分 32bits 還是 64bits

mov為例

8bit

16bit

32bit

64bit

movb

movw

movl

movq

可以看到使用不同的字尾來表示這個是多少 bit 的指令

cpu 定址方式, 也就是拿到資料的方式.

立即數
movb $0x05,%al

表示為:r[al] = 0x05;> 將立即數 0x05(1 byte) 複製到暫存器 al

r 表示暫存器(register)

間接定址

就是到記憶體裡去尋找資料。

記憶體如何定址?

通過signed-offset(base,index,scale)來表示。

記憶體位址計算:

memory address = scale * index + base + signed-offset

舉例說明
mov (%esi,%ebx,4), %edx

move the 4 bytes of data at address esi+ 4 * ebx into edx.

%edx = 4 * %ebx + %esi

至此,如果將 scale = 8, 那就是 c 語言中的 long 型資料,如果同時遞增 %ebx,那就是依次訪問陣列元素了。

register to memory (指標)
movl %eax, -4(%ebp)

表示為: mem[r[ebp]-4] = r[eax];

將暫存器eax 裡面的值複製到暫存器 ebp 的值減去 4指向的記憶體位址處(也就是 r[ebp] -4 的值是乙個記憶體位址).

通過暫存器指向了記憶體位址, 是不是很熟悉的指標啊, 對, 就是指標。 c 語言的指標就是這麼玩的啊!

memory to register
movl -4(%ebp), %eax

%eax 表示為: r[eax] = mem[r[ebp] -4];

將暫存器esp 的值減去 4的值指向的記憶體位址處存放的值, 複製到暫存器 eax

int

main()

**分析

c **和彙編對照

彙編**分析

執行完12這兩個彙編指令後,假定%rsp = %rbp = 1024(記憶體位址)。

彙編第 4 行:movl $10, -52(%rbp) , 可以從上圖中看到-52記憶體位址處被賦值為 10,佔據 4bytes。movl表示操作的是32bit 的整數。這和c **中第 6 行 int i = 10保持一致。

彙編第 5 行: leaq -52(%rbp), %rax, 表示的是將 %rbp - 52 的記憶體位址,複製到 rax。因為使用的編譯器是 x86-64gcc 10.2,是 64bits 的彙編**,記憶體位址是 64bits。此時也就是 c **中,變數 i的位址複製給 rax。

彙編第 6 行:movq %rax, -8(%rbp), 將此時 rax 複製到記憶體位址 %rbp - 8 的記憶體位址處。至此,完成了 c**中第 7 行 int *pi = &i

彙編第 8 行: movl (%rax), %eax, 將 %rax指向的值(i)複製到 eax。可以看到此時使用的是 eax,也就是 32bits,正是 c 語言中 int 型資料。

彙編第 9 行: movl %eax, -12(%rbp), 將此時 eax 的值(i) 複製到 %rbp - 12 的記憶體位址處。至此,完成了 c **中第 8 行 int ii = *pi

其他的 char 和 long 型別,同理。

計算機怎麼知道指標指向的具體型別?

計算機是怎麼工作的?

試驗題目 計算機是怎麼樣工作的?實驗環境 ubuntu 9.10 實驗內容和步驟 在linux下c 經過預處理,編譯成彙編 彙編成目標 和鏈結成 elf可執行檔案,依次生成 cpp s o elf 檔案,下面通過 example.c 觀察其過程 1 預處理 gcc e o example.cpp e...

計算機組成原理 計算機的效能指標

1,吞吐量 表示一台計算機在某一時間間隔內能夠處理的資訊量,即流入 處理和流出系統的資訊的速率。主要取決於主存訪問週期,雙埠儲存器可以增加速度。3,利用率 在給定的時間間隔內系統被實際使用的時間所佔的比率,用百分比表示。4,處理機字長 指處理機運算器中一次能夠完成 讀出 寫入 二進位制數運算的位數,...

計算機的效能指標

青春 踏實 想法 實踐 奮鬥。cpu執行時間 cpu時鐘週期數 cpu時鐘週期 cpu執行時間表示一般程式所占用的cpu時間。cpu的工作節拍受cpu主時鐘控制,主時鐘不斷產生固定頻率的時鐘,cpu的主時鐘的頻率 f 叫cpu的主頻。cpu的主頻的度量單位是mhz,ghz 主頻的倒數稱為稱為cpu ...