Первый четный элемент одномерного массива переставить в конец массива - Assembler

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

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

Вот к примеру задание: Первый четный элемент одномерного массива нужно переставить в конец массива. Тест: 1 2 6 7 3 Результат: 1 6 7 3 2 Я не знаю как делаются сдвиги. Буду очень рад, если поможете разобраться. Заранее Благодарю.

Решение задачи: «Первый четный элемент одномерного массива переставить в конец массива»

textual
Листинг программы
        lea     esi,[ach];знаешь
        mov     ecx,[qach];тоже знаешь
mFindEven:
        test    [esi],1;проверка младшего бита [esi] на 1
        jz      mEx;переход на метку если младший бит [esi] есть 0
        inc     esi;знаешь
        loop    mFindEven;наверное знаешь, раз ничего про это не написал
mEx:
 
        mov     al,[esi];знаешь
        mov     edi,esi;знаешь
        inc     esi;знаешь
        dec     ecx;знаешь
        cld;сброс флага направления в 0 чтобы цепочечная команда производила инкремент esi и edi
        rep     movsb;копируем из [esi] в [edi]
        mov     [edi],al;знаешь

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

Предположительно, код выполняет следующие действия:

  1. Задаются значения двух регистров: ESI и ECX.
  2. ESI указывает на первый элемент массива, а ECX указывает на количество элементов в массиве.
  3. Происходит проверка младшего бита элемента в ESI. Если он равен 1, то происходит переход к метке mEx.
  4. Если младший бит равен 0, то происходит инкремент ESI и повторная проверка.
  5. Если младший бит равен 1, то происходит копирование элемента из ESI в EDI и инкремент обоих регистров.
  6. Затем происходит уменьшение значения ECX на единицу и повторная проверка условия.
  7. Процесс повторяется до тех пор, пока ECX не станет равным нулю.
  8. Копирование происходит с помощью команды rep movsb, которая копирует символ из памяти в память до тех пор, пока флаг направления не станет равным 1.
  9. После копирования происходит сохранение первого байта в EDI в [EDI]. Список действий:
  10. Задаются значения ESI и ECX.
  11. Происходит проверка младшего бита элемента в ESI.
  12. Инкремент ESI и повторная проверка.
  13. Копирование элемента из ESI в EDI и инкремент обоих регистров.
  14. Уменьшение значения ECX на единицу и повторная проверка.
  15. Процесс повторяется до тех пор, пока ECX не станет равным нулю.
  16. Копирование происходит с помощью команды rep movsb.
  17. После копирования происходит сохранение первого байта в EDI в [EDI].

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


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

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

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