Kodun geri kalanı büyükken ilk sektör yalnızca 512 bayt olduğundan, .lst dosyası için ayrılmış bir assembler koduna ihtiyacım var. Bunun bağlayıcı olarak adlandırıldığından emin değilim, ancak NASM ile bir .img dosyası oluşturduğumda bu assembler dosyasını bağlamak istiyorum. İlkNasm ile iki .asm dosyasını ekleme
biri
ORG 0x7c00
start:
JMP entry
DB 0x90
; Start of BIOS Parameter Block
DB "MyOS "
DW 512
DB 1
DW 1
DB 2
DW 224
DW 2880
DB 0xf0
DW 9
DW 18
DW 2
DD 0
DD 2880
DB 0,0,0x29
DD 0xffffffff
DB "MyOS-Vol "
DB "FAT12 "
TIMES 18 DB 0
; End of BIOS Parameter Block
entry:
MOV AX, 0
MOV SS,AX
MOV SP,0x7c00
MOV DS,AX
MOV ES,AX
MOV SI,msg
loop:
MOV AL,BYTE [SI]
ADD SI, 1
CMP AL,0
JE fin
MOV AH, 0x0e
MOV BX, 0xe1
INT 0x10
JMP putloop
fin:
HLT
JMP fin
msg:
DB 0x0a, 0x0a
DB "hello, world"
DB 0x0a
DB 0
maker:
TIMES 0x01fe-(maker-start) DB 0
DB 0x55, 0xaa
ikinci
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
TIMES 4600 DB 0
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
TIMES 1469432 DB 0
biri nasıl birinci koduna ikinci kodu ekleyebilirsiniz? Metni kopyalayıp yapıştırarak değil, nesne dosyasını birbirine bağladığında olduğu gibi. FAT12 Disk formatı için arayanlar için
. DOS Boot Record Format for FAT12 and FAT16
x86 PC donanımında önyükleme sınırlamaları hakkında konuşuyorsunuzdur. Öyküleri birleştirmenin sihirli bir yolu yoktur, böylece önyükleme sektöründe ve geri kalan kısımda ilk bölümünüz olabilir. Önyükleyici, ek kodun yüklenmesini üstlenmeli ve yürütmelidir. –
Amacınızı aldım. Ben açıkça benim açıklamamış olduğunu düşünüyorum. Bunun için üzgünüm. Sormaya çalıştığım şey bu. Asm dosyalarını donanıma yüklemeden önce nasıl bağlarım? Derleyici, yürütülebilir dosyaları yapmadan önce nesne dosyalarını bağladığını biliyorum. Peki ya montajcı hakkında? Dosyayı okurken ve başka bir dosyayı string işlevi olarak ekleyerek küçük bir program hazırladım. Ama bu şekilde görünmüyor. Nazım için herhangi bir seçenek var mı? Ben bir tane bulamadık :( –
Asm dosyanızın üstünde '0x7c00' org'unuz var demektir, o zaman kodunuzu '-f bin' seçeneği ile birleştiriyorsunuz ('nasm -f bin boot.asm' gibi) o boot.bin 'çıktısı '' nasm -f bin '' den gelen çıktı, geleneksel anlamda _linked_ olamayan, tam bağlantılı bir düz ikili görüntüdür.Tam yükleyiciye (genellikle _DD_ gibi bir araç ile) yazılır. Windows/OSX'de mi, Linux'ta mı? Hangi bağlayıcıyı kullanmak istiyorsunuz? (_LD_, _GCC_ vb.)? –