For ia := 0 to 4 do

ib := ib + ia;

end;

 

 
 

Т.е. мы организуем цикл по переменной ia, которая меняется от 0 до 4, в цикле к переменной ib добавляем текущее значение ia (выполняем это пять раз). Результат трансляции этой программы показан на рис. …

Рисунок Результат трансляции программы 2

 

Рассмотрим полученный код построчно (для упрощения не будем больше показывать код инструкции, а ограничимся адресом команды и ее символьным представлением).

1. Первая строка обеспечивает начальное присвоение переменной ia нулю:

004D998 mov word ptr [ia], $0000

В результате исполнения этой инструкции по адресу переменной ia будет занесен 0. Напоминаем, что определитель размера данных word ptr показывает, что мы работаем с шестнадцатиразрядным числом.

2. Во второй строке готовимся выполнять сложение

004D9A1 mov ax, [$00450bd8]

Содержимое переменной ia, находящейся по адресу 00450BD8h, скопируем в регистр ax, при помощи которого будет производиться суммирование.

3. Третья строка выполняет непосредственное сложение

004D9A7 add [ib], ax

К содержимому находящемуся по адресу ib добавляем содержимое регистра ax (напоминаем, что в этот регистр было помещено значение находящееся в ia). Таким образом эта инструкция соответствует следующей строке программы

ib := ib + ia;

 

4. Четвертая строка обеспечивает увеличение переменой ia в цикле на единицу:

004D9AE inc [ia]

Команда inc обеспечивает приращение на единицу данных по адресу переменной ia.

5. Пятая строка нужна для сравнения содержимого переменой ia с конечным значением параметра цикла:

004D9B5 cmp word ptr [ib], $05

Инструкция cmp сверяет значение двух байт в памяти по адресу ib с числом 5, в результате будут установлены флаги в регистре флагов.

6. Шестая инструкция завершает наш цикл.

004D9BD jnz -$1e

Инструкция jnz (переход, если не равно нулю) выполняет ветвление по адресу второй инструкции (004D9A1h), если результат предыдущей операции не нулевой. Этот результат определяется по регистру флагов. Адрес ветвления находится так: к адресу команды следующей после текущей 004D9BFh (это содержание счетчика команд) добавляем смещение, указанное в команде -1Eh, получаем указанный адрес 004D9A1h. Когда количество проходов цикла достигает пяти, в переменной ia будет находиться 5 и выполнение цикла прекратиться.