• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Korekta sumy dwóch liczb w kodzie U2 do postaci 32-bitowej

Object Storage Arubacloud
0 głosów
292 wizyt
pytanie zadane 15 kwietnia 2023 w Assembler przez Noizz00 Użytkownik (910 p.)
edycja 15 kwietnia 2023 przez Noizz00
Mam za zadanie napisać program, który doda 16-bitowe liczby do siebie i wynik zaprezentuje w postaci 32-bitowej. Korekta liczby do postaci 32-bitowej następuje w sytuacji, gdy wartości flag OF i SF są względem siebie przeciwne. Algorytm polega na:

a) zapisaniu wartości 0FFFF0000h do rejestru EBX,

b) zapisaniu wartości AX (sumy AX i BX, dla którego ustalone zostały flagi OF i SF) w rejestrze BX,

c) zanegowaniu liczby w rejestrze EBX.

Otrzymujemy w tym przypadku liczbę dodatnią, wcześniej na ekran został wypisany znak minusa, później liczba będzie wypisywana znak po znaku na ekran. Chciałbym się dowiedzieć, dlaczego akurat ten algorytm jest dobry, czy jest jakaś zasada, która o tym mówi? Bo nie mogę go do końca zrozumieć.

1 odpowiedź

0 głosów
odpowiedź 15 kwietnia 2023 przez tkz Nałogowiec (42,000 p.)
Ten algorytm jest stosowany do wykrywania przypadków przepełnienia (overflow) lub podpełnienia (underflow) w wyniku dodawania dwóch 16-bitowych liczb. Gdy liczby są dodawane, to wynik może przekroczyć zakres 16-bitowy i wtedy flaga OF (overflow flag) jest ustawiana na 1. Jeśli natomiast wynik jest ujemny, to flaga SF (sign flag) jest ustawiana na 1. W przypadku gdy flaga OF i SF są względem siebie przeciwne, oznacza to, że wynik jest niepoprawny i wymaga korekty.

Algorytm, który został opisany polega na zapisaniu wartości 0xFFFF0000 do rejestru EBX, co oznacza, że rejestr ten ma najstarsze 16 bitów ustawione na 1 i najmłodsze 16 bitów ustawione na 0. Następnie, wynik dodawania dwóch liczb (AX i BX) jest zapisywany w rejestrze BX. Jeśli wynik jest pozytywny, to nie ma potrzeby korekty, a jeśli jest ujemny, to liczba ta jest zanegowana, czyli odwracana na bitach i dodawana do wartości 0xFFFF0000, co daje wynik poprawiony o 16 bitów.

Ogólnie rzecz biorąc, algorytm ten pozwala na prawidłowe dodawanie dwóch 16-bitowych liczb, które nie przekraczają zakresu 16 bitów, a jednocześnie umożliwia wykrycie przypadków, gdy wynik przekracza ten zakres i wymaga korekty. Jest to zasada działania tego algorytmu i stosowany jest on w celu zapewnienia poprawności wyników operacji arytmetycznych w programach z wykorzystaniem 16-bitowych liczb.

Podobne pytania

0 głosów
1 odpowiedź 687 wizyt
pytanie zadane 14 czerwca 2019 w Assembler przez jezza Nowicjusz (120 p.)
+1 głos
1 odpowiedź 246 wizyt
0 głosów
0 odpowiedzi 911 wizyt
pytanie zadane 15 listopada 2017 w Matematyka, fizyka, logika przez panstudent Nowicjusz (190 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...