Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <locale.h>
- main()
- {
- int n;
- char x, z;
- short y, v_c, v_as, v_true;
- setlocale(LC_ALL, "RUS");
- printf("Введите номер теста (1 или 2)\t");
- scanf("%d", &n);
- switch (n)
- {
- case 1://первый тест
- {
- x = -0x2;
- y = 0x1;
- z = 0x4;
- v_true = -0x1;
- }
- break;
- case 2://второй тест
- {
- x = -0x7E;
- y = 0x6000;
- z = 0x7D;
- v_true = -0x60C0;
- }
- break;
- }
- v_c = (-2 + y*(x - 3)) / (z + 3);//вычисление v в СИ
- _asm//вычисление v в ассемблере
- {
- mov AL, x;//в al - x
- cbw;//в ax - x
- sub AX, 3;//в ax x-3
- imul y;//в dx:ax y*(x-3)
- sub ax, 2;//в ax -2+y*(x-3)
- adc DX, 0;// -2+y(x-3)
- xchg BX, AX;//временно меняем местами ах и bx v = ———————
- mov AL, z;//в al z z+3
- cbw;//в ax z
- add AX, 3;//в ax z-3
- xchg AX, BX;//обратно меняем ax и bx
- idiv BX;//делим числитель на знаменатель
- mov v_as, AX;//возвращаем v в v_as
- }
- printf("\nTrue:%s%xh", v_true<0 ? "-" : "", v_true<0 ? -(unsigned)v_true : v_true);
- printf("\nC:%s%xh", v_c<0 ? "-" : "", v_c<0 ? -(unsigned)v_c : v_c);
- printf("\nAssembler:%s%xh\n", v_as<0 ? "-" : "", v_as<0 ? -(unsigned)v_as : v_as);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement