Связь pascal and asm, модуль числа - Assembler

Узнай цену своей работы

Формулировка задачи:

Нужно в матрице поменять отрицательные числа на положительные (взять модуль). Сначала сделал для одномерного массива. Вроде все правильно пишу - брать модуль не хочет (neg). Изменять нужно в ассемблерной вставке, на паскале написан только ввод и вывод массива, ну и подключение функции с вставкой asm. Просьба помочь, заранее спасибо.
Program labasm_3;
uses crt;
type tmas1=array [1..5] of integer;
var mas1:tmas1;
    mas2:tmas1;
    mas3:tmas1;
    i:integer;
 function Sradd( p,p2:pointer; j:integer):Integer;
 begin
 asm
{        int    3 ; ®в«*¤Є*}
    xor dx, dx
    lds si, p
    les di, p2
    mov cx, j
{ Є®ЇЁа㥬 j б«®ў Ё§ mas1 ў mas3 }
    rep movsw
    lds si, p
    les di, p2
    neg di
    mov cx, j
end;
end;
 Procedure Vvod;
 begin
  TextColor(Green);
  Writeln('‡*¤**ЁҐ:');
  writeln('Ќ*©вЁ Їа®Ё§ўЁ¤Ґ*ЁҐ ¤ўге ®¤*®¬Ґа*ле ¬*ббЁў®ў');
  writeln;
  TextColor(2);
  Writeln('‚ўҐ¤ЁвҐ 5 Ґ«Ґ¬*Ґв®ў');
  TextColor(yellow);
  for i:=1 to 5 do
   begin
    read(Mas1[i]);
    writeln('Mas1[',i,'] =',Mas1[i]);
   end;
   Readln;
   end;
   begin
   clrscr;
   Vvod;
{    end;}
Sradd(@mas1,@mas3,5);
   TextColor(Blue);
   writeln('Mas3_rez:');
   for i:=1 to 5 do
    write(' ',Mas3[i]);
   readln;
end.

Решение задачи: «Связь pascal and asm, модуль числа»

textual
Листинг программы
asm
    mov ax,j
    rcl ax,1
    jnc @1
    neg j
@1:
   end;

Объяснение кода листинга программы

В данном коде происходит следующее:

  1. Переменная j содержит число, которое необходимо умножить на 10.
  2. Используя операцию сдвига rcl ax,1, значение переменной j смещается на один разряд влево, при этом старший бит устанавливается в ноль.
  3. Если старший бит равен нулю (jnc @1), то число положительное и его можно умножать на 10.
  4. Если старший бит не равен нулю, то число отрицательное и его необходимо инвертировать (neg j).
  5. После выполнения операции умножения на 10, результат сохраняется в переменной ax.
  6. Код завершается командой end;.

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы