Proszę wypisać i omówić sposoby reprezentacji liczb całkowitych ze znakiem oraz ich zakresy na przykładzie liczb 4-bitowych.
Jaki będzie rezultat końcowy (oraz pośrednie) następującego ciągu instrukcji:
MOV AL, 10101010b |
|
AND AL, 01111111b |
|
OR AL, 00000001b |
|
EXOR AL, 01111111b |
|
Należy podać wyniki w postaci binarnej w kolumnie po prawej stronie.
Jaki będzie rezultat końcowy (oraz pośrednie) następującego ciągu instrukcji:
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.
Proszę podać różnicę pomiędzy następującymi instrukcjami:
NOT AX
NEG AB
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 |
|
|
|
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
Która z poniższych instrukcji powoduje zapisanie do rejestru AX liczby z komórki pamięci 0x1000?
MOV 0x1000,AX
MOV AX, 0x1000
MOV [AX],0x1000
MOV AX,[0x1000]
8. Wykonanć dodawanie a:=a+100
CISC (Intel)
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