daily pastebin goal
74%
SHARE
TWEET

Untitled

a guest Jun 14th, 2018 65 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <locale.h>
  3.  
  4. int main()
  5. {
  6.     setlocale(LC_ALL, "rus");
  7.     char x1, x2, x3;
  8.     printf("Введите набор значений {x1, x2, x3}\n");
  9.     scanf("%c %c %c", &x1, &x2, &x3);
  10.     __asm
  11.     {
  12.         //Строка в "C" выглядит так: символы + "\0" на конце
  13.         //Чтобы ассемблер мог проводить операции с этими записями, требуется убрать "\0"
  14.         mov al, x1; //раскладываем x1, x2, x3 по регистрам
  15.         mov bl, x2;
  16.         mov cl, x3;
  17.         sub al, '0'; //вычитаем 0, чтобы ассемблер мог проводить над х1 вычисления
  18.         sub bl, '0'; //вычитаем 0, чтобы ассемблер мог проводить над х2 вычисления
  19.         sub cl, '0'; //вычитаем 0, чтобы ассемблер мог проводить над х3 вычисления
  20.         cmp al, bl; //проверка на равенство первой и второй цифры
  21.         je a150; //если они равны, программа переходит к строке а150
  22.         jne a160; //если нет, то к строке а160
  23.     a150: mov dl, '1'; //кладём единицу в регистр dl
  24.         sub dl, '0'; //вычитаем "0", чтобы ассемблер мог проводить над dl вычисления
  25.         cmp cl, dl; //сравниваем 3-ю цифру с 1, чтобы при вычитании заменить её на 9
  26.         je a170; //равны -- выполняется а170
  27.         jne a180; //нет -- а180
  28.     a180: mov dl, '0'; //аналогичные действия с нулем
  29.         sub dl, '0';
  30.         cmp cl, dl; //проверка, является ли 3-я цифра 0, чтобы при вычитании заменить её на 8 (как требуется по заданию)
  31.         je a171; //ноль -- а171
  32.         jne a190; //нет -- а190
  33.     a170: mov cl, '9'; //аналогично прошлым цифрам вводим 9
  34.         sub cl, '0';
  35.         add cl, '0'; //прибавляем 0, чтобы восстановить читаемость для C
  36.         mov x3, cl; //перемещаем девятку в х3
  37.         add al, '0'; //прибавляем 0, чтобы восстановить читаемость для C
  38.         mov x1, al; //перемещаем из al в х1
  39.         add bl, '0'; //прибавляем 0, чтобы восстановить читаемость для C
  40.         mov x2, bl; //аналогично
  41.         jmp ex; //выход из програмы
  42.     a171:mov cl, '8'; //аналогчно 9, все также происходит, но вместо 9-ки на место х3 встаёт 8-ка
  43.         sub cl, '0';
  44.         add cl, '0';
  45.         mov x3, cl;
  46.         add al, '0';
  47.         mov x1, al;
  48.         add bl, '0';
  49.         mov x2, bl;
  50.         jmp ex;
  51.     a190: dec cl; //если у нас цифры больше 1, то вычитаем из них 2, как и требуется по заданию
  52.         dec cl;
  53.         add cl, '0'; //прибавляем 0, чтобы восстановить читаемость для С
  54.         mov x3, cl;
  55.         add al, '0';
  56.         mov x1, al;
  57.         add bl, '0';
  58.         mov x2, bl;
  59.         jmp ex; //выход
  60.     a160: add cl, '0'; //меняем местами цифры, восстанавливаем вид для С и перемещаем в регистры, как требуется по заданию
  61.         mov x3, cl;
  62.         add al, '0';
  63.         mov x2, al;
  64.         add bl, '0';
  65.         mov x1, bl;
  66.         jmp ex;
  67.     ex: nop; //nop -- команда ничего не делать
  68.     }
  69.     printf("Результат:\n");
  70.     printf("{%c %c %c}\n", x1, x2, x3);
  71.     return 0;
  72. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top