Advertisement
Glebzok

2 Assembler Lab (final)

Dec 14th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.42 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <locale.h>
  3.  
  4. main()
  5. {
  6.     int n;
  7.     char x, z;
  8.     short y, v_c, v_as, v_true;
  9.     setlocale(LC_ALL, "RUS");
  10.  
  11.     printf("Введите номер теста (1 или 2)\t");
  12.     scanf("%d", &n);
  13.     switch (n)
  14.     {
  15.     case 1://первый тест
  16.     {
  17.         x = -0x2;
  18.         y = 0x1;
  19.         z = 0x4;
  20.         v_true = -0x1;
  21.     }
  22.     break;
  23.     case 2://второй тест
  24.     {
  25.         x = -0x7E;
  26.         y = 0x6000;
  27.         z = 0x7D;
  28.         v_true = -0x60C0;
  29.     }
  30.     break;
  31.     }
  32.     v_c = (-2 + y*(x - 3)) / (z + 3);//вычисление v в СИ
  33.     _asm//вычисление v в ассемблере
  34.     {
  35.         mov AL, x;//в al - x
  36.         cbw;//в ax - x
  37.         sub AX, 3;//в ax x-3
  38.         imul y;//в dx:ax y*(x-3)
  39.         sub ax, 2;//в ax -2+y*(x-3)                      
  40.         adc DX, 0;//                                           -2+y(x-3)
  41.         xchg BX, AX;//временно меняем местами ах и bx       v = ———————
  42.         mov AL, z;//в al z                                        z+3
  43.         cbw;//в ax z
  44.         add AX, 3;//в ax z-3
  45.         xchg AX, BX;//обратно меняем ax и bx
  46.         idiv BX;//делим числитель на знаменатель
  47.         mov v_as, AX;//возвращаем v в v_as
  48.     }
  49.    
  50.     printf("\nTrue:%s%xh", v_true<0 ? "-" : "", v_true<0 ? -(unsigned)v_true : v_true);
  51.     printf("\nC:%s%xh", v_c<0 ? "-" : "", v_c<0 ? -(unsigned)v_c : v_c);
  52.     printf("\nAssembler:%s%xh\n", v_as<0 ? "-" : "", v_as<0 ? -(unsigned)v_as : v_as);
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement