1. Proszę wypisać i omówić sposoby reprezentacji liczb całkowitych ze znakiem oraz ich zakresy na przykładzie liczb 4-bitowych.

  1. Jaki będzie rezultat końcowy (oraz pośrednie) następującego ciągu instrukcji:

  2. MOV AL, 10101010b

    AND AL, 01111111b

    OR AL, 00000001b

    EXOR AL, 01111111b

    Należy podać wyniki w postaci binarnej w kolumnie po prawej stronie.

    1. Jaki będzie rezultat końcowy (oraz pośrednie) następującego ciągu instrukcji:

    2. MOV AL, 130

      SHR AL, 1

      SHR AL, 1

      SHL AL, 3

      Należy podać wyniki w postaci binarnej oraz dziesiętnej, jak również wartość flagi przeniesienia C.

      1. Proszę podać różnicę pomiędzy następującymi instrukcjami:

        1. NOT AX

        2. NEG AB

      1. Przykład na wykładzie. Proszę wypełnić prawidłowo poniższą tabelę dotyczącą funkcji flag statusowych procesora 80x86 po operacjach ALU, zgodnie z opisem:

      1 - flaga zostanie ustawiona

      0 - flaga zostanie skasowana

      x - nie można określić wartości na podstawie przedstawionych danych

      opis

      ZF

      CF

      SF

      wynik operacji =0

      wynik operacji <>0

      pożyczka przy odejmowaniu

      przeniesienie przy dodawaniu

      wynik operacji <0

      wynik operacji >=0

      1. Proszę podać, czy skok warunkowy zostanie w takim przypadku wykonany?


      MOV AX,10

      SUB AX,20

      JC ETYKIETA

      MOV AX,01010100b

      AND AX,01000000b

      JNZ ETYKIETA

      MOV AL,10

      ADD AL,246

      JC ETYKIETA

      MOV AL,10

      ADD AL,246

      JZ ETYKIETA

      MOV AL,10

      SUB AL,11

      JS ETYKIETA

      MOV AL,-128

      ADD AL,127

      JS ETYKIETA


      1. Która z poniższych instrukcji powoduje zapisanie do rejestru AX liczby z komórki pamięci 0x1000?

        1. MOV 0x1000,AX

        2. MOV AX, 0x1000

        3. MOV [AX],0x1000

        4. MOV AX,[0x1000]

      8. Wykonanć dodawanie a:=a+100

      1. CISC (Intel)

      2. RISC

      zmienna `a' zdefiniowana 32-bity U2

      Sprawdzić stan bitu nr 7 w rejestrze EBX i wykonac skok do etykiety JEDEN jesli bit jest ustawiony

      9. Wykonać działanie na liczbach 32-bitowych

      signed int: a,b; //C++

      a=max(a,b);

      unsigned int: a,b; //C++

      a=max(a,b);

      10. Wykonać działanie na liczbach integer (32-bitowych ze znakiem w kodzie u2)

      var a,i:integer;

      if i<10 then

      a:=i

      else

      a:=10;

      Rozwiązanie Intel:

      mov eax,[i]

      cmp eax,10

      jle omin

      mov eax,10

      omin: mov [a],eax

      Rozwiązanie: Hipotetyczny procesor Intel z przedrostkiem warunkującym wykonanie instrukcji (tak jak w procesorach ARM)

      mov eax,[i]

      cmp eax,10

      if NLE mov eax,10

      mov [a],eax

      Uwaga: Działanie opisane powyższym algorytmem nazywa się obcinaniem zakresu (nasycaniem). W procesorach DSP często występuje instrukcja CLIP, która wykonuje to w jednym cyklu!

      11. Sprawdzić, czy wynik dodawania Y:=a+b (liczby integer) nie spowodowała przepełnienia na dodatniej wartości. W taki przypadku należy ustalić wynik na maksymalnie dużej dla liczb integer dodatniej wartości.

      Przepełnienie wskazywane jest flagą OF.

      Rozwiązanie:

      mov eax,[a]

      add eax,[b]

      jno omin

      mov eax, 7fffffffh

      omin: mov [y],eax

      Uwaga: W procesorach DSP występuje tryb pracy jednostki ALU z nasycaniem wyniku, gdzie powyższa operacja wykonuje się automatycznie.

      12. Ustawić bit nr 3 w rejestrze I/O o adresie 200, nie zmieniając stanu innych bitów.

      in AL,200

      or AL, 00001000b

      out 200,AL