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

Asm arytmetyka

0 głosów
636 wizyt
pytanie zadane 4 stycznia 2019 w Assembler przez niezalogowany
Czy takie działania jak

sub [esp], eax

Czy oprócz ustawienia flag i zmian w pierwszym argumencie, to czy w "eax" (drugi argument) występują jakieś zmiany? I chodzi mi ogólnie o różne działania arytmetyczne (add sub itp). Czy są jakieś wyjątki? (X86, nasm)

1 odpowiedź

+1 głos
odpowiedź 4 stycznia 2019 przez Chess Szeryf (76,730 p.)
edycja 4 stycznia 2019 przez Chess
 
Najlepsza

https://software.intel.com/sites/default/files/managed/39/c5/325462-sdm-vol-1-2abcd-3abcd.pdf

1776 strona w manual'u (instrukcja SUB). (Na końcu masz/jest indeks 4807 (strona) i dzięki temu możesz szukać np. instrukcje, które chcesz zobaczyć, co robią, itp..) (Możesz także, co oczywiste korzystać z innych dokumentacji/poradników do x86 niż tych od Intel'a, np. AMD.) W opisie jest napisane:

Odejmuje drugi operand (operand źródła) z pierwszego operandu (operand przeznaczenia) i przechowuje rezultat w operandzie przeznaczenia. Operand przeznaczenia może być rejestrem lub lokalizacją pamięci. Operand źródła może być stałą, rejestrem lub lokalizacją pamięci. (Tym niemniej dwa operandy pamięci nie mogą być używane w jednej instrukcji.) Kiedy stała wartość jest używana jako operand, to jest sign-extended (rozszerzana ze znakiem??) do długości formatującej operand przeznaczenia. Instrukcja SUB wykonuje odejmowanie liczby całkowitej. To szacowanie rezultatu dla obu ze znakiem i bez znaku operandów liczby całkowitej i ustawia flagi OF i CF do oznaczenia przepełnienia w rezultacie ze znakiem lub bez znaku, odpowiednio. Flaga SF oznacza znak z rezultatu ze znakiem.

W 64-bitowym trybie domyślna wielkość operacji instrukcji jest 32-bitowa. Używając prefiksu REX w formie z REX.R zezwala dostęp do dodatkowych rejestrów (R8-R15). Używając prefiksu REX w formie z REX.R promuje (awansuje) operację do 64 bitów. Zobacz wykres podsumowania na początku tej sekcji dla zakodowania danych i limitów.

Ta instrukcja może być używana z prefiksem LOCK do pozwolenia  wykonania instrukcji atomowo.

Operation

DEST ← (DEST – SRC);

Flags Affected

The OF, SF, ZF, AF, PF, and CF flags are set according to the result.

Czy są jakieś wyjątki? (X86, nasm)

Tak wyjątki zachodzą/występują w niektórych sytuacjach, np. #GP(0).

sub [esp], eax

   100 | 4
    99 | 8
    98 | 12

Ten zapis, co podałeś oznacza chyba, to: od adresu ESP, odejmij wartość która znajduje się w rejestrze EAX. Jeśli pod ESP kryje się wartość 8, to wtedy ESP (adres) będzie mieć wartość 99. A jeśli w rejestrze EAX będzie np. taka wartość: 32, to wtedy działanie będzie następujace:

99 - 32 = 67

Jeśli moje rozumowanie jest niewłaściwe, proszę mnie poprawić.

Przeczytaj interesujące Cię instrukcje w tym PDF'ie i zobaczysz, co tam pisze i znajdziesz odpowiedź na swoje pytanie/pytania.

?? - Nie byłem pewien, co do tłumaczenia, za inne błędne tłumaczeni(e/a) przepraszam.

Podobne pytania

+1 głos
1 odpowiedź 494 wizyt
pytanie zadane 30 grudnia 2018 w Assembler przez niezalogowany
0 głosów
1 odpowiedź 3,344 wizyt
pytanie zadane 19 grudnia 2019 w Assembler przez progNewbie Obywatel (1,130 p.)
+1 głos
2 odpowiedzi 927 wizyt
pytanie zadane 19 stycznia 2017 w Assembler przez niezalogowany

93,773 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,376 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...