Chinaunix
标题:
一个关于c语言和汇编互相调用的问题
[打印本页]
作者:
garyneville
时间:
2010-03-07 18:26
标题:
一个关于c语言和汇编互相调用的问题
我希望在x86的实模式下,使用c语言程序,而不是在保护模式下。
我的实验环境为
OS=Ubuntu 9.04
C compile = bcc
/***hello.c*****/
extern void myprint();
int main()
{
myprint();
return 0;
}
复制代码
/****boot.s******/
.global begtext,begdata,begbss,endtext,enddata,endbss
.text
begtext:
.data
begdata:
.bss
begbss:
.text
.extern _main
.global _myprint
BOOTSEG = 0x07c0
entry start
start:
jmpi go,BOOTSEG
go: mov ax,cs
mov ds,ax
mov es,ax
mov cx,#19
mov dx,#0x0c00
mov bx,#0x000c
mov bp,#msg1
mov ax,#0x1301
int 0x10
call _main
_myprint:
mov ax,cs
mov ds,ax
mov es,ax
mov cx,#15
mov dx,#0x0d00
mov bx,#0x000f
mov bp,#msg2
mov ax,#0x1301
int 0x10
ret
msg1: .ascii "Booting system..."
.byte 13,10
msg2: .ascii "Hello baby..."
.byte 13,10
.org 510
.word 0xAA55
.text
endtext:
.data
enddata:
.bss
endbss:
!end of boot.s
复制代码
我的编译步骤是
bcc -ansi -c hello.c
as86 -0 -a -o boot.o boot.s
ld86 -0 -s -o boot boot.o hello.o
dd bs=32 if=boot of=boot.img skip=1
问题处在ld86这一步上,hello.o的内容根本没有链接进boot里面,请问问题出在哪里,搞了很久实在不明白,另外boot.s中myprint的实现很山寨,一是不会这种8086的汇编。也是网上几乎找不到关于这种Minix汇编的资料,请高人指点。
作者:
mik
时间:
2010-03-07 22:12
还是使用 gcc 吧
推荐你看一看这个文档:
http://www.nondot.org/sabre/os/f ... sUsingACompiler.pdf
作者:
garyneville
时间:
2010-03-08 10:24
我大概看了下文档,主要是讲x86的保护模式的,不过还是要谢谢2L回复哈。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2