研究實驗二 使用暫存器

2021-07-03 23:32:43 字數 1493 閱讀 8521

研究實驗二  使用暫存器

實驗內容

研究在c語言中暫存器使用的一些問題,以及對main函式的一些初步理解。

實驗環境

win7 、dosbox、tc2.0

實驗步驟

1.     編寫程式ur1.c,編譯、連線,生成ur1.exe。

2.     用debug載入ur1.exe,用u命令檢視ur1.c編譯後的機器碼和彙編**。

如果直接用u檢視會發現如下情況:

這與我們預期的是不一樣的,因為程式是從main函式開始執行的,所以得先知道main函式在**段中的偏移位址。

3.     用下面的程式列印出main函式在**段中的偏移位址。

可以看到main函式的偏移位址是1fa

4.     根據步驟3得到的偏移位址,用u命令檢視ur1.exe中的機器**和彙編**。

可以看到076a:01fd開始,所對應的就是編譯、連線之後ur1.exe檔案對應的機器**和彙編**。

這裡提出的問題是:彙編**開始處的「push bp mov bp,sp」和結尾處的」pop bp」怎麼理解。

這是因為

main

函式也相當於彙編中的乙個子程式,要在呼叫子程式時將棧頂位置儲存,以便於程式能正確返回,但是棧頂指標

sp不能當作偏移位址移動,所以要將

sp賦給bp。

5.     因為main函式後面有ret指令,以及對於上面問題的回答,要進一步驗證我們的設想,編寫程式ur2.c。

檢視它的**

可以看到,在呼叫f()函式時,即呼叫子程式時與1fa處一樣,和main函式返回一樣,所以可以得到main函式在彙編中確實是被當作子程式來處理的。

總結

編寫c語言程式,檢視對暫存器的使用,在實驗過程中發現對main函式的一些問題,通過觀察彙編**及編寫另外的含有子程式的**,得出main函式在彙編中是作為子程式被呼叫的,通過debug引導程式,u命令檢視機器**和彙編**,更直接的看到了程式對暫存器的使用。

crh暫存器 實驗 使用暫存器點亮LED

埠配置高暫存器後面的英文就是暫存器名稱可參考參考手冊,然後x可以為a e也就是適用gpuoa gpioe埠這樣的乙個暫存器。位址偏移,就是本暫存器相對這個外設基位址的偏移 暫存器位表 表示0 31位名稱及許可權,表上方的數字位編號,中間位位名稱,下方位讀寫許可權,w表示寫,r表示讀 位功能,如表所描...

idr暫存器 實驗 使用暫存器點亮LED

埠配置高暫存器後面的英文就是暫存器名稱可參考參考手冊,然後x可以為a e也就是適用gpuoa gpioe埠這樣的乙個暫存器。位址偏移,就是本暫存器相對這個外設基位址的偏移 暫存器位表 表示0 31位名稱及許可權,表上方的數字位編號,中間位位名稱,下方位讀寫許可權,w表示寫,r表示讀 位功能,如表所描...

暫存器(通用暫存器)

因為學習使用的是王爽的 組合語言 第3版 因此也只能提到8086cpo的暫存器。對於其他而言,原理都是相通的。對於8086暫存器,有14個暫存器,主要是 ax bx cx dx si di sp bp ip cs ss ds es psw。一 通用暫存器 8086的通用暫存器有ax bx cx dx...