Поменять числа местами - Assembler

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

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

Здравствуйте, суть программы состоит в том, что вводятся 2 числа(byte) и нужно 4 различными способами поменять их местами. В LabeledEdit1 вводится первое число, В LabeledEdit2 вводится второе число, BitBtn для использования нужного способа, интерефейс пока не отладил должным способом, прошу не придираться. В данный момент написал только 2 работающих способа, 3й(через stack)способ через не могу отладить, до 4го пока не додумался, может кто-нибудь дать наводку как можно поменять 4ым(не через дополнительную переменную) способом? Используется встроенный asm на Delphi. Так же если у Вас имеются предложения по оптимизации готовых способов - готов выслушать.
Листинг программы
  1. procedure TForm1.BitBtn1Click(Sender: TObject);
  2. var
  3. a,b:byte;
  4. begin
  5. a:=strtoint(form1.LabeledEdit1.text);
  6. b:=strtoint(form1.LabeledEdit2.text);
  7. asm
  8. mov al,a
  9. mov bl,b
  10. xchg al,bl
  11. mov a,al
  12. mov b,bl
  13. end;
  14. form1.LabeledEdit1.text:=inttostr(a);
  15. form1.LabeledEdit2.text:=inttostr(b);
  16. end;
  17. procedure TForm1.BitBtn2Click(Sender: TObject);
  18. var
  19. a,b:byte;
  20. begin
  21. a:=strtoint(form1.LabeledEdit1.text);
  22. b:=strtoint(form1.LabeledEdit2.text);
  23. asm
  24. mov al,a
  25. mov bl,b
  26. add al,bl
  27. sub bl,al
  28. neg bl
  29. sub al,bl
  30. mov a,al
  31. mov b,bl
  32. end;
  33. form1.LabeledEdit1.text:=inttostr(a);
  34. form1.LabeledEdit2.text:=inttostr(b);
  35. end;
  36. procedure TForm1.BitBtn3Click(Sender: TObject);
  37. var
  38. a,b:byte;
  39. begin
  40. a:=strtoint(form1.LabeledEdit1.text);
  41. b:=strtoint(form1.LabeledEdit2.text);
  42. asm
  43. pushad
  44. mov al,a
  45. mov bl,b
  46. push al
  47. push bl
  48. pop al
  49. pop bl
  50. mov a,al
  51. mov b,bl
  52. popad
  53. end;
  54. form1.LabeledEdit1.text:=inttostr(a);
  55. form1.LabeledEdit2.text:=inttostr(b);
  56. end;

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

textual
Листинг программы
  1.  mov al,a
  2.  lea bx,b
  3.  xchg al,[bx]
  4.  mov a,al

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

  1. Создается переменная a со значением, которое нужно поменять местами с другой переменной.
  2. Создается переменная b, которая указывает на адрес, где находится значение, с которым нужно поменять a местами.
  3. Происходит обмен значений между регистром al и значением, на которое указывает bx. То есть, значение переменной a сохраняется в регистре al, а значение из ячейки памяти, на которую указывает bx, записывается в переменную a.
  4. Значение из регистра al (которое до обмена было в переменной a) записывается обратно в переменную a. Теперь значения переменных поменялись местами.

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


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

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

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

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

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

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