Иллюстрированный самоучитель по Assembler


Макросредства ассемблера - часть 2



rept 32 ;Повторять столько раз


db sym ;Повторяемая директива


sym=sym+l ;Изменение переменной


endm ;Конец блока повторения

Как видно из приведенного фрагмента, блок повторения начинается с директивы ассемблера rept (от repetition, повторение), а заканчивается директивой endm (end macro, конец макроса). Реально в сегменте данных выделяется 32 байт, заполненных числами от 81h до 9Fh, которые предполагается рассматривать, как последовательность русских букв. Того же результата можно было достигнуть с помощью следующего предложения:

symbols db "А", "Б", "В", "Г", и т.д. до буквы Я


или проще, хотя и менее наглядно:

symbols db 128,129,130,131, и т.д. до числа 159.


Макрос повторения несколько сокращает время, требуемое для описания в тексте программы требуемого массива, хотя, возможно, снижает наглядность этого описания.

При подключении к компьютеру измерительного или управляющего оборудования иногда возникает необходимость замедлить работу процессора при обращении к портам этого оборудования. Замедление осуществляется включением в текст программы одной или, если требуется, нескольких команд безусловного перехода на следующее предложение:

in AL,300h ;Первое обращение к оборудованию


jmp a ;Задержка на время


a: jmp b ;выполнения


b: jmp с ;трех команд jmp


c: in AL,301h ;Следующее обращение к оборудованию

Для того, чтобы не создавать много ненужных, в сущности, меток, такого рода предложения часто записывают следующим образом:

in AL, 300h ;Первое обращение к оборудованию


jmp $+2 ;Задержка на время


jmp $+2 ;выполнения


jmp $+2 ;трех команд jmp


in AL,301h ;Следующее обращение к оборудованию

Здесь используется обозначение счетчика текущего адреса S. При трансляции любой команды в счетчике текущего адреса содержится адрес этой команды (смещение ее первого байта). Команда короткого перехода занимает 2 байт, поэтом}' команда jmp $+2 осуществляет переход на команду, идущую следом.




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



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