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

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


textual

Код к задаче: «Поменять числа местами - Assembler»

 mov al,a
 lea bx,b
 xchg al,[bx]
 mov a,al

СДЕЛАЙТЕ РЕПОСТ

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



Похожие ответы
  1. Не могу понять почему не работает правильно этот код

  1. Помогите найти ошибку. Все компилируется, но при запуске вылетает с ошибкой.

  1. Для всех заданий входные данные передаются в подпрограмму через стек, а результат возвращается через регистр AL. Для массивов входными данными являются адрес массива и число элементов в нем

  1. Ввести два 16-битовых целых числа А и В. Вычислить значение выражения: А^3 - В^2. Программа 1. Передача параметров через регистр. Тип процедуры – дальний. Программа 2. Передача параметров через глобальные переменные. Тип процедуры – дальний. Программа 3. Передача параметров через стек. Тип процедуры – ближний. В общем, начал я с первой задачи, но, так как рука не набита, не могу разобраться, как грамотно исполнить программу. В командной строке при запуске мной созданной программы выгружается бесконечный цикл символов. Собственно сам листинг:

  1. Перевод числа из десятичной формы (<255) в прописную Написать программу, которая вводит и и записывает(выводит)однобайтовое целое число без знака прописью, например 128 = сто двадцать восемь. Был бы рад любой помощи, он полной до частичной, а иначе меня ждет призыв летний в армию. Думаю разницы нет, но компилировать могу в FASM. И EMY8086.

  1. Задано целое беззнаковое число Х<65536. Определить, есть ли в записи числа цифра, равная среднему арифметическому остальных цифр? Входное значение - число без знака длиной в слово – должно вводиться с клавиатуры. Результат работы – найденная цифра или соответствующее сообщение - необходимо вывести на экран. Обмен информацией с пользователем организовать в виде специальных сообщений, каждое из которых следует размещать в отдельной строке экрана.

  1. Народ, нужна помощь! Задача такая. Найти все четырёхзначные десятичные числа, у которых сумма первых двух цифр в два раза больше суммы правых двух цифр. Результат вывести в файл. Я сделал программу с выводом на экран, но не получается переделать под файл, если кто может помогите, пожалуйста исправить программу, чтобы результат выводился в файл. Так как я только начинаю изучать, поэтому может чего-то не понимаю.

  1. Нужно написать программу, которая переводит число в римские цифры. Программа должна содержать макрос (! вот с ним особая проблема!) и должна быть в 16рязрядном режиме (сейчас она далеко не в нем)

  1. Подсчитать число единиц во всех разрядах заданного двоичного числа Х(вес) методом исключения единиц. Написать на паскале с ассемблерной вставкой!!!