本書已經講到對於我們為什麼要使用變數——因為我們在程式設計時要儲存資料。我們也已經學了,在組合語言中,我們將資料儲存在暫存器和記憶體空間中。
1、首先在c:\minic 目錄下的tc.exe編寫乙個ur1.c程式編譯、鏈結成ur1.exe
2、用debug載入ur1.exe,用u命令檢視ur1.c編譯後的機器碼和彙編**根據我們組合語言學習的經驗,main函式**應該存放在code段中,我們可以通過反彙編找到main函式相應的**。
接著用r命令檢視cs
cs=0d6c驗證了該猜想
需要指出,這裡找到main函式**需要一步步細心查詢,找到與ur1**一樣的就可以確認找到
3、列印ur1.exe被載入執行,main的偏移位址我們在上面的程式後面加入該**內容,編譯、鏈結後執行由上圖可以看出,該程式有結果生成
根據我們已經學得彙編經驗可知,main相當於組合語言中的乙個標號,當我們列印時把它的入口位址給列印出來了。
4、用debug找到相應的**這裡有一條 mov ax,01fa 是在我們之前程式中沒有的,可以猜想這裡就是將main的入口位址賦予01fa 而 我們之前的執行結果更加證實了這一猜想。
5、研究另乙個程式驗證我們的猜想用debug載入該exe程式
找到相應的程式
這裡我們很容易看到有乙個call 命令 找到 020b處的** 如下:
這裡就是f(void)函式的入口 下面的ret相當於函式的返回
所以,我們容易知道,當c語言中呼叫乙個函式是,將其轉化為相應的彙編**時用call命令,而程式結束返回時就用ret指令,這根我們前面學習的組合語言時相通的。
+
@yujin753
2015-02-28 22:30
字數 708
閱讀 0
×正在載入文章,請稍等片刻...
組合語言 暫存器
乙個典型的cpu由運算器 控制器 暫存器等器件組成,這些器件靠內部匯流排相連。通用暫存器 ax bx cx dx 段位址暫存器 cs ds es ss 專用暫存器 bp sp si di 指令指標暫存器 ip 標誌暫存器 psw ah al ax accumulator 累加暫存器 bh bl bx...
組合語言 暫存器
乙個cpu由暫存器,運算器,控制器組成,暫存器負責儲存資料。通用暫存器 ax,bx,cx,dx。8086cpu的暫存器都是16位的,能存放兩個位元組。乙個暫存器又能分為兩個部分,乙個高位位元組如ah,還有乙個地位位元組如al。這兩個部分可以單獨看成乙個八位暫存器來用。當暫存器當整體來看時,它可以進行...
組合語言 暫存器
ax,bx,cx,dx 這4個暫存器通常用來存放一般性的資料,被稱為通用暫存器。8086cpu這5個暫存器都可以分為兩個可以獨立使用的8位暫存器來用 ax的低8位 0 7 構成al暫存器,高8位 8 15 構成了ah暫存器。ah和al暫存器是可以獨立使用的8位暫存器。考慮相容性8086cpu可以一次...