- 论坛徽章:
- 0
|
我希望在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汇编的资料,请高人指点。 |
|