Проблема вывода символов в текстовом режиме

Тема в разделе "WASM.BEGINNERS", создана пользователем Antoniosis, 23 авг 2010.

  1. Antoniosis

    Antoniosis New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2010
    Сообщения:
    12
    Всем доброго времени суток!
    При занесении в видеопамять в текстовом режиме аски кода и байта аттрибутов (стандартный формат) показывает на экране какую то белеберду из значков. И главное следом пару строками ниже показывается нормальный текст биосовского сообщения.
    Процедура загружается с дискеты сразу после биос тестирования системы в реальном режиме.

    --------------------------------------------
    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
    -------------------------------------------

    Стандартный самый простой метод! Помогите пожалуйста.
     
  2. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Если требуется выводить символы кириллицы, то необходимо загрузить соответствующую битовую карту в память знакогенератора. Вообще для вывода символов в коде бутсектора обычно используется функция видеосервиса BIOS с номером 0xE.
     
  3. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Попробуй вместо push cs/pop ds использовать mov ax,0x7C0/mov ds,ax. Это более надежно. Кроме того, многие предпочитают использовать сегменты данных с нулевой базой.
     
  4. Antoniosis

    Antoniosis New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2010
    Сообщения:
    12
    В том то и дело что вывожу латиницу ))
    В памяти насколько я понимаю должно быть несколько стандартных наборов шрифтов (ведь биос то выводит как положено). Скорее всего мне необходимо переключить таблицу?!
     
  5. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    248
  6. Antoniosis

    Antoniosis New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2010
    Сообщения:
    12
    Ага оно! ) спасибо! почитаю внимательно
     
  7. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Латиница выводится без всяких переключений кодогенераторов. Так что единственное объяснение - именно #3. В смысле, CS:SI у вас не туда указывает :) ES:lol: I в полном порядке - вы его четко задаете. А вот CS... CS скорее всего =0. И выводится у вас что-то из таблицы векторов прерываний, в символьном виде :)
    потому что offset отсчитывается относительно базы, а база у вас задана org 3eh
     
  8. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    MBR стартует с 0:7C00.
     
  9. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Ну, если еще точнее, то смещение отсчитывается относительно начала сегмента, т.е. нулевой внутрисегментной базы. 3Eh - это смещение не первой, а как минимум второй команды загрузочной записи (эту сущность некорректно называть MBR). Первая команда находится по нулевому смещению (при условии, что база сегмента равна 7C00h) и обычно представляет собой команду перехода по смещению 3Eh. Надеюсь, эта команда присутствует в загрузочной записи. И последнее замечание: не нужно выводить на экран терминатор строки.