免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2357 | 回复: 2
打印 上一主题 下一主题

[C] 一个关于c语言和汇编互相调用的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-07 18:26 |只看该作者 |倒序浏览
我希望在x86的实模式下,使用c语言程序,而不是在保护模式下。
  我的实验环境为
  OS=Ubuntu 9.04
  C compile = bcc
  /***hello.c*****/
  1.   extern void myprint();
  2. int main()
  3. {
  4.     myprint();
  5.     return 0;
  6. }
复制代码
/****boot.s******/
  1. .global begtext,begdata,begbss,endtext,enddata,endbss
  2. .text
  3. begtext:
  4. .data
  5. begdata:
  6. .bss
  7. begbss:
  8. .text
  9. .extern _main
  10. .global _myprint
  11. BOOTSEG = 0x07c0

  12. entry   start
  13. start:
  14.     jmpi    go,BOOTSEG
  15. go: mov     ax,cs
  16.     mov     ds,ax
  17.     mov     es,ax
  18.     mov     cx,#19
  19.     mov     dx,#0x0c00
  20.     mov     bx,#0x000c
  21.     mov     bp,#msg1
  22.     mov     ax,#0x1301
  23.     int     0x10
  24.     call    _main  
  25. _myprint:
  26.     mov     ax,cs
  27.     mov     ds,ax
  28.     mov     es,ax
  29.     mov     cx,#15
  30.     mov     dx,#0x0d00
  31.     mov     bx,#0x000f
  32.     mov     bp,#msg2
  33.     mov     ax,#0x1301
  34.     int     0x10
  35.     ret
  36. msg1: .ascii "Booting system..."
  37.       .byte 13,10
  38. msg2: .ascii "Hello baby..."
  39.       .byte 13,10
  40. .org  510
  41.       .word 0xAA55
  42. .text
  43. endtext:
  44. .data
  45. enddata:
  46. .bss
  47. endbss:
  48. !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汇编的资料,请高人指点。

论坛徽章:
0
2 [报告]
发表于 2010-03-07 22:12 |只看该作者
还是使用 gcc 吧

推荐你看一看这个文档:

http://www.nondot.org/sabre/os/f ... sUsingACompiler.pdf

论坛徽章:
0
3 [报告]
发表于 2010-03-08 10:24 |只看该作者
我大概看了下文档,主要是讲x86的保护模式的,不过还是要谢谢2L回复哈。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP