Несколько вопросов начинающего

Тема в разделе "WASM.BEGINNERS", создана пользователем s3dworld, 6 окт 2010.

  1. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Они пытались сделать с нуля -- архитектура IA-64, более известная под маркой Itanium. Но толком дело не пошло: слишком много ПО существует для уродской IA-32, и просто так от неё не откажешься, ну а эмуляция IA-32 на IA-64 (именно таким путём предполагалось идти) не всё позволяет сделать гладко. Плюс вопрос цены: пока спрос невелик, процессоры не могут быть дешёвыми, поскольку выпускаются в ограниченном количестве, а пока их мало, разработчики ПО не спешат по-настоящему переходить на новую архитектуру... Собственно, этим и воспользовалась АМД, слепив свою АМД64 как расширение ИА-32 (тоже уродское, естественно), а Интел позже была вынуждена скопировать это расширение, ведь оно, в отличие от итаниумов, оставалось полностью (ну, почти полностью -- полной совместимости у этих уродцев не существует и из-за непродуманности, и из-за ошибок в самих процессорах) программно совместимым с ИА-32.

    Новые регистры АМД64 нельзя использовать, например, для адресации строк: там всё равно используются прежние регистры, только увеличенные до 64 разрядов (RSI и RDI). Никуда не делись ограничения в командах ввода-вывода, умножения-деления и т.п. В общем, кривой фундамент...
     
  2. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Это описано в BIOS Boot Specification, пункт «6.5.1 Booting from BAIDs». При загрузке с CD могут быть варианты (El Torito насчёт этого весьма невнятен, но в "section entry" можно указать сегмент загрузки; возможно, это только для "no emulation").

    Грузить смещение в сегментный регистр можно, но смысл это имеет очень редко. mov al, [cs:code16] вполне справляется с задачей. Для более компактного кода (как уже было предложено) можно загрузить в какой-нибудь базовый/индексный регистр 0x7C80 и использовать базовую/индексную адресацию, которая иногда короче абсолютной (для адресации диапазона 7C00…7CFF будет достаточно однобайтного смещения).

    ----8<----
    Маленькая поправка: в 16-битном коде.

    Насчёт замороченности x86 в кодировании инструкций неплохо расписано у Майкла Абраша (Michael Abrash, “The Zen of Assembly Language”): обратная совместимость — жуткая штука. Даже AMD-шники, проектируя x86-64, не смогли полностью отказаться от этой порочной практики (отчасти их можно понять: популярность платформы в немалой степени определяется наличием программного обеспечения для неё).

    Страшно представить, что получилось бы у Intel, финишируй они с 64 битами первыми. :derisive:
     
  3. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    baldr
    Ну, собственно, так и есть. Если для адресации используются 32-разрядные регистры, то и правила вычисления адреса соответствуют 32-разрядным режимам, хотя сам адрес в итоге всё равно усекается.

    Они и финишировали первыми, только отказавшись от совместимости на уровне машинного кода. Рынок, увы, не принял...
     
  4. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    KIV
    как cmp al, 0, test al, al, mov bh, 0 так и xor bh, bh занимают 2 байта
    пример не удачный выбрали
    cmp ax, 0 - 3 байта, test ax, ax - 2 байта
    mov bx, 0 - 3 байта, xor bx, bx - 2 байта
     
  5. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    А если всё-таки располагать данные не на Floppy-носителе, а на USB-Flash...если в материнку интегрирован разъём USB, то значит ли это, что BIOS позволяет читать данные из USB-накопителя? И если позволяет, то соблюдается такое же условие (512 байт и последние два 0x55AA) как и для Floppy-носителя?

    Просто я сомневаюсь что за 512 байт (-2 байта на 0x55AA) будет написан драйвер для работы с USB-накопителем.
     
  6. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    А никто и не впихивает драйвер в загрузочный сектор. Сервисы БИОС для чего существуют?
     
  7. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    SII
    Так наверное для этого))))

    И сколько можно загрузить данных с USB-накопителя в реальном режиме?
     
  8. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Без понятия, никогда не пробовал. Но, по идее, флэшка будет выглядеть как обычный диск, а значит, к ней и обращаться надо как к обычному диску -- т.е. ёмкость ограничена возможностями дисковых сервисов БИОС (2 Тбайта, если БИОС современный, насколько помню).
     
  9. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    А через BIOS функцию 0x09, прерывания 0x10, можно вывести русский символ?
     
  10. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    SII
    А вот как она будет выглядеть - это уже зависит от настроек. в большинстве современных биосов они могут выглядеть как fd, hd, stream, flash. Кстати как было выявлено экспериментально, не все биосы осуществляют полную эмуляцию. Некоторые сервисы могут быть не подвержены этим фишкам. Например при чтении с флешки в эмуляции как hd через edd она есть, а при записи темже способом эмуляции может не быть. В некоторых биосах эмуляция распространяется только на edd и обычными функциями нельзя даже считать с usb-flash.
    s3dworld
    Да но для начала их надо загрузить в знакогенератор
     
  11. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    s3dworld
    Можно, если сначала переопределить знакогенератор (русские символы туда, понятное дело, не входят). То же самое касается вывода русского текста путём прямой записи в видеопамять в текстовом режиме.
     
  12. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    SII
    То есть это мне придётся самому каждый символ описывать (на каждый символ по 8 байт, там как матрица что ли идёт 8 на 8 бит)? И где это хранить?

    Кто-нибудь знает, как для программы Bochs (именно для bochsdbg.exe), задать параметр, чтобы он при запуске загружал настройки, из указанного ему bxrc-файла?
     
  13. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Помогите (очень надо):
    А у меня ещё такой вопрос: клавиатура это очень важное устройство. К примеру когда ставишь в CD/DVD-привод диск с установщиком Microsoft Windows и перезагружаешь компьютер, то загрузчик ждёт нажатия кнопки для запуска установщика определённое время. И если время вышло и на кнопку не нажали, то...я не знаю что тогда делает программа загрузчик. Кстати, а что она делает чтобы передать управление BIOS?

    Так о чём это я...через BIOS я могу дождаться нажатия кнопки на клавиатуре, если сама клавиатура подключена к PS/2. А как быть если клавиатура подключена только лишь к USB? Или BIOS позволяет через свои функции работать и с USB-клавиатурой?

    Правда ещё надо определить есть ли вообще клавиатура. И если есть, то где.
     
  14. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    На один вопрос ответ нашёл. Если кому интересно, то расскажу...

    Я работаю в Windows. Использую ассемблер FASM. Для набора исходного кода использую Programmer's Notepad. Эта программа позволяет запускать из себя программы с указанными параметрами. Таким образом я настроил её так, что при нажатии клавиши F9 у меня происходит компиляция исходного кода через FASM (бинарный файл создаётся в той же директории где лежит файл исходного кода), а при нажатии клавиши F5 - запускается эмулятор Bochs (уже с загруженным файлом конфигурации, в котором указано что грузить).

    Для того чтобы исполняемому файлу bochsdbg.exe указать команду для загрузки указанного файла конфигурации при запуске, нужно в качестве параметров запуска указать флаг -f и далее имя файла (если имя файла содержит пробелы или путь, то нужно заключить их в двойные кавычки).
     
  15. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    s3dworld
    БИОСу управление передают не просто так, а для чего-то. Когда Вы выполняете INT 10h, чтобы вывести символ, Вы тоже передаёте тем самым управление БИОСу -- а именно его обработчику данного программного прерывания, а уж тот разбирается, что находится в регистрах, и из этого делает вывод, чего от него хотят. Так что Ваш вопрос про передачу управления без конкретизации, зачем, лишён смысла.

    Естественно, позволяет. А как иначе можно работать с клавиатурой через БИОС? На то сервисы БИОС и существуют, чтобы прятать от остальных программ особенности железа конкретного компьютера.
     
  16. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Впихнуть, пожалуй, можно. Однако если BIOS погрузила-таки бут-сектор, значит читать умеет. Т.е. есть шанс через int13 читать. Нужно, правда, учесть возможность различной CHS-трансляции. В большинстве случаев int13x уже есть, можно не заморачиваться.

    Опять же, BIOS Boot Specification. На int18 BIOS отреагирует как на ошибку IPL с конкретного устройства (типа не нашла 0xAA55 по смещению 510) и пойдёт дальше по тропинке, прописанной в CMOS.

    Многие чипсеты и BIOS поддерживают PS/2-эмуляцию USB-клавиатуры/мыши. В настройках BIOS что-нибудь про legacy KB/mouse support. А сама BIOS, естественно, умеет с USB-клавиатурой общаться.

    P.S. Боксу можно ещё и -q сказать, чтобы диалог не выводил.
     
  17. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    SII и baldr
    Спасибо!

    Я вот сейчас читаю про кодирование команд для процессора x86 на русском языке (Микропроцессор i486 (Книга 1)). А если ли что-нибудь подобное для x64? Имею в виду хорошее описание кодирования машинной инструкции на русском.
     
  18. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
  19. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    SII
    И что, на самом деле такие регистры есть?

    [​IMG]
     
  20. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Код загрузчика майкрасофт не один из самых удачных. Там очень много допущений, благодаря которым они выигрывают место под всякую муть типа этой. Но если интерестно, то можно сделать так
    Код (Text):
    1. push ds
    2. cli
    3. xor bx, bx
    4. mov ds, bx
    5. mov dx, cs
    6. mov ax, timer_irq
    7. xchg [bx+8*4+0], ax
    8. xchg [bx+8*4+2], dx
    9. mov [bp+timer_irq+0-$$], ax
    10. mov [bp+timer_irq+2-$$], dx
    11. mov [bp+timer_irq+4-$$], 18*5+2; (~5 sec, таймер выдает 18,5 сработок в секунду)
    12. sti
    13. next:
    14. mov ah, 1
    15. int 0x16
    16. jz wait
    17. xor ah, 0
    18. int 0x16
    19. cmp al, 0x0D
    20. jz done
    21. wait:
    22. cmp [bp+timer_irq+4-$$], 0
    23. jnz next
    24. ;timeout
    25. call resetirq
    26. int 0x19
    27. done:
    28. call resetirq
    29. pop ds
    30. ;continue boot up
    31. resetirq:
    32. mov [bp+timer_irq+0-$$], ax
    33. mov [bp+timer_irq+2-$$], dx
    34. cli
    35. mov [bx+8*4+0], ax
    36. mov [bx+8*4+2], dx
    37. sti
    38. retn
    но для загрузочного сектора это очень длинный код