本来是用gas汇编器的ld -Ttext 0x0命令后,总是得到在一个代码仍然从0x200开头的文件。
这一度使我以为这是gas的设计错误或是怎么的。
还在昨天写的教程里留下错误的理解:
http://www.cnblogs.com/bombless/archive/2010/12/28/writing-X86-os-part1.html
今天又参考了一篇文章,
http://dev.csdn.net/htmls/31/31794.html
终于理解应该怎么办了。
以以下汇编代码为例:
.global start
.code16
.text
start:
movw $0xb800,%ax
movw %ax,%ds
movb $0x41,( 0 )
movb $0x1f,( 1 )
hlt
.code16
.text
start:
movw $0xb800,%ax
movw %ax,%ds
movb $0x41,( 0 )
movb $0x1f,( 1 )
hlt
保存为文件gas.s。
只需要下面几个步骤,就可以生成一个只有代码的纯二进制指令文件gas.bin:
as -o gas.o gas.s
objcopy -O binary gas.o gas.bin