除錯第乙個匯程式設計序 下

2021-05-26 11:10:02 字數 1138 閱讀 4208

接「除錯第乙個匯程式設計序(上)」。很抱歉,在此篇博文中我截了很多的圖,這樣便於講解清楚,各位也看得明白,但是現在我上傳的太多,不能再繼續上傳,以後一旦解禁,我會把缺失的補上。

在watch標籤頁視窗中,我們在command命令視窗輸入了命令:ws 1, r0來監控r0暫存器的變化,在此就會顯示r0暫存器的內容。也可以手動在watch視窗加入需要檢視的變數。或者直接從**中把需要檢視的暫存器拖到watch視窗。

ok,我們暫時需要了解這些就可以完全的能除錯弄明白我們的程式了。好了,開始我們的第乙個問題了。我們使用ctrl + f5即可除錯我們的程式,這時我們仔細觀察一下,此時pc暫存器的內容為0x30000000,到底這個內容是如何來得呢。這還要從我們引入的除錯檔案說起,這個除錯檔案中就有一句話,指出了pc的初始值內容,實際上pc初始值內容確實**於此處。這時我們觀察command命令視窗的輸出,會看到:load "c:\\documents and settings\\cc\\my documents\\asm1_a\\asm_1a.axf"

include "c:\\documents and settings\\cc\\my documents\\asm1_a\\debuginram.ini" 字樣,實際上這就是告訴偵錯程式pc的內容以及在某些記憶體區間設定許可權。

這個程式不是太長,我們完全不用打斷點,單步除錯即可。ok,單步執行的快捷鍵是f10,進入到函式內部的快捷鍵是f11。通過單步除錯,可以很清楚地看到暫存器的變化。如果我們在除錯檔案中去掉

map 0x00000000,0x00200000 read write exec

map 0x30000000,0x34000000 read write exec這兩句,會有什麼反應呢,這時,我們觀察command視窗,就會有類似的資訊輸出:*** error 65: access violation at 0x30200000 : no 'write' permission。此處就是因為沒有對記憶體區間設定許可權的原因。通過多次練習,相信大家會對第乙個程式進行除錯就會有了初步的印象了。

如果大家用vc++ 6.0,會發現uvision的除錯功能和vc++ 6.0有很多相似的地方。同樣,對於有些內容,我在這裡也沒有進行深入講解,以後我會慢慢補充一些相關的知識。我們只需要有這麼乙個框架,其餘的匯程式設計序都可以套用到這裡面來,我相信,經過多次的訓練,大家會程式的除錯會有了比較深刻的認識了。

第乙個匯程式設計序hello world

程式原始碼如下 assume cs code,ds data 定義 段和資料段框架 data segment 資料段 msg db hello world 定義字串 data ends code segment 段 start mov ax,data mov ds,ax 資料段初始化 mov bx,...

01 第乙個匯程式設計序

在閱讀 x86組合語言 從實模式到保護模式 這本書的時候,從b站上看到 教程,使用虛擬機器然後將彙編檔案寫入磁碟0面0扇區,然後啟動,在螢幕輸出字元,這個程式本身就很簡單,之前學習過王爽的彙編,知道視訊記憶體位置08b00h,字低8位是ascii編碼,高8位是字元的顏色 但是在看 的 發現不同之處 ...

組合語言03 第乙個匯程式設計序

整理自魚c論壇課件 匯程式設計序編寫步驟 編寫源 使用masm.exe進行編譯,產生目標檔案 用link.exe,對目標檔案進行鏈結,生成可執行檔案 可執行檔案中包含兩部分內容 1,程式和資料 2,相關的描述資訊 程式有多大,要占用多少記憶體空間等 源程式 assume cs abc abc seg...