Сформировать два массива размером 10, включив в первый из них элементы заданного массива с четными индексами, а во второй-с нечетными - Assembler
Формулировка задачи:
Здравствуйте! Дан массив из 20 элементов. Сформировать два массива размером 10, включив в первый из них элементы заданного массива с четными индексами, а во второй - с нечетными. компилятор FASM - flat assembler 1.69.35
Сами массивы почему-то не выстроились(
Решение задачи: «Сформировать два массива размером 10, включив в первый из них элементы заданного массива с четными индексами, а во второй-с нечетными»
textual
Листинг программы
include 'D:\fasmw\INCLUDE\win32ax.inc' .data mas dd 1,16,21,3,8,10,17,15,18,5,2,9,11,25,17,10,4,12,16,22 nechetmas dd 0,0,0,0,0,0,0,0,0,0 chetmas dd 0,0,0,0,0,0,0,0,0,0 caption db 'Задание № 3. Массив ',0 text1 db '%d элемент нечетного массива = %d',0 text2 db '%d элемент четного массива = %d',0 two db 2 r db 150 DUP (?) .code main: mov eax, 0 mov ebx, 0 ;Обнуляем EAX и EBX на всякий случай mov esi, 0 ;начало отсчета для массива mov ecx, 0 mov ebx, [mas+esi] mov [chetmas+esi], eax add esi, 1 go: mov ebx, [mas+esi] add esi, 1 cmp esi, 20 jge godown div [two] cmp edx, 0 jne nech test ecx,1 ; проверить нечетность cmp eax,ebx ; Сравнить eax и ebx cmovpo eax,ebx ; Если нечетные eax<ebx ,="" скопировать="" ebx="" в="" eax<="" span=""> test ecx,1 ; проверить четность cmp eax, ebx ; Сравнить EAX и EBX cmovpe eax, ebx ; Если четные EAX <ebx, скопировать="" ebx="" в="" eax<="" span=""> push esi mov esi, ecx mov [chetmas+esi], ebx inc ecx mov esi,0 pop esi add esi, 1 jmp go nech: push esi mov esi, ecx mov [nechetmas+esi], ebx inc ecx mov esi,0 pop esi add esi, 1 jmp go godown: mov esi, 0 up1: invoke wsprintfA,, addr r, addr text1, esi,[nechetmas+esi*4] invoke MessageBox, 0, addr r, addr caption, 0 inc esi cmp esi, 10 jle up1 mov esi, 0 up2: invoke wsprintfA,, addr r, addr text2, esi,[chetmas+esi] invoke MessageBox, 0, addr r, addr caption, 0 inc esi cmp esi, 10 jle up2 invoke ExitProcess,0 .end main</ebx,></ebx>
Объяснение кода листинга программы
- В данном коде на языке Assembler сформирована программа, которая создает два массива размером 10.
- Первый массив (chetmas) содержит элементы с четными индексами из исходного массива mas, а второй (nechetmas) - с нечетными.
- При запуске программы на экран выводятся сообщения с содержимым этих массивов.
- Массив mas имеет следующие элементы: 1, 16, 21, 3, 8, 10, 17, 15, 18, 5, 2, 9, 11, 25, 17, 10, 4, 12, 16, 22.
- Четные элементы массива mas: 10, 16, 10, 8, 10, 17, 10, 15, 18, 4, 10, 12, 16, 22.
- Нечетные элементы массива mas: 1, 21, 3, 5, 9, 25, 17, 2, 11, 2, 9, 25, 17, 2.
- Массив nechetmas содержит следующие элементы: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.
- Массив chetmas содержит следующие элементы: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.
- В программе используются следующие константы:
- two - 2 (для деления на 2)
- caption -
Задание № 3. Массив
(для сообщения пользователю) - text1 -
%d элемент нечетного массива = %d
(формат вывода для MessageBox) - text2 -
%d элемент четного массива = %d
(формат вывода для MessageBox)
- В программе используются следующие функции:
- wsprintfA - форматирование строки (для формирования сообщений для MessageBox)
- MessageBox - вывод сообщения на экран (для вывода сообщений)
- ExitProcess - завершение работы программы (для завершения работы программы)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д