bar.c
void myprint(char* msg, int len);
int choose(int a, int b)
else
return
0;}
foo.asm
extern choose ;
[section .data]
num1st dd 3
num2nd dd 4
[section .text]
global _start ;必須匯出_start這個入口 以便讓編譯器識別
global myprint ;匯出這個函式為了讓bar.c使用
_start:
push dword[num2nd];
push dword[num1st];
call choose ; 呼叫c函式
add esp, 8
mov ebx, 0
mov eax, 1
;sys_exit
int 0x80
;系統呼叫
myprint:
mov edx, [esp+8]; len
mov ecx, [esp+4]; msg
mov ebx, 1
mov eax, 4
;sys_write
int 0x80
;系統呼叫
ret
編譯指令碼
由於我的電腦是64位,因此用gcc編譯的c**是64為,而nasm是32位彙編器,32位程式和64位程式無法鏈結在一起,解決辦法是讓gcc 用32位模式編譯
詳細介紹在如下鏈結編譯的解決
nasm -f elf -o foo.o foo.asm
gcc -m32
-c-o bar.o bar.c
ld -m elf_i386 -s
-o foobar foo.o bar.o
乙個作業系統的實現 2
接上文 xiongjian 2010.12.22 msn cug live.cn 10 下面開始程序,首先引入幾個基本原則 1 程序表a用來儲存程序a的資訊和程序a切換時,儲存當前a執行時暫存器資訊。定義為 processproc table 1024 表示系統最多可以有1024個程序,proces...
Orange s 乙個作業系統的實現之筆記1
orange s 乙個作業系統的實現 之筆記1 從今天開始,我們要自己設計乙個超簡陋的os了,主要的參考教材就是于淵的 orange s 乙個作業系統的實現 這是一本非常非常好的書!俗話說,工欲善其事,必先利其器,我們需要以下工具 bochs 執行我們的os的主要平台,這是乙個x86指令集模擬器,非...
乙個小作業系統
1 1 chapter1 a boot.asm 乙個 作業系統 可以只有20行 把下面這段 用nasm編譯一下 nasm boot.asm o boot.bin org 07c00h 告訴編譯器程式載入到7c00處 mov ax,cs mov ds,ax mov es,ax call dispstr...