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.