Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ассемблер _ Массивы

Автор: Koresh 22.11.2006 2:36

Приведите, пожалуйста, кому не лень самый простой пример использования одномерного массива. Я Assembler начал изучать 2 часа назад... sad.gif С адресацией-то все вроде ясно, а вот для чего используют, например @0, @1, @2 не понятно. Азы читал...
Например, вычислить SUM(A*X), где A:array[1..5] of integer; X:integer;
И если можно, с подробным комментарием
Заранее спасибо.

Автор: xds 22.11.2006 13:05

program AsmArray;

var
a: array[1..5] of Integer;
x, Sum,
i: Integer;

begin
Randomize;
for i := 1 to 5 do
begin
a[i] := -9 + Random(20);
Write(a[i], ' ');
end;
Writeln;

x := 4;

asm
cld { df := 0, lodsw будет УВЕЛИЧИВАТЬ si }
xor dx,dx { dx := 0 }
lea si,a { si := @a[0] }
mov cx,5 { cx := 5, цикл на 5 интераций }
@@Add: { локальная (@@) метка }
lodsw { ax := слово по адресу ds:si - очередной эл-т массива, }
{ si := si + 2 (2 = SizeOf(Integer)) }
add dx,ax { dx := dx+ ax; }
loop @@Add { cx := cx - 1; if cx <> 0 then goto @@Add; }
mov ax,x { ax := x }
imul dx { dx:ax := ax * dx }
mov Sum,ax { Sum := ax }
end;

Writeln('Sum = ', Sum);
end.