[貌似已解决]gcc编译汇编和c的函数调用的问题
感谢大家热情的回复,我后来自己好好想了想,然后翻了翻资料,和同学讨论了下,貌似找到了问题的根源。
main.o的.text被ld贴到了512字节后面,但bios只会将第一个扇区读入内存,所以后面的压根就没有读入,自然一call就挂了。
不知道,我这样理解有没有错。
本来是想在写bootsector的时候就用C,看来还是不能偷懒阿,只有在loader再开始了。
我写了一个引导扇区的程序,想在其中调用用c写的函数,但是发现,一旦在汇编中调用了C的函数之后,系统就卡在那里不往下执行了,请问这怎么解决阿。
我是新手,还望大家多多帮忙阿。
boot.S:
#define MSG(x) leaw x,%si;call display .code16 #set video mode sector_msg1: .globl test display: .org 510 |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
好想没看到指定SP 是不这问题
加上了这个
movw $0x2000,%sp
movw %sp,%bp
还是这个样子
这可能是常识的问题,是你没有注意,一个程序应该只有一个main函数!你这里C函数是用main!
没看你的代码,因为你的概念就是错的。
当你执行“引导扇区的程序”时,内存里就只有ROM-BIOS和这个引导记录代码,C库函数代码还没有进来,你没法调用。
貌似不是这个问题,改成cmain结果是一样的。
你用你的MSG宏插到main函数里去跟踪看看
并没有调用C的库函数。
我的目的仅仅是想用C来写一部分代码,这样轻松一点。
还是看了代码再说比较好一点。
我貌似大概知道什么问题了。
C的.text被贴到了512字节后面,而bios开始只读取引导扇区,也就是512个字节,后面的压根就读如内存,所以一call就挂了。不知道这样解释有没有道理。
其实,我的初衷是想在bootsector开始就用c来写部分代码,现在看来只有在loader开始了。
Mark 一下,哈哈。不能偷懒哦。