共有回帖数  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号
	
	意见反馈 | 
	关于直线 | 
	版权声明 | 
	会员须知