Dlaczego instrukcje x86-64 na 32-bitowym rejestrze zerują górną część pełnego rejestru 64-bitowego?

wx86-64 Tour of Intel Manuals, Czytam

Być może najbardziej zaskakujący jest fakt, że taka instrukcja jakMOV EAX, EBX automatycznie zeruje górne 32 bityRAX zarejestrować.

Dokumentacja Intela (3.4.1.1 Rejestry ogólnego przeznaczenia w trybie 64-bitowym w ręcznej architekturze podstawowej) cytowana w tym samym źródle mówi nam:

64-bitowe operandy generują 64-bitowy wynik w docelowym rejestrze ogólnego przeznaczenia.32-bitowe operandy generują wynik 32-bitowy, zerowy rozszerzony do 64-bitowego wyniku w docelowym rejestrze ogólnego przeznaczenia.Operandy 8-bitowe i 16-bitowe generują wynik 8-bitowy lub 16-bitowy. Górne 56 bitów lub 48 bitów (odpowiednio) docelowego rejestru ogólnego przeznaczenia nie są modyfikowane przez operację. Jeśli wynik operacji 8-bitowej lub 16-bitowej jest przeznaczony do obliczania adresu 64-bitowego, należy jawnie podpisać i rozszerzyć rejestr na pełne 64-bitowe.

W zestawie x86-32 i x86-64 instrukcje 16-bitowe, takie jak

mov ax, bx

nie pokazuj tego rodzaju „dziwnego” zachowania, ponieważ górne słowo eax jest zerowane.

Zatem: jaki jest powód wprowadzenia tego zachowania? Na pierwszy rzut oka wydaje się to nielogiczne (ale powodem może być to, że jestem przyzwyczajony do dziwactw dotyczących montażu x86-32).

questionAnswers(2)

yourAnswerToTheQuestion