Witam,
Mam problem z następującym zadaniem:
Zapisz algorytm konwersji liczby o rozmiarze N słów z formatu uzupełnieniowego na format znak-moduł.
Ogólnie algorytm rozumiem tak:
- Sprawdź czy najbardziej znaczący bit ma wartość 1, jeśli tak przejdź dalej, jeśli nie koniec (liczba dodania).
- zaneguj wszystkie bity oprócz bitu znaku i dodaj 1
Cały problem polega na tym, że nie wiem jak w słowie zanegować wszystkie bity oprócz tego znaku (najbardziej znaczący bit).
Zrobiłem szkic:
mov N, %ecx
mov liczba(,%ecx, 4), %eax #sprawdzamy znak (big endian)
or %eax, %eax
jns koniec # jesli bez znaku, koniec
mov $0, %ecx #licznik na 0
mov liczba(,%ecx,4) %eax
not %eax #negujemy bity
add $1, %eax; #i dodajemy 1
mov %eax, liczba(,%ecx,4)
inc %ecx
petla:
mov liczba(,%ecx,4) %eax;
not %eax #negujemy bity
adc $0, %eax
mov %eax, liczba(,%ecx,4)
inc %ecx
cmp N, %ecx
jne petla
koniec:
Pozdrawiam,
Marek