Сформировать массив U, каждый элемент которого равен U(i)=X(i)+Y(i)+Z(i) - Assembler

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

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

Есть массивы x,y,z одинаковой длины n.сформировать массив u каждый элемент котрого равен u(i)=x(i)+y(i)+z(i).Так же имеется листинг программы на с++.Помогите пожалуйста написать код на ассемблере.

Решение задачи: «Сформировать массив U, каждый элемент которого равен U(i)=X(i)+Y(i)+Z(i)»

textual
Листинг программы
.486
.model flat, stdcall
option casemap :none
 
include \masm32\include\windows.inc
 
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
 
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
 
.data
x db 1,2,3,4,5,6,7,8,9,10
y db 5,1,0,3,2,2,1,8,0,3
z db 1,1,1,1,1,1,1,1,1,1
u db 10 dup(0)
 
sizeArray dd 10
format db '%d ',0h
szMsgBoxTitleA  db      'Array', 0h
 
.data?
buffer db 1024 dup(?)
 
.code
 
Print   proc    uses    eax ebx ecx esi         iSize:dword, lpArray:dword
        mov     esi,    [lpArray]
        mov     ecx,    [iSize]
        lea     edi,    [buffer]
        @@for:
                lodsb
                cbw
                cwde
                push    ecx
                push    esi
                push    edi
                invoke  wsprintf, edi, ADDR format, eax
                pop     edi
                pop     esi
                pop     ecx
                add     edi,    eax
        loop    @@for
 
        invoke  MessageBox, 0h, ADDR buffer, ADDR szMsgBoxTitleA, 0h
 
        ret
Print   endp
 
start:
lea esi,[x]
lea ebx, [y]
lea edx, [z]
lea edi, [u]
mov ecx, sizeArray
M5:
    lodsb             
    add eax,[ebx] 
    add eax,[edx] 
    stosb           
    inc ebx 
    inc edx
    loop M5
     
invoke Print,[sizeArray], addr u
invoke  ExitProcess, 0
 
end start

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

  1. Описание переменной x, y, z, u:
    • x, y, z, u - массивы байтов (db), в которых хранятся значения для обработки.
    • x содержит список чисел от 1 до 10.
    • y содержит список чисел от 5 до 0, за исключением 4 последовательных нулей.
    • z содержит 10 одинаковых единиц.
    • u - массив, в котором будут храниться результаты обработки.
  2. Описание процедур и функций:
    • Print - функция, которая принимает два параметра: iSize (размер массива) и lpArray (адрес массива). В этой функции происходит обработка массива и вывод результата в диалоговое окно.
    • wsprintf - функция форматирования строки из Windows API, используется для форматирования чисел в строку.
    • MessageBox - функция из Windows API, используется для вывода диалогового окна с сообщением.
    • ExitProcess - функция из Windows API, используется для завершения работы программы.
  3. Описание кода:
    • Код начинается с определения сегментов и модели.
    • Затем подключаются необходимые библиотеки и заголовочные файлы.
    • Далее идет определение переменных и массивов.
    • После этого идет определение функции Print, которая обрабатывает массив и выводит результат в диалоговое окно.
    • Затем идет определение точки входа в программу start.
    • В блоке start происходит инициализация указателей на массивы x, y, z, u.
    • Затем идет основной цикл, который обрабатывает элементы массива x, y, z и записывает результаты в массив u.
    • После завершения цикла вызывается функция Print для вывода результата.
    • В конце программы вызывается функция ExitProcess для завершения работы программы.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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