• Nasm - почему не загружается более одного сектора диска?

    jcmvbkbc
    @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    Загрузчик нормально работает при загрузке 1 сектора

    Вот я собрал твой загрузчик, записал его в бут-сектор, добил двумя секторами мусора и загрузил с такого диска qemu. Выглядит так, будто бы всё работает:
    $ nasm test.s -o test
    $ head -c 2b /dev/urandom >> test
    $ hexdump -Cv test | tail -n2
    000005f0  49 93 ad 56 25 97 25 82  61 1d d9 a1 66 2a cb 19  |I..V%.%.a...f*..|
    00000600
    $ qemu-system-i386 -hda test -gdb tcp::1235 -S

    В другом терминале, см этот ответ на вопрос "как в gdb посмотреть 16-битный код выполняющийся в qemu":
    $ wget https://gist.githubusercontent.com/MatanShahar/1441433e19637cf1bb46b1aa38a90815/raw/2687fb5daf60cf6aa8435efc8450d89f1ccf2205/target.xml


    Далее в том же терминале:
    $ gdb
    (gdb) set tdesc filename target.xml
    warning: A handler for the OS ABI "GNU/Linux" is not built into this configuration
    of GDB.  Attempting to continue with the default i8086 settings.
    
    (gdb) target remote :1235
    (gdb) set disassembly-flavor intel
    (gdb) b *0x7c32
    Breakpoint 2 at 0x7c32
    (gdb) c
    Continuing.
    
    Breakpoint 2, 0x00007c32 in ?? ()
    (gdb) x/2i $pc
    => 0x7c32:      int    0x13
       0x7c34:      jb     0x7c3e

    -- тут я остановился прямо перед командой чтения. Дальше:
    (gdb) tb *0x7c34
    Temporary breakpoint 3 at 0x7c34
    (gdb) c
    Continuing.
    
    Temporary breakpoint 3, 0x00007c34 in ?? ()
    (gdb) x/16x 0x13f0
    0x13f0: 0x49    0x93    0xad    0x56    0x25    0x97    0x25    0x82
    0x13f8: 0x61    0x1d    0xd9    0xa1    0x66    0x2a    0xcb    0x19

    прочитанные байты по адресу куда должен был попасть конец второго сектора совпадают со случайными данными которые я записал в конец образа диска.

    Ну и на экране всё мило, надпись "Loading kernel...." выводится, надпись "Kernel.bin not found!" не выводится.

    Но вообще, если начать придираться, то в процедуре read_sector не инициализирован dl, так что неизвестно, с какого именно устройства происходит попытка чтения в твоём неработающем случае. Можно добавить mov dl, 80h для выбора первого ЖД, для определённости.
    Ответ написан
    Комментировать
  • К вопросу о этике в ИТ: куда обращаться за цензурированием сайта?

    Sterhel
    @Sterhel
    Вот тут обсуждался вопрос, жалобы писали Гришину и не только.
    Ответ написан
    1 комментарий
  • Хабр скукожился

    alex_dredd
    @alex_dredd
    Возможно, это плохо скажется на моей карме, но как по мне — стало лучше. Не надо водить глазами по всем 1920 px. Единственное, что хотелось бы — как-то отделить текст от полей, а то, действительно, как в воздухе висит(:
    Ответ написан
    Комментировать
  • Хабр скукожился

    MTonly
    @MTonly
    Веб-разработчик с 2002 года
    Неудачно то, что максимальная ширина указана в пикселах. А надо-то — в em — чтобы при изменении размера шрифта (средствами браузера или на уровне системы) длина строки оставалась более-менее одинаковой.

    Технологам Хабра: текущему пиксельному значению (1200px) максимальной ширины соответствует величина 100em.

    Сделать фон по бокам серым тоже было бы полезно.
    Ответ написан
    1 комментарий