Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <locale.h>
- int main()
- {
- setlocale(LC_ALL, "rus");
- char x1, x2, x3;
- printf("Введите набор значений {x1, x2, x3}\n");
- scanf("%c %c %c", &x1, &x2, &x3);
- __asm
- {
- //Строка в "C" выглядит так: символы + "\0" на конце
- //Чтобы ассемблер мог проводить операции с этими записями, требуется убрать "\0"
- mov al, x1; //раскладываем x1, x2, x3 по регистрам
- mov bl, x2;
- mov cl, x3;
- sub al, '0'; //вычитаем 0, чтобы ассемблер мог проводить над х1 вычисления
- sub bl, '0'; //вычитаем 0, чтобы ассемблер мог проводить над х2 вычисления
- sub cl, '0'; //вычитаем 0, чтобы ассемблер мог проводить над х3 вычисления
- cmp al, bl; //проверка на равенство первой и второй цифры
- je a150; //если они равны, программа переходит к строке а150
- jne a160; //если нет, то к строке а160
- a150: mov dl, '1'; //кладём единицу в регистр dl
- sub dl, '0'; //вычитаем "0", чтобы ассемблер мог проводить над dl вычисления
- cmp cl, dl; //сравниваем 3-ю цифру с 1, чтобы при вычитании заменить её на 9
- je a170; //равны -- выполняется а170
- jne a180; //нет -- а180
- a180: mov dl, '0'; //аналогичные действия с нулем
- sub dl, '0';
- cmp cl, dl; //проверка, является ли 3-я цифра 0, чтобы при вычитании заменить её на 8 (как требуется по заданию)
- je a171; //ноль -- а171
- jne a190; //нет -- а190
- a170: mov cl, '9'; //аналогично прошлым цифрам вводим 9
- sub cl, '0';
- add cl, '0'; //прибавляем 0, чтобы восстановить читаемость для C
- mov x3, cl; //перемещаем девятку в х3
- add al, '0'; //прибавляем 0, чтобы восстановить читаемость для C
- mov x1, al; //перемещаем из al в х1
- add bl, '0'; //прибавляем 0, чтобы восстановить читаемость для C
- mov x2, bl; //аналогично
- jmp ex; //выход из програмы
- a171:mov cl, '8'; //аналогчно 9, все также происходит, но вместо 9-ки на место х3 встаёт 8-ка
- sub cl, '0';
- add cl, '0';
- mov x3, cl;
- add al, '0';
- mov x1, al;
- add bl, '0';
- mov x2, bl;
- jmp ex;
- a190: dec cl; //если у нас цифры больше 1, то вычитаем из них 2, как и требуется по заданию
- dec cl;
- add cl, '0'; //прибавляем 0, чтобы восстановить читаемость для С
- mov x3, cl;
- add al, '0';
- mov x1, al;
- add bl, '0';
- mov x2, bl;
- jmp ex; //выход
- a160: add cl, '0'; //меняем местами цифры, восстанавливаем вид для С и перемещаем в регистры, как требуется по заданию
- mov x3, cl;
- add al, '0';
- mov x2, al;
- add bl, '0';
- mov x1, bl;
- jmp ex;
- ex: nop; //nop -- команда ничего не делать
- }
- printf("Результат:\n");
- printf("{%c %c %c}\n", x1, x2, x3);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement