VEndymionV

Kolokwium ASK

Dec 6th, 2017
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Zadanie 1:
  2.  
  3. Instrukcje z których można korzystać:
  4. MOV A, B - kopiuje B do A
  5. SHL A, B - przesuwa wszystkie bity A w lewo o ilość bitów zdefiniowaną przez B
  6. SHR A, B - przesuwa wszystkie bity A w prawo o ilość bitów zdefiniowaną przez B
  7. ADD A, B - sumuje A i B, wynik przechowuje w A
  8. JZ etykieta - skok do etykiety jeżeli zero (ZF=1)
  9. JNZ etykieta - skok do etykiety jeżeli nie zero (ZF=0)
  10. POP A - zdejmuje ze szczytu stosu wartość i kopiuje ją do A
  11. PUSH A - umieszcza A na szczycie stosu
  12.  
  13.     C:
  14.     if (we == 0x7E) // 0x7E = 0111 1110
  15.         wy = 0;
  16.     else
  17.         wy = 1;
  18. -------------------------------------------------------------------------
  19.     Assembler:
  20.     mov al, we // Wrzucam we na rejestr al (8 bitowy bo char to zmienna 8 bitowa)
  21.     mov bl, 0 // Wrzucam 0 na rejestr bl
  22.     add al, 0x82 // Zamieniam liczbę 0x7E na liczbę ujemną - neguje oraz dodaje 1: 0x82 = 1000 0010
  23.     jz etykieta1 // Jeżeli zero to skaczę do etykiety1 (liczby są sobie równe)
  24.     add bl, 1 // Wrzucam 1 na rejestr bl gdy liczby nie są sobie równe
  25.     etykieta1:
  26.     mov wy, bl // Zawartość rejestru przerzucam do zmiennej wy (0 lub 1)
  27. =========================================================================
  28. Zadanie 2:
  29.  
  30. Instrukcje z których można korzystać:
  31. MOV
  32. SHL
  33. SHR
  34. ADD
  35. JC etykieta - skok jeśli jest przeniesienie (CF=1)
  36. JNC etykieta - skok jeśli nie ma przeniesienia (CF=0)
  37. CLC - ustawia falgę CF na 0
  38.  
  39.     C:
  40.     unsigned char we, wy;
  41.     if (we < 0xCF)
  42.         wy = 0;
  43.     else
  44.         wy = 1;
  45.        
  46.     //0CFh = 1100 1111
  47.     //31h = 0011 0001
  48. ------------------------------------------------------------------------
  49.     Assembler:
  50.     CLC
  51.     MOV al, 0
  52.     ADD we, 0x31
  53.     JC etykieta
  54.     JMP etykieta2
  55.     etykieta:
  56.     MOV al, 1
  57.     etykieta2:
  58.     MOV wy, al
  59.     // W skrócie: dodaje liczby do siebie i sprawdzam przeniesienie, jak wystąpiło to liczba jest większa
  60. ===========================================================================
  61. Zadanie 3:
  62.  
  63. Instrukcje z których można korzystać:
  64. MOV
  65. SHL
  66. SHR
  67. SUB
  68. JZ
  69. JNZ
  70. POP
  71. PUSH
  72.  
  73.     C:
  74.     unsigned char we;
  75.     unsigned short wy;
  76.     wy = we * 24;
  77.     we * 24 = we(32 - 8)
  78. ------------------------------------------------------------------
  79.     Assembler:
  80.     MOV ax, 0 // zeruje ax
  81.     MOV al, we // al = we
  82.     SHL ax, 5 // ax = we * 32
  83.  
  84.     MOV dx, 0 // zeruje dx
  85.     MOV dl, we // dl = we
  86.     ; Chce pomnożyć przez 24 a mnożę przez 32, muszę teraz od ax odjąć we * 8 (pomnożyłem o 8 za dużo)
  87.     SHL dx, 3 // dl = we * 8
  88.  
  89.     SUB ax, dx // (we * 32) - (we * 8) = we * 24
  90.     MOV wy, ax
  91. ===================================================================
  92. Zadanie 4:
  93.  
  94.     C:
  95.     unsigned short we, wy
  96.     wy = we * 2.625;
  97.     // we * 2.625 = we * (2 + 5/8) = we * (2 + 1/2 + 1/8)
  98. -------------------------------------------------------------------
  99.     Assembler:
  100.     mov ah, 0
  101.     mov bh, 0
  102.     mov ch, 0
  103.     mov al, we
  104.     shl ax, 1 // we * 2
  105.     mov bl, we
  106.     shl bx, 2 // we * 4
  107.     mov cl, we
  108.     add bx, cx // we * 4 + we = we * 5
  109.     shr bx, 3 // 5/8
  110.     add ax, bx //
  111.     mov wy, ax
  112. ===================================================================
  113. Zadanie 5:
  114.  
  115. Instrukcje z których można korzystać:
  116. MOV
  117. SHL
  118. SHR
  119. SUB
  120. ADD
  121. AND
  122. SAR
  123.  
  124. SUMA ZER
  125. -------------------------------------------------------------------
  126.     Assembler:
  127.     mov dl, 0
  128.     mov cl, 0
  129.     petla:
  130.     mov bl, 8
  131.     mov al, we
  132.     shr al, cl
  133.     and al, 0x1
  134.     add dl, al
  135.     add cl, 1
  136.     sub bl, cl
  137.     jz koniec
  138.     jmp petla
  139.     koniec:
  140.     mov bl, 8
  141.     sub bl, dl
  142.     mov suma_zer, bl
  143. ====================================================================
  144. SUMA JEDYNEK
  145. --------------------------------------------------------------------
  146.     Assembler:
  147.     mov dl, 0
  148.     mov cl, 0
  149.     petla:
  150.     mov bl, 8
  151.     mov al, we
  152.     shr al, cl
  153.     and al, 0x1
  154.     add dl, al
  155.     add cl, 1
  156.     sub bl, cl
  157.     jz koniec
  158.     jmp petla
  159.     koniec:
  160.     mov suma_jedynek, dl
  161. ====================================================================
  162. Zadanie 6:
  163.  
  164.     C:
  165.     typedef union
  166.     {
  167.         unsigned char BYTE;
  168.         struct
  169.         {
  170.             unsigned char a:2;
  171.             unsigned char b:3;
  172.             unsigned char c:3;
  173.         } bits;
  174.     } un_x;
  175.      
  176.     un_x a = 0x5F;
  177.     a.bits.c = a.bits.a;
  178.     a.bits.b = a.bits.a;
  179. ---------------------------------------------------------------------
  180.     Assembler:
  181.     mov al, byte
  182.     and al, 0x3 ; al=a
  183.     mov bl, al
  184.     shl bl, 2
  185.     mov cl, al
  186.     shl cl, 5
  187.     or cl, bl
  188.     or cl, al
  189.     mov wy, cl
  190. ======================================================================
  191. Zadanie 7:
  192.  
  193.     C:
  194.     typedef union
  195.         {
  196.             unsigned char BYTE;
  197.             struct
  198.             {
  199.                 unsigned char a:2;
  200.                 unsigned char b:3;
  201.                 unsigned char c:3;
  202.             } bits;
  203.         } un_x;
  204.          
  205.         un_x a = 0x5F;
  206.        
  207.         a.bits.c = a.bits.a * a.bits.b;
  208. ----------------------------------------------------------------------
  209.     Assembler:
  210.     mov al, a
  211.     and al, 0x1F
  212.     mov bl, al
  213.     and bl, 1 ; a = ?
  214.     JZ etykieta
  215.     mov bl, al ; b = ?
  216.     and bl, 0x0E
  217.     shl bl, 3
  218.     or al, bl
  219.      
  220.     etykieta:
  221.     mov wy, al
  222. =======================================================================
Advertisement
Add Comment
Please, Sign In to add comment