Storing/reading 函数指针符号地址 to/from 引导加载程序中的内存
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,请执行远调用。)
我是组装方面的新手,所以这似乎是一个简单的问题。
因此,通过汇编,我试图将函数的内存地址存储到内存中,如下所示:
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,请执行远调用。)