Сформировать два массива размером 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>

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

  1. В данном коде на языке Assembler сформирована программа, которая создает два массива размером 10.
  2. Первый массив (chetmas) содержит элементы с четными индексами из исходного массива mas, а второй (nechetmas) - с нечетными.
  3. При запуске программы на экран выводятся сообщения с содержимым этих массивов.
  4. Массив mas имеет следующие элементы: 1, 16, 21, 3, 8, 10, 17, 15, 18, 5, 2, 9, 11, 25, 17, 10, 4, 12, 16, 22.
  5. Четные элементы массива mas: 10, 16, 10, 8, 10, 17, 10, 15, 18, 4, 10, 12, 16, 22.
  6. Нечетные элементы массива mas: 1, 21, 3, 5, 9, 25, 17, 2, 11, 2, 9, 25, 17, 2.
  7. Массив nechetmas содержит следующие элементы: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.
  8. Массив chetmas содержит следующие элементы: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.
  9. В программе используются следующие константы:
    • two - 2 (для деления на 2)
    • caption - Задание № 3. Массив (для сообщения пользователю)
    • text1 - %d элемент нечетного массива = %d (формат вывода для MessageBox)
    • text2 - %d элемент четного массива = %d (формат вывода для MessageBox)
  10. В программе используются следующие функции:
    • wsprintfA - форматирование строки (для формирования сообщений для MessageBox)
    • MessageBox - вывод сообщения на экран (для вывода сообщений)
    • ExitProcess - завершение работы программы (для завершения работы программы)

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


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

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

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