Страница 1 из 1

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

Добавлено: 23 июл 2009, 14:26
mustafa1453
Я начал изучать ассемблер по рассылке Калашникова. Там есть такая программа:

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

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), через командную строку под виндой.

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

Добавлено: 26 июл 2009, 19:11
MiReQ
по-моему, это косяк виндозного cmd, так что пробуй в DOSBox'e...
если кто-то знает, как работать с cmd, то присоединяюсь к вопросу :)

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

Добавлено: 26 июл 2009, 19:28
Goodwin98
просто надо добавить сразу после begin:

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

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

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

Добавлено: 26 июл 2009, 19:37
MiReQ
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-й...

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

Добавлено: 26 июл 2009, 21:03
Goodwin98
Во-первых надо не sub dl,30 ,а add dl,30h , но это не суть.
то выведется как раз 3... так что, режим (обычно) сразу 3-й...
Нужно установить принудительно. Это если хотите действительно особенность эмуляции. И кстати лучше такие проги запускать не через cmd, а через ntvdm (command.com, если так понятней), поскольку cmd - это консоль, а не эмулятор.

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

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

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