汇编EXTERN用法

来源:互联网 发布:mysql约束是什么 编辑:程序博客网 时间:2024/05/17 06:06

EXTERN在汇编中用来引用一个在其他模块中定义过的符号名,使得这个符号名所表示的数据或函数能在该模块中被使用。

[FILE "naskfunc.nas"] GLOBAL_asm_inthandler21 EXTERN_inthandler21 [SECTION .text]_asm_inthandler21:PUSHESPUSHDSPUSHADMOVEAX,ESPPUSHEAXMOVAX,SSMOVDS,AXMOVES,AXCALL_inthandler21POPEAXPOPADPOPDSPOPESIRETD

void inthandler21(int *esp){struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO;boxfill8(binfo->vram, binfo->scrnx, COL8_000000, 0, 0, 32 * 8 - 1, 15);putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, "INT 21 (IRQ-1) : PS/2 keyboard");for (;;) {io_hlt();}}

inthandler21函数在bootpack.h中声明过,这里在汇编文件naskfunc.nask中要用到这个函数,故用EXTERN语句。这里我们有几个疑问一块来探讨一下:
*上面的CALL _inthandler21是怎样一个调用?
 先将当前的IP压入栈中,再跳到_inthandler21处执行指令。
*但一般是跳到某个汇编段,而这里是一个C源文件中的函数,这有是什么原理?
首先,汇编程序可以调用C函数,这是混合编程。而且还可以引用C文件中定义的变量,如 C: char ch; ASM: EXTERN ch:byte。
在我们的这个例子中,函数inthandler21带有参数,如何在汇编中传参。方法是汇编程序将参数值压入堆栈
MOVEAX,ESPPUSHEAX


0 0
原创粉丝点击