Assembler - язык неограниченных возможностей


Прямая работа с видеопамятью - часть 2


stosd ; записать последний (256-й) символ и пробел

; собственно вывод на экран mov ax,0B800h ; сегментный адрес видеопамяти mov es,ax xor di,di ; DI = 0, адрес начала видеопамяти в ES:DI mov si,offset ctable ; адрес таблицы в DS:SI mov cx,15*80+32 ; 15 строк по 80 символов, последняя строка - 32 rep movsw ; скопировать таблицу ctable в видеопамять ret ; завершение СОМ-файла ctable: ; Данные для вывода на экран начинаются сразу ; за концом файла. В ЕХЕ-файле такие данные ; определяют в сегменте .data? end start

При подготовке данных для копирования в видеопамять в этой программе использовался тот факт, что в архитектуре Intel при записи слова (или двойного слова) в память старший байт располагается по старшему адресу. Так что при записи в память двойного слова 1F201F00h сначала записывается самый младший байт 00h (ASCII-код текущего символа), потом 1Fh, используемый в этом примере атрибут, потом 20h (код пробела) и потом, по самому старшему адресу, — самый старший байт, 1Fh, атрибут для этого пробела. Кроме того, в этом примере использовались некоторые 32-битные команды (MOV и STOSD). Этими командами можно пользоваться из 16-битной программы (разумеется, если процессор 80386 и выше), но не стоит этим злоупотреблять, так как каждая такая команда оказывается длиннее на 1 байт и выполняется дольше на 1 такт.





Начало  Назад  Вперед