汇编与C混合编程时,如何用BIOS的中断
我在win2xp下,编写了一个汇编程序,如:
section .text
_start:
mov ah,9
mov al,'A'
mov bh,0
mov bl,47
mov cl,1
int 10h
ret
编译后可以执行,但是如果是由C程序调用的,如:
// b.c
#include <stdio.h>
extern int a();
int main(int argc,char *argv[])
{
a();
}
; a.asm
section .text
global _a
_a:
mov ah,9
mov al,'A'
mov bh,0
mov bl,47
mov cl,1
int 10h
ret
在命令行下编译:
gcc -c b.c
nasm -f win32 a.asm
gcc b.o a.obj -o a.exe
然后执行,会出现严重错误(弹出提示窗口)
用TD调试,发现在执行到int 10h时,会告诉访问违法,不能读 ffffffff(几个f)。。。
是因为单独用汇编时,它会变为虚拟86(实)模式?而与C相关时就是保护模式吗?
那如何设置 gdt 和 idt 呀?
还是用别的方法访问呢?
有没有简单的实例,谢谢!!!
谢谢:)