Ассемблер. Сложение шестнадцатиричных чисел\вычитание двоичных - Assembler

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

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

Program RaznostMassivov;
const N=7;
var a1:array [1..N] of longint;
    a2:array [1..N] of longint;
    c:longint; p:pointer;
    i:integer; p2:pointer;
begin
  for i:=1 to N do
    begin
      writeln('Введите ',i,' элемент массива №1');
      readln(a1[i]);
    end;
    writeln('Введенный массив №1:');
  for i:=1 to N do
    write(a1[i],' ');
    writeln;
    for i:=1 to N do
    begin
      writeln('Введите ',i,' элемент массива №2');
      readln(a2[i]);
    end;
  writeln('Введенный массив №2:');
  for i:=1 to N do
    write(a2[i],' ');
  writeln;
p:=@a1[1];
p2:=@a2[1];
  asm
         mov eax, p
         mov ebx, p2
         mov ecx, 0
    @s:  mov edx, [ebx]
         sub [eax], edx
         jno @m
         add [eax+4], 1
    @m:  inc ecx
         cmp ecx, N
         je @gg
         add eax, 4
         add ebx, 4
         jmp @s
         @gg
  end;
end.
Программа для задания 4. 4. Написать программу, производящую вычитание чисел произвольной размерности. Числа хранятся в виде массивов типа longint (см. задание 3). Ввод-вывод данных чисел осуществлять из двоичных файлов (длина которых соответственно кратна 4-м). Надо ее переделать в программу для задания 3 3. Написать программу, производящую сложение чисел произвольной размерности. Числа хранятся в виде массивов типа longint, где 0-й элемент массива - содержит младшие 32 бита числа (с 0-го по 31-й), следующий элемент массива с 32-го по 63-й и т. д. Ввод-вывод данных чисел осуществлять в 16-ричной системе счисления. Но даже в не переделанном виде она не работает, т.к. есть ошибка в @gg. Да еще и нет вывода результата. Помогите осознать, что да как (

Решение задачи: «Ассемблер. Сложение шестнадцатиричных чисел\вычитание двоичных»

textual
Листинг программы
Program RaznostMassivov;
const N=7;
var a1:array [1..N] of longint;
    a2:array [1..N] of longint;
    c:longint; p:pointer;
    i:integer; p2:pointer;
begin
  for i:=1 to N do
    begin
      writeln('Введите ',i,' элемент массива №1');
      readln(a1[i]);
    end;
    writeln('Введенный массив №1:');
  for i:=1 to N do
    write(a1[i],' ');
    writeln;
    for i:=1 to N do
    begin
      writeln('Введите ',i,' элемент массива №2');
      readln(a2[i]);
    end;
  writeln('Введенный массив №2:');
  for i:=1 to N do
    write(a2[i],' ');
  writeln;
p:=@a1[1];
p2:=@a2[1];
  asm
         mov eax, p
         mov ebx, p2
         mov ecx, 0
    @s:  mov edx, [ebx]
         sub [eax], edx
         jno @m
         add [eax+4], 1
    @m:  inc ecx
         cmp ecx, N
         je @gg
         add eax, 4
         add ebx, 4
         jmp @s
         @gg:
  end;
end.

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

  1. Программа называется RaznostMassivov.
  2. В программе объявлены следующие переменные: a1: массив из N элементов типа longint; a2: массив из N элементов типа longint; c: longint; p: указатель; i: целочисленный тип; p2: указатель;
  3. Пользователю предлагается ввести элементы двух массивов.
  4. Затем выводится введенный массив №1, затем массив №2.
  5. После этого программа переходит к ассемблерному блоку кода.
  6. В ассемблерном блоке кода используется регистр eax для хранения адреса первого элемента первого массива и ecx для хранения счетчика.
  7. Используется цикл, который выполняется до тех пор, пока счетчик ecx не станет равным N.
  8. На каждой итерации цикла происходит следующее:
    • из регистра ebx берется адрес текущего элемента второго массива;
    • из регистра edx берется текущее значение этого элемента;
    • из регистра eax берется адрес текущего элемента первого массива;
    • происходит вычитание значения из регистра edx из значения по адресу из регистра eax;
    • если результат вычитания больше или равен нулю, то происходит инкремент значения по адресу из регистра eax, увеличенного на 4;
    • если результат вычитания меньше нуля, то происходит инкремент счетчика ecx;
    • после каждой итерации цикла происходит переход к следующей итерации.
  9. После окончания цикла программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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