2013-02-23 19 views
7

Większość programów montażowych korzysta z 4 rejestrów ogólnego przeznaczenia eax ebx ecx edx, ale uważam, że dość często potrzebuję użyć więcej niż 4 rejestrów, aby wykonać moje zadanie z łatwością bez konieczności posiadania push i pop ze stosu na dużo. Ponieważ mój program nie ma intencji używania rejestrów FPU lub MMX do obliczeń zmiennoprzecinkowych lub ich "zamierzonego zastosowania", czy uważa się za dopuszczalne używanie tych dodatkowych rejestrów w swoim programie?Używanie rejestrów FPU i MMX jako "rejestrów ogólnych"

Np. za pomocą xmm0 dla licznika przyrostu pętli zwalniając rejestr ecx, aby wykonać inne czynności.

+0

Możesz zrobić prawie wszystko, co chcesz. Jeśli odkryjesz, że używanie rejestrów xmm jest szybsze niż przechodzenie do stosu, idź do niego. – Mysticial

+2

@Mysticial Rzadko każdy mówi mi "Mogę robić, co chcę" w zakresie programowania. Kopię to :) – user99545

+1

x86_64 ma 8 dodatkowych rejestrów do ogólnego użytku. –

Odpowiedz

3

Dlaczego cztery? Można użyć wszystkich następujących: eax, ebx, ecx, edx, esi, edi i ebp. To jest siedem. Czy to też nie wystarczy?

Rejestry FPU i MMX są dość niewygodne w obsłudze, ponieważ mogą być ładowane tylko od siebie i pamięci i przechowywane tylko dla siebie i pamięci. Nie można swobodnie przenosić danych między nimi a rejestrami ogólnego przeznaczenia, nie ma też instrukcji mogących działać w obu rejestrach jednocześnie.

Jeśli siedem rejestrów ogólnego przeznaczenia nie wystarcza, należy użyć zmiennych lokalnych/na stosie. Na przykład można bezpośrednio zmniejszyć wartość zmiennej licznika w pamięci, a także bezpośrednio porównać ją ze stałą lub innym rejestrem. Jest szansa, że ​​nie będzie wolniej (prawdopodobnie szybciej) niż używanie rejestrów FPU lub MMX w dziwny sposób.

+0

Nie, siedem rejestrów nie jest tak szybkie, jak użycie ich wszystkich. Rejestry MMX mogą być całkiem przydatne. –

+0

@BenVoigt Elaborate? –

-2

Weel to oczywiście SI i DI, a na x64 masz dodatkowe rejestry, ale możesz używać rejestrów FP do tego, co chcesz.

0

Jak często potrzebujesz pełnego 32-bitowego rejestru? W przypadku małych liczników można używać kwadratów rejestrów ogólnego przeznaczenia o wielkości bajtów: AH/AL, BH/BL, CH/CL, DH/DL. Przy odrobinie oszustwa można również użyć górnego 16 bitów rejestrów ogólnego przeznaczenia jako pośredniego magazynu dla zmiennych o wielkości słowa.

W trybie rzeczywistym (czytaj: w systemie DOS) można również używać rejestrów segmentów ES, FS i GS do przechowywania wartości pośrednich. W systemie operacyjnym chronionym (Windows, Linux, * nix) kod ulega awarii.

Powiązane problemy