Ассемблер. Сложение шестнадцатиричных чисел\вычитание двоичных - 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.
Решение задачи: «Ассемблер. Сложение шестнадцатиричных чисел\вычитание двоичных»
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.
Объяснение кода листинга программы
- Программа называется
RaznostMassivov
. - В программе объявлены следующие переменные: a1: массив из N элементов типа longint; a2: массив из N элементов типа longint; c: longint; p: указатель; i: целочисленный тип; p2: указатель;
- Пользователю предлагается ввести элементы двух массивов.
- Затем выводится введенный массив №1, затем массив №2.
- После этого программа переходит к ассемблерному блоку кода.
- В ассемблерном блоке кода используется регистр eax для хранения адреса первого элемента первого массива и ecx для хранения счетчика.
- Используется цикл, который выполняется до тех пор, пока счетчик ecx не станет равным N.
- На каждой итерации цикла происходит следующее:
- из регистра ebx берется адрес текущего элемента второго массива;
- из регистра edx берется текущее значение этого элемента;
- из регистра eax берется адрес текущего элемента первого массива;
- происходит вычитание значения из регистра edx из значения по адресу из регистра eax;
- если результат вычитания больше или равен нулю, то происходит инкремент значения по адресу из регистра eax, увеличенного на 4;
- если результат вычитания меньше нуля, то происходит инкремент счетчика ecx;
- после каждой итерации цикла происходит переход к следующей итерации.
- После окончания цикла программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д