個人總結用的, 看了被誤導不要怪我。
在寫彙編程序時, 經常看到最前面有這麼一句“org 07c00h”。 這個東西它的意思是,該段代碼在0000:0x7c00處執行。
看示例代碼:
如果這段代碼在0x7c00處執行, 但最前面改成“org0100h”有沒有問題呢?
首先看jmp指令, 它的計算方法是跳轉標號與當前標號的差加至當前IP, 所以沒有問題。
call指令和jmp指令差不多,就不說了。
但注意到, 這個程序是用來打印“hello wupeng”這個字符串的, 字符串偏移地址保存在bp中, 通過ES:BP尋址。顯然,若ScreenMsg標號的地址不是其加載至內存的實際地址,尋址字符串時是讀不到正確的字符串的。
多說一句: 實模式下代碼好像就一個段呢,默認都是0000, 保護模式下段基址是32位的,實模式下實際物理地址可以直接拿來當保護模式中的段基址。