我無法完全掌握遠/近jmp/call版本的細節。據我所知,在jmp/call指令附近使用指令本身的相對偏移量作爲操作數。遠端jmp /調用指令使用絕對地址作爲操作數。近/遠jmp /通話細節
1)在保護模式下,這個絕對地址只是編譯器放置的虛擬地址。
2)在實模式下,你通常會寫:
jmp [new number of code segment][proc name as offset]
那麼絕對地址是通過公式計算:
address = new number * 10h + offset
這實在是在實模式下的物理地址。
執行遠端jmp /呼叫時,CPU是否自動更新CS?例如,當BIOS代碼跳轉到加載的引導扇區代碼時。我沒有看到在引導扇區文件的源代碼中設置CS值。
在保護模式:cs = index in descriptor table = absolute address/page size
在實模式:cs = segment index in RAM = specified "new number of code segment"
是我的假設是否正確?
對不起,我的英文不好和複雜的解釋,但要問一些更具體的我需要得到基本的理解,並建立他們的下一個閱讀和假設。謝謝。