Всем доброго времени суток! При занесении в видеопамять в текстовом режиме аски кода и байта аттрибутов (стандартный формат) показывает на экране какую то белеберду из значков. И главное следом пару строками ниже показывается нормальный текст биосовского сообщения. Процедура загружается с дискеты сразу после биос тестирования системы в реальном режиме. -------------------------------------------- text segment assume CS:text org 3eh ;----->> смещения первой команды mbr begin: jmp short Disp string db 'primer', 0 len=$-string Disp proc push CS pop DS mov ax, 0b800h mov ES, ax cld xor di, di mov si, offset string mov cx, len mov ah, 07h ;---> белый цвет loo: lodsb stosw loop loo m: jmp short m Disp endp text ends end begin ------------------------------------------- Стандартный самый простой метод! Помогите пожалуйста.
Если требуется выводить символы кириллицы, то необходимо загрузить соответствующую битовую карту в память знакогенератора. Вообще для вывода символов в коде бутсектора обычно используется функция видеосервиса BIOS с номером 0xE.
Попробуй вместо push cs/pop ds использовать mov ax,0x7C0/mov ds,ax. Это более надежно. Кроме того, многие предпочитают использовать сегменты данных с нулевой базой.
В том то и дело что вывожу латиницу )) В памяти насколько я понимаю должно быть несколько стандартных наборов шрифтов (ведь биос то выводит как положено). Скорее всего мне необходимо переключить таблицу?!
Латиница выводится без всяких переключений кодогенераторов. Так что единственное объяснение - именно #3. В смысле, CS:SI у вас не туда указывает ESI в полном порядке - вы его четко задаете. А вот CS... CS скорее всего =0. И выводится у вас что-то из таблицы векторов прерываний, в символьном виде потому что offset отсчитывается относительно базы, а база у вас задана org 3eh
Ну, если еще точнее, то смещение отсчитывается относительно начала сегмента, т.е. нулевой внутрисегментной базы. 3Eh - это смещение не первой, а как минимум второй команды загрузочной записи (эту сущность некорректно называть MBR). Первая команда находится по нулевому смещению (при условии, что база сегмента равна 7C00h) и обычно представляет собой команду перехода по смещению 3Eh. Надеюсь, эта команда присутствует в загрузочной записи. И последнее замечание: не нужно выводить на экран терминатор строки.