В предыдущем примере рассматривалась довольно большая программа
на языке ассемблера, хранящаяся в собственном объектном файле и
загружаемая в память интерпретатором Бейсика. А как в случае очень
маленькой программы. Представляется, что для такой программы
тратилось бы слишком много усилий на одну только загрузку ее из
собственного файйла. В приложении C справочника по языку Бейсик
приведен способ "упаковки" программы на машинном языке в область
памяти за пределами рабочей области интерпретатора. Приведем пример
применения другого способа.
На Фиг. 10.8 показана программа, написанная на языке
ассемблера, которой мы воспользуемся. Эта программа обращается к
BIOS для сдвига изображения на экране. Рассмотрев параметры,
хранящиеся в регистрах CX и DX, можно увидеть, что сдвигаемое окно
отображает лишь часть экрана. Мы будем исползовать приведенную
программу для разбиения экрана на несколько окон, в каждом из
которых сдвиг может производиться независимо. Поскольку средства
реализации этого в языке Бейсик отсутствуют, понадобится процедура
на языке ассемблера.
Microsoft (R) Macro Assembler Version 5.00 1/1/80 04:07:03
Фиг. 10.8 Программа прокрутки окон на дисплее Page 1-1
PAGE ,132
TITLE Фиг. 10.8 Программа прокрутки окон на дисплее
0000 CODE SEGMENT
ASSUME CS:CODE
0000 SCROLL PROC FAR
0000 55 PUSH BP
0001 8B EC MOV BP, SP
0003 8B 76 06 MOV SI, [BP+6] ; Загрузка адреса параметра
0006 8B 0C MOV CX, [SI] ; Загрузка параметра
0008 0A C0 OR AL, AL