Я учусь писать загрузчик для машины X86, используя утилиты "as" и "ld", но у меня возникает вопрос.
Файл сборки выглядит следующим образом:
AS=as
LD=ld
.s.o:
${AS} -a $< -o $*.o >$*.map
all: final.img
final.img: bootsect
mv bootsect final.img
bootsect: bootsect.o
${LD} --oformat binary -N -e start -Ttext 0x7c00 -o bootsect $<
clean:
rm -rf *.o *.map *.img
Когда я создаю файл bootsect.s ниже для сборки final.img, проблем нет, и на экране появляется «Hello world»
.text
.globl start
.code16
start:
jmp code
msg:
.string "Hello world!\x0"
code:
movw $0xb800, %ax
movw %ax, %es #for display buffer address
movw $0, %ax
movw %ax, %ds
movw $msg, %si
movw $0, %di
cld
movb $0x07, %al
1:
cmp $0, (%si)
je 1f
movsb #DS:(E)SI to ES:(E)DI
stosb #AL to ES:(E)DI
jmp 1b
1: jmp 1b
.org 0x1fe, 0x90
.word 0xaa55
Но если у меня есть небольшое изменение в bootsect.Выше приведено следующее:
.text
.globl start
.code16
msg:
.string "Hello world!\x0"
start:
movw $0xb800, %ax
movw %ax, %es #for display buffer address
movw $0, %ax
movw %ax, %ds
movw $msg, %si
movw $0, %di
cld
movb $0x07, %al
1:
cmp $0, (%si)
je 1f
movsb #DS:(E)SI to ES:(E)DI
stosb #AL to ES:(E)DI
jmp 1b
1: jmp 1b
.org 0x1fe, 0x90
.word 0xaa55
На экране ничего не выводится.
Я запутался, почему?Не могли бы вы помочь мне?
Спасибо.