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ć
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
ok wszystko rozumiem tylko chodzi bardziej o zapis w asemblerze
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 ;)
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?
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
a jakim polecenie zapamiętać najstarszy bit i pozostałe zanegować ?
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ł.