Программа работы с видеобуфером

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
mustafa1453
Сообщения: 5
Зарегистрирован: 23 июл 2009, 13:59

Я начал изучать ассемблер по рассылке Калашникова. Там есть такая программа:

Код: Выделить всё

CSEG segment
org 100h
Begin:

mov ax,0B800h
mov es,ax             ; здесь, я так понял, устанавливаеться видеобуфер
mov di,0               ; смещение относительно сегмента 0B800h

mov ah,31            ; заносится атрибут символа (31 - ярко-белый символ на синем фоне)
mov al,1               ; ASCII-код символа (01 - это рожица)
mov es:[di],ax       ; заносим символ ASCII по адресу 0B800:0000h


mov ah,10h
int 16h                 ; ждем нажатие клавиши
int 20h                 ; выход в ДОС

CSEG ends
end Begin
Программа удачно компилируеться, но при исполнении ничего не показывает. Помогите разобраться с проблемой. Компилирую под TASM(не TASM32), через командную строку под виндой.
MiReQ
Сообщения: 28
Зарегистрирован: 13 май 2009, 13:06
Откуда: Россия, Пермь
Контактная информация:

по-моему, это косяк виндозного cmd, так что пробуй в DOSBox'e...
если кто-то знает, как работать с cmd, то присоединяюсь к вопросу :)
Goodwin98
Сообщения: 4
Зарегистрирован: 01 июл 2009, 02:02
Контактная информация:

просто надо добавить сразу после begin:

Код: Выделить всё

mov ax,03
int 10h
чтобы установить текстовый режим.
MiReQ
Сообщения: 28
Зарегистрирован: 13 май 2009, 13:06
Откуда: Россия, Пермь
Контактная информация:

Goodwin98 писал(а):просто надо добавить сразу после begin:

Код: Выделить всё

mov ax,03
int 10h
чтобы установить текстовый режим.
а если

Код: Выделить всё

mov ah,0Fh
int 10h   ;<-- в AL - номер текущего режима
mov ah,02h
mov dl,al
sub dl,30h
int 21h
то выведется как раз 3... так что, режим (обычно) сразу 3-й...
Goodwin98
Сообщения: 4
Зарегистрирован: 01 июл 2009, 02:02
Контактная информация:

Во-первых надо не sub dl,30 ,а add dl,30h , но это не суть.
то выведется как раз 3... так что, режим (обычно) сразу 3-й...
Нужно установить принудительно. Это если хотите действительно особенность эмуляции. И кстати лучше такие проги запускать не через cmd, а через ntvdm (command.com, если так понятней), поскольку cmd - это консоль, а не эмулятор.
MiReQ
Сообщения: 28
Зарегистрирован: 13 май 2009, 13:06
Откуда: Россия, Пермь
Контактная информация:

Goodwin98 писал(а):Во-первых надо не sub dl,30 ,а add dl,30h , но это не суть.
Угу, ошибси малость...
Goodwin98 писал(а):И кстати лучше такие проги запускать не через cmd, а через ntvdm (command.com, если так понятней), поскольку cmd - это консоль, а не эмулятор.
я думал ntvdm запускается и из cmd (автоматически при запуске DOS-приложений)...
Спасибо, буду знать :-)

P.S. я асм пока только меньше полугода учу...
Ответить