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