您的位置:首页 > 其它

一个操作系统的实现---内核雏形

2011-09-07 20:29 120 查看
这个是第五章内核雏形的开始部分,讲得是汇编和C的混合编程,具体的例子如下

汇编:

extern choose ;int choose (int a, int b);

[section data] ;表明以下是数据段,可有可无

param1 dd 8

param2 dd 5 ;因为在32位模式下,故参数都是4字节的

[section text] ;表明以下是代码段

global _start ;表明程序入口

global myprintf ;在汇编中声明以便可以被C程序调用

_start:

push dword [param2] ;调用C程序中的choose函数之前,先

push dowrd [param1] ;把要传递的参数入栈。参数入栈顺序,先调用后入栈

call choose

add esp , 8

;系统调用,sys_exit

mov ebx ,0

mov eax,1

int 0x80

;void myprintf(char *msg ,int length);

myprintf:

mov edx, [esp+8] ;参数length

mov ecx ,[esp+4] ;参数msg

;系统调用,sys_write

mov ebx , 1

mov eax ,4

int 0x80h

ret

C程序:

void myprintf(char *msg ,int len);

int choose(int a , int b)

{

if(a>b)

myprintf("param2 is great!\n",17); 共有17个字符

else

myprintf("param1 is great!\n",17); 共有17个字符

return 0;

}

总结:汇编与C语言的混合编程,如果要相互调用和传递参数,

1、在汇编中要使用extern来声明C中的函数,同时要用global表明要被C所调用的汇编程序

2、在C程序中,则按照函数原型声明汇编语言中的函数。当然前提是你要能够将汇编的函数有C语言的函数形式表是出来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: