共有回帖数 0 个
-
这里有简单的中断介绍(英文):
http://ece.wpi.edu/~wrm/Courses/EE3803/Labs/roehrl.html
这里有四个详细列表:
http://www.htl-steyr.ac.at/~morg/pcinfo/hardware/interrupts/inte1at0.htm
http://www.clipx.net/ng/rbrown/
http://poli.cs.vsb.cz/misc/rbint/text/
http://homepages.ius.edu/jfdoyle/c335/Html/Chapter9.htm
这个是关于显示中断 10H 的
http://www.uv.tietgen.dk/staff/mlha/PC/Prog/ASM/INT/INT10.htm
小于 20H 的中断都是属于 BIOS 的。
先假设你用 GNU 系列的工具,如 gcc 和 as。
怎样保证汇编写出来的函数能被 C 正确调用呢,自己操作栈很麻烦的,我教你一个偷懒的方法(呵呵,这个我以前常用,很方便)
首先:用 C 写个函数库,包括了你要实现的系统调用,这里假设只有两个函数 getch 和 putch,函数体除了 return 等语句,基本是空的:
例子如下:
/* Wuxiao.c */
int getch()
{
return 0;
}
void putch(int ch)
{
int c = ch;
}
然后用 gcc 的编译功能,但记住要用 -S,即编译成汇编源码
$gcc -S Wuxiao.c
好了,gcc 已经把你的 C 函数调用中的栈操作帮你处理好了,不信你看看(产生的文件为 Wuxiao.s):
现在看看 Wuxiao.s 内容:
$cat Wuxiao.s
.file "gp.c"
.text
.globl getch
.type getch, @function
getch:
pushl %ebp
movl %esp, %ebp
movl $0, %eax
popl %ebp
ret
.size getch, .-getch
.globl putch
.type putch, @function
putch:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl 8(%ebp), %eax
movl %eax, -4(%ebp)
leave
ret
.size putch, .-putch
.section .note.GNU-stack,"",@progbits
.ident "GCC: (GNU) 3.3.5 (Debian 1:3.3.5-8)"
movl $0, %eax
这句是设好返回值的。
subl $4, %esp
movl 8(%ebp), %eax
movl %eax, -4(%ebp)
这个就是 int c = ch; 这样你就有了一个怎么操作传递的参数的模板。
在这个基础上,改成 BIOS 的中断调用,实现功能。
改完了,用汇编器,汇编成机器码。
$as Wuxiao.s -o Wuxiao.o
这样,你的系统调用函数库就算是完成了��
现在为这个系统库写一个头文件:
/* My Sys Library */
/* wuxiao.h */
#ifndef WUXIAO_LIB
#define WUXIAO_LIB 0x0100
int getch();
void putch(int ch);
#endif /* WUXIAO_LIB */
好了,可以试用了,随便编一个:
#include "wuxiao.h"
int main()
{
int g;
g = getch();
putch(g);
return 0;
}
存盘(假设叫 main.c)、编译、连接:
$gcc main.c Wuxiao.o -o test
运行:
$./test
如果一切顺利,那就恭喜你了,你实现了最基本的 I/O
由于系统不同(debian linux),我这里没有测试。
但我以前在 dos 下面经常用这招,没遇过问题。
不知道课设要求怎么样,但基本的 I/O 没问题了,你就可以用 C 来编其他部分了。
要是有兴趣,搞得完整点,再实现进程的调度,然后写个 shell,说不定你会成为中国的 linus。
---------------
呵呵,要是真的想做,我想 assiss 会有兴趣的,
就让他写个编译器,就叫 acc,哈哈,谁叫他数学比我好。shell 我来做,叫 8sh。
内核由你搞定~~~~~~
---------------
~~~~以上是白日梦
楼主 2016-03-16 13:07 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知