встроенная функция печати сборки не работает - PullRequest
0 голосов
/ 09 мая 2020

Вот мой новый код ядра, который должен печатать (кстати, причина, по которой он называется printstack, потому что я пытаюсь передать параметры по стеку, но это не сработало):

void printstack(char in){ /*print function*/
       asm ("mov ah,0x0e\n"
         "mov al,%0\n"
         "int 0x10\n"
    ::"r"(in)
    ); 
}
void main(){ /*kernel entry point*/
  printstack('a');
}

Однако когда я тестирую его в QEMU, это только пробелы для печати. ​​

Вот полный скрипт для сборки os.flp:

 echo ">>> Creating floppy image..."
   mkdosfs -C os.flp 1440 || exit   
    echo ">>> Assembling bootloader..."

    nasm -O0 -w+orphan-labels -f bin -o source/bootload/bootload.bin source/bootload/bootload.asm || exit

    echo "compiling kernel"
    gcc -c ./source/kernel.c -masm=intel 
    ld --oformat binary kernel.o -o ./source/kernel.bin  -e main



    echo ">>> Adding bootloader to floppy image..."

    dd status=noxfer conv=notrunc if=source/bootload/bootload.bin   of=os.flp || exit


    echo ">>> Copying kernel"

    rm -rf tmp-loop

    mkdir tmp-loop && mount -o loop -t vfat os.flp tmp-loop && cp source/kernel.bin tmp-loop/


    sleep 0.2

    echo ">>> Unmounting loopback floppy..."

    umount tmp-loop || exit

    rm -rf tmp-loop


t

    echo '>>> Done!'

1 Ответ

0 голосов
/ 09 мая 2020

Я как-то решил, поменяв положение основного и стека печати:

void main(){
  printstack('a');
}

void printstack(char in){
       asm volatile("mov ah,0x0e\n"
         "mov al,%0\n"
         "int 0x10\n"
    ::"r"(in)
    :"eax"
    ); 
}
...