Podczas wstawiania wbudowanego asemblera do funkcji w języku podobnym do języka C, jaka jest konwencja dotycząca rejestrów, których można używać na początku? Czy to kompilator jest odpowiedzialny za zapisanie wartości wszystkich rejestrów, które musi zapisać przed wejściem do bloku asm
? Czy programista jest odpowiedzialny za przechowywanie wartości w tych rejestrach i ich przywracanie przed zamknięciem bloku asm
? Czy istnieje typowa konwencja, czy też jest to ściśle związane z konkretną implementacją?Inline Asembler: Jakie rejestry zarysowania mogą być używane?
6
A
Odpowiedz
9
Zespół wbudowany jest, z definicji, specyficzny dla kompilatora.
Większość kompilatorów obsługujących wbudowany zestaw ma składnię, która pozwala wskazać, które rejestry są modyfikowane przez zespół. Kompilator może następnie zapisać i przywrócić te rejestry w razie potrzeby.
2
Możesz odczytać użycie rejestru w niektórych konwencjach dzwonienia here.
7
To jest bardzo specyficzny dla kompilatora. Jednakże, dla realistycznego przykładu, weźmy gcc na x86. Format jest:
asm (assembler template
: output operands (optional)
: input operands (optional)
: list of clobbered registers (optional)
);
gdzie „lista niszczona rejestrów” jest mówisz kompilator, który rejestruje Twój kod jest używany.
Oto prosty kod kopia pamięć:
asm ("movl $count, %%ecx;
up: lodsl;
stosl;
loop up;"
: /* no output */
:"S"(src), "D"(dst) /* input */
:"%ecx", "%eax"); /* clobbered list */
Biorąc pod uwagę te wskazówki, gcc nie będzie używany EAX i ECX do innych rzeczy w bloku.
Więcej informacji here.
Powiązane problemy
- 1. jakie bazy danych mogą być używane z java?
- 2. Jakie typy mogą być używane dla członków adnotacji Java?
- 3. Jakie mogą być przyczyny wyzwolenia zdarzenia NavigationCancel?
- 4. Jakie są najlepsze formaty animacji 2D, które mogą być używane w grach androidowych?
- 5. Jakie są niektóre alternatywy dla Gitk, które mogą być używane w Windows Powershell?
- 6. Czy kontrakty Microsoft Code mogą być używane z witryną ASP.NET?
- 7. Czy F # TypeProviders mogą być używane w aplikacji Windows Store?
- 8. Czy pseudoelementy mogą być używane samodzielnie w CSS?
- 9. Czy słowniki mogą być używane w języku C++
- 10. "Protokoły nie mogą być używane z isinstance()" - dlaczego nie?
- 11. Czy funkcje obiektu wywołania funkcji mapy Pythona mogą być używane?
- 12. Czy ładowarki mogą być używane bez dostawcy treści lub kombinacji?
- 13. Dlaczego Integer i int mogą być używane zamiennie?
- 14. Cabal: Co oznacza "tylko zainstalowane już instancje mogą być używane"?
- 15. Jakie funkcje Scala nie mogą być tłumaczone na język Java?
- 16. Co to jest https i SSL? Jak oni pracują? Jak mogą być używane w PHP?
- 17. powinno być kiedykolwiek używane encodeURI?
- 18. Can Yarn i npm mogą być używane przez wielu programistów w tym samym projekcie?
- 19. Jakie są różnice między inline-c i language-c-inline?
- 20. szablony mogą nie być "wirtualne"
- 21. Operator && nie mogą być stosowane
- 22. Które klasy nie mogą być poddane podklasie?
- 23. 64-bitowy asembler Windows
- 24. iis7 Wyzwanie i uwierzytelnianie oparte na przekierowaniu nie mogą być używane jednocześnie
- 25. Czy klejnoty mogą być używane przez kod ruby skompilowany za pomocą macrubyc
- 26. W jaki sposób argumenty wariancji C++ i C mogą być używane razem?
- 27. Czy tymczasowe dane logowania do roli IAM mogą być używane w szablonach Cloudformation?
- 28. Dlaczego otrzymuję "" Operacje zagregowane mogą być używane tylko w właściwościach RLMArray ""?
- 29. TSQL Błąd: Instrukcja RETURN z wartości zwracanej nie mogą być używane w tym kontekście
- 30. Wskaźniki i bufory o stałym rozmiarze mogą być używane tylko w niebezpiecznym kontekście.