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


Программка для практики


Хотите увидеть всю мощь Ассемблера?

Давайте усовершенствуем программу с . (1) CSEG segment (2) assume CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG (3) org 100h (4) Start: (5) mov ax,0B800h (6) mov es,ax (7) mov al,1 (8) mov ah,31 (9) mov cx,254 (10) Next_screen: (11) mov di,0 (12) call Out_chars (13) inc al (14) loop Next_screen (15) mov ah,10h (16) int 16h (17) int 20h (18) Out_chars proc (19) mov dx,cx (20) mov cx,2000 (21) Next_face: (22) mov es:[di],ax (23) add di,2 (24) loop Next_face (25) mov cx,dx (26) ret (27) Out_chars endp (28) CSEG ends (29) end Start

Не устали?

Будем разбираться... Хотя, собственно, ничего сложного нет.

Итак, строки (1) - (8), (15) - (17) и (28) - (29) опускаем. Вопросов по ним быть не должно.

В строке (9) заносим в CX число 254, указывающее на то, сколько раз будет выполняться основной цикл. Строки (10) и (14) - "голова" и "хвост" нашего основного цикла соответственно. DI будет меняться в процедуре, поэтому нам необходимо будет его постоянно аннулировать (11). В строке (12) вызываем процедуру, которая заполнит экран кодом символа, который находится в AL (в первом случае - это 01 "рожица"). Все! Теперь экран заполнен кодом 01. При этом DI будет равно 2001 (поэтому нам и нужно его обнулять). Далее увеличим на единицу код, который находится в AL (теперь AL содержит 02 - тоже "рожица", но немного другого вида) (строка (13)), уменьшим счетчик на 1 и перейдем к заполнению экрана кодом 02 (строка 14). И так 254 раза.

Теперь процедура.

В строке (19) сохраним CX (просто перенесем его в DX), т.к. он будет изменен во вложенном цикле ниже. Строки (21) и (24) - "голова" и "хвост" вложенного цикла, который будет выполняться 2000 раз (надо же заполнить экран полностью) (см. строку (20), в которой загружаем счетчик в CX). Все! Осталось только восстановить CX (строка (25)) и выйти из подпрограммы (26).

Итак, у нас здесь два цикла: основной и вложенный (так мы их назвали). Основной выполняется 254 раза, а вложенный - 2000 раз.

Если у Вас Pentium, то, боюсь, что вы не успеете заметить вывод всех символов. Очень быстро работает, хотя это далеко и не оптимальный алгоритм (кто знаком с языком - подтвердят мои слова).

Для исследования данного примера я рекомендую вам воспользоваться отладчиком. Т.к. у многих есть CV и AFD, то вкратце еще раз объясню, какие кнопки давить.

CodeView:

F8 - пошаговое выполнение команд (с заходом в подпрограммы);

F10 - выполнение команды за один шаг (без захода в подпрограммы).

AFD:

F1 - пошаговое выполнение команд (с заходом в подпрограммы и прерывания);

F2 - выполнение команды за один шаг (без захода в подпрограммы и прерывания).

Ну, поэксперементируйте с клавишами. Принцип прост.

Удачного программирования!




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



Книжный магазин