文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>[原]最"小"的程序--内嵌汇编实现的hello world

[原]最"小"的程序--内嵌汇编实现的hello world

时间:2010-05-21  来源:帅得不敢出门

/*
作者:帅得不敢出门   程序群 3503799
看了程序员的自我修养 --链接 装载 与库 后写的
直接使用系统调用实现打印hello world kernel 2.6.23
原理:写stdout来实现输出 stdout对应fd是1不是0 这个书中有误
smlinkage ssize_t sys_write(unsigned int fd, const char __user * buf, size_t count)
高版本的kernel好像这个接口变了  改成用某个宏实现了
gcc $file  -o $file.o
ld -e nomain -o $file  $file.o
*/
void exit(int status)
{
__asm__ __volatile__(
"movl $1, %%eax\n\
 movl $0, %%ebx\n\
 int $0x80\n"
:::
);
}//这里会报warning   警告:‘noreturn’函数确实会返回 不知道怎么修改 后来看了下链接装载与库这本书 它ebx传的是42
//暂时没有测试  不知道这个42有何特殊意义
int puts(const char *s)
{
unsigned int  writelen = 0;
    //unsigned int ret;
if (s==(void*)0)
return -1;
while('\0' != s[writelen]) //此处调用putchar可能会更高效些
++writelen;
__asm__ __volatile__(
"movl $4, %%eax \n\
 movl $1, %%ebx \n\
     int $0x80"
    ://:"=a"(ret)
:"c"(s), "d"(writelen)
);
//return ret; //eax做为返回值 所以这里没有必要为ret分配空间
}
void nomain(void)
{
puts("Hello World!\n");
exit(0);
}
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载