[英]Storing/reading a function pointer symbol address to/from memory in a bootloader
我是組裝的新手,所以這似乎是一個簡單的問題。
因此,通過匯編,我試圖將一個函數的內存地址存儲到內存中,如下所示:
my_function:
mov al, "a" ; Some code
int 0x10
mov word [0x7e04], my_function ; Storing the address to my_function into 0x7e04
然后我想在像這樣從內存中讀取它后跳轉到該內存地址:
jmp [0x7e04]
但是它不起作用。 是不是因為它只讀取字節 0x7e 而不是 04? 如果是這樣,我如何才能從內存中讀取一個單詞而不僅僅是一個字節?
編輯:所以這是不起作用的代碼(是的,它是一個引導加載程序):
mov ah, 0x0e
mov al,"H"
int 0x10
mov word [0x7e04],my_function
jmp [0x7e04]
my_function:
mov al, "i"
int 0x10
times 510-($-$$) db 0
dw 0xaa55
所以我用nasm -f bin -o boot.bin boot.asm
編譯它,然后用qemu-system-i386 boot.bin
模擬它,但沒有任何顯示,並且 BIOS 中斷 0x10 正在工作,所以我這里有點困惑為什么代碼不起作用
由於沒有 ORG 語句,程序從地址 0 開始匯編。“my_function”的地址是 000f,但在 7c0f 處加載。 JMP 指令跳轉到 000f。 如果 CS 包含 07c0,這將起作用。 或者,使用 ORG 7c00 並將 CS 設置為 0。(要更改 CS,請執行遠呼叫。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.