Ассемблер Это просто! Учимся программировать


Еще немного о сегментации памяти. - часть 2


Программы, написанные на "чистом" Ассемблере, очень компактны. И 64 килобайта для них довольно большой объем.

Помнится, писал когда-то я антивирусную оболочку типа "а-ля Нортон Коммандер" на Ассемблере. Так она заняла у меня примерно 40 килобайт, хотя и не выполняла всех функций NC, но делала кое-что другое. Еще пример: Volcov Commander поздних версий. Практически копия NC, но занимает всего 64000 байт (в отличие от Нортона). Я подозреваю, что писали ее если не на "чистом" Ассемблере, то хотя бы большую часть кода так точно. Да и работает Volkov гораздо быстрее Нортона.

Вернемся. Если есть желание поэксперементировать, то попробуйте перед вызовом 21h-ого прерывания загрузить в DS какое-нибудь число. Например, так:

... mov dx,offset My_string mov ax,10h mov ds,ax mov ah,9 int 21h ...

Вы увидите, что программа выведет не нашу строку, а какой-то "мусор" на экран, хотя в DX мы и загружаем адрес нашей строки, но сегмент другой. Только не забудьте восстановить DS после выполнения данной функции:

mov ax,cs mov ds,ax

Итак, полное описание:

Функция 09h прерывания 21h - вывод строки символов на экран в текущую позицию курсора:

Вход: AH = 09h

DS:DX = адрес ASCII-строки символов, заканчивающийся '$'

Выход: ничего

Ну, разобрались с этим окончательно...

Новые операторы.




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