Ассемблерная вставка в Паскале
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Кто знает как реализовать подсчёт суммы элементов двумерного массива 3х3 как ассемблерную вставку в Паскале? Если в массиве попадается отрицательный элемент он должен быть преобразован в положительный. Заполнение массива и подсчёт суммы его элементов должны быть реализованы как ассемблерная вставка.
Допустим, я знаю, как реализовать.
Заполнять-то как? ручками, из файла, произволом?" писал(а):Заполнение массива
Массива из чего? каков тип элемента?" писал(а):элементов двумерного массива
преобразован по какому правилу? по модулю, четная степень или как?" писал(а):преобразован в положительный
It's a long way to the top if you wanna rock'n'roll
Массив заполняется произвольно, массив целых чисел, по модулю.
Код: Выделить всё
Uses crt;
var mtx : Array[1..3, 1..3] of Integer;
summ: Integer;
x,y : Integer;
Function GetRandom(i:Integer):Integer;
begin
GetRandom := Random(i);
end;
begin
ClrScr;
Randomize;
asm
mov di, offset mtx
mov cx, 9
@Generate:
push cx
push 200
call GetRandom
sub ax, 100
mov [di], ax
add di, 2
pop cx
loop @Generate
end;
Writeln('Original matrix:');
For X:=1 to 3 do
begin
For Y:=1 to 3 do Write(mtx[x,y]:5);
Writeln;
end;
asm
mov summ, 0
mov si, offset mtx
mov cx, 9
@Absolute:
mov ax, [si]
test ax, ax
jns @Positive
not ax
inc ax
mov [si], ax
@Positive:
add summ, ax
add si, 2
loop @Absolute
end;
Writeln('Processed matrix:');
For X:=1 to 3 do
begin
For Y:=1 to 3 do Write(mtx[x,y]:5);
Writeln;
end;
Writeln('Summ = ', summ:6);
end.
It's a long way to the top if you wanna rock'n'roll