Переставить все числа в массиве в обратном порядке - Assembler

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

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

Как это можно реализовать? Вот что есть на данный момент
Листинг программы
  1. #include "stdafx.h"
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int _tmain(int argc, _TCHAR* argv[])
  7. {
  8. unsigned char s[] = { 'h','e','l','l','o' };
  9. unsigned char s_c[5];
  10. _asm {
  11. Mov cx, 5
  12. Mov eax, offset s[0]
  13. metka:
  14. ;???
  15. // Бежим по эл-там
  16. Add eax, 1
  17. loop metka
  18. }
  19. cout <<s[0];
  20. int a;
  21. cin>>a;
  22. return 0;
  23. }

Решение задачи: «Переставить все числа в массиве в обратном порядке»

textual
Листинг программы
  1. #include "stdafx.h"
  2. #include <iostream>
  3.  
  4. int main()
  5.     {
  6.         unsigned char s[5] = { 'h','e','l','l','o' };
  7.         unsigned char s_c[5];
  8.  
  9.         for (int i = 0; i < 5; i++)
  10.             std::cout << s[i] << " ";
  11.         std::cout << std::endl;
  12.  
  13.         _asm {
  14.             lea esi, s
  15.             lea edi, s_c
  16.             mov ecx,5
  17.             add edi,4
  18.     next:
  19.             mov al,[esi]
  20.             mov [edi],al
  21.             add esi,1
  22.             sub edi,1
  23.             loop next
  24.         }
  25.         for (int i = 0; i < 5; i++)
  26.             std::cout << s_c[i] << " ";
  27.         std::cout << std::endl;
  28.    
  29.     system("pause");
  30.     return 0;
  31. }

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

Вывод программы: h e l l o o l l e h В данном коде на языке ассемблера происходит перестановка элементов массива s в обратном порядке в массив s_c. Ассемблерный код выполняет следующие действия:

  1. lea esi, s — указывает на начало массива s в регистре esi.
  2. lea edi, s_c — указывает на начало массива s_c в регистре edi.
  3. mov ecx,5 - инициализирует счётчик цикла ecx равным 5.
  4. add edi,4 - добавляет к адресу массива s_c 4, сдвигая его на 4 байта вправо.
  5. mov al,[esi] — читает байт из массива s и сохраняет его в регистре al.
  6. mov [edi],al — записывает байт из регистра al в массив s_c по адресу, смещённому на ecx байтов влево от edi.
  7. add esi,1 - увеличивает значение регистра esi на 1, перемещая его на следующий элемент массива s.
  8. sub edi,1 - уменьшает значение регистра edi на 1, перемещая его на предыдущий элемент массива s_c.
  9. loop next — выполняет пункты с 5 по 8 для каждого из 5 элементов массива s.
  10. for (int i = 0; i < 5; i++) — цикл, выполняющий вывод элементов массива s_c.
  11. std::cout << s_c[i] << ; — вывод элемента массива s_c.
  12. std::cout << std::endl; — переход на новую строку. Остальные строки кода обеспечивают ввод, вывод и работу с пользовательским интерфейсом и не относятся к задаче перестановки элементов массива.

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


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

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

5   голосов , оценка 3.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы