乙個作業系統的是實現之C語言與彙編互相呼叫

2021-08-17 05:11:31 字數 1073 閱讀 8558

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...