asembler działania binarne

0

Witam , muszę napisać program który zamienia liczbę z U1 na U2 i odwrotnie jednak nie wiem jak się za to zabrać nie miałem wcześniej styczności z asemblerem jest ktoś w stanie rozpisać to nawet słownie jak to ma wyglądać

4

U2 = U1 + 1
U1 = U2 - 1
Wprost z definicji...

Liczba 0101010 to 42. Liczba -42 w zapisie U1 to po prostu negacja wszystkich bitów, ergo 1010101. Ta sama liczba w zapisie U2 to będzie 1010110 czyli nic innego jak zapis U1 + 1

0

ok wszystko rozumiem tylko chodzi bardziej o zapis w asemblerze

1

Jeżeli chcesz zamienić te liczby w takim sensie, że U1 ma wartość U2, a U2 ma wartość U1, to wykorzystaj instrukcję mov rejestr1, rejestr2. Jeśli U1 ma wartość 13, a U2 wartość 14, to wartość jednej z nich (powiedzmy U1) musisz przenieść do dowolnego rejestru, a następnie przypisać jej wartość U2. Po czym przenieść wartość z wykorzystanego rejestru do U2.
W tym celu najlepiej będzie Ci wykorzystać rozkazy tzw. translacyjne takie jak mov, movzx, może out i ldi.
Pozdrawiam ;)

0

A jak w prosty sposób sprawdzić czy wpisana liczba jest ujemna? Wiem że najlepiej będzie sprawdzić czy najstarszy bit jest równy 1 ale nie wiem jak się do niego odwołać. Jakie polecenie?

0

nie sprawdzaj bitu, tylko użyj konkretnej instrukcji do porównywania liczb.
pod x86 to byłoby tak:

cmp ax,0
jl jest_mniejsza_od_zera
0

a jakim polecenie zapamiętać najstarszy bit i pozostałe zanegować ?

0

Wyciąganie bitów robisz poprzez and z odpowiednią maską bitową. Na przykład wyciągnięcie bitu 3 robisz przez and z maską 00000100 i jeśli wynik jest równy 00000100 to bit 3 miał 1, a jeśli jest równy 00000000 to nie był.

1 użytkowników online, w tym zalogowanych: 0, gości: 1