Szukałem w sieci, ale nie mogłem znaleźć wyraźnego przykładu, aby zrozumieć, co robi ta instrukcja. Jeśli więc ktoś może podać przykład na ten temat, będzie mi bardzo pomocny.co robi instrukcja movsbl?
Odpowiedz
Poruszaj się z rozszerzeniem znaku od bajtu do longword. W składni Intela mnemonik tej instrukcji to MOVSX.
Kompilator języka C może używać tej instrukcji, gdy zmienna typu int8_t
musi zostać przekonwertowana na int
, co dzieje się automatycznie na arytmetyce i kilku innych operacjach (promocja liczb całkowitych).
Ponieważ ta instrukcja zapisuje się na wszystkich 32 (lub 64) bitach rejestru docelowego, unika kar za wykonanie, które mogą wynikać z zapisywania tylko do niskich 8 (lub 16) bitów rejestru. Podobny zestaw instrukcji umożliwia rozszerzanie z bitami zerowymi (MOVZX w składni Intel, MOVZst w AT & T składnia (od rozmiaru s do rozmiaru t)).
Zakładając, że jest to AT & składnia zestawu T dla IA32 (i386/x86_64) oznacza to MOV z rozszerzeniem znaku z bajtu na długi. To jest odpowiednik MOVSX r32, r/m8
, patrz 3-730 Vol. 2A.
Top hit internetowy movsbl
jest this page, a jeśli szukać movsbl
mówi
MOVSBL and MOVZBL
* MOVSBL sign-extends a single byte, and copies it into a
double-word destination
* MOVZBL expands a single byte to 32 bits with 24 leading
zeros, and copies it into a double-word destination
Example:
%eax = 0x12345678
%edx = 0xAAAABBBB
MOVB %dh, %al %eax = 0x123456BB
MOVSBL %dh, %eax %eax = 0xFFFFFFBB
MOVZBL %dh, %eax %eax = 0x000000BB
Wygląda całkiem jasny przykład dla mnie. Aby uzyskać więcej przykładów, przeczytaj następną stronę.
Zakładając, że mówimy o x86, instrukcja MOVSBL rozciąga bajt (8 bitów) reprezentujący podpisaną liczbę do 32-bitowej liczby ze znakiem. Pozostałe 24 bity są zerami lub jedynymi w zależności od znaku, tak aby wartość uzupełnienia dwójki pozostała.
Znaczenie, jeśli miałeś liczbę ujemną, górne 24 bity będą 1s, w przeciwnym razie będą zerami.
Równoważnikiem liczb niepodpisanych jest MOVZBL, który rozciąga się zawsze z 0s.
- 1. Co robi instrukcja PCOMMIT?
- 2. Co robi ta instrukcja Intel jmpq?
- 3. Co dokładnie robi instrukcja return w C#?
- 4. Co to jest instrukcja tlbiel i co robi?
- 5. Co robi pusty wybór?
- 6. Co Boxen i co robi?
- 7. Co to jest uprzywilejowana instrukcja?
- 8. Co robi -n, jeśli [-n "$ {TEMP_FILE_LIST}"] robi?
- 9. Co robi kopia hg?
- 10. Co robi flaga fermeny?
- 11. co właściwie robi -arrayWithArray?
- 12. Co robi leniwy val?
- 13. Co robi fixIO?
- 14. Co robi kanał ChannelOption.SO_BACKLOG?
- 15. Co robi -XX: MaxPermSize?
- 16. Co robi TransactionScope naprawdę
- 17. Co robi i2c_new_dummy?
- 18. Co robi Keras.io.preprocessing.sequence.pad_sequences?
- 19. Co robi rb-fsevent?
- 20. VB.NET - co robi ": ="?
- 21. Co robi "--set-upstream"?
- 22. Co robi globalne łączenie?
- 23. Co robi usługa ConnectionRefused?
- 24. Foo.class co to robi?
- 25. Co robi "* ptrInt ++"?
- 26. Co właściwie robi CascadeType.REFRESH?
- 27. Co dokładnie robi fillMode?
- 28. C++ - co robi [=]?
- 29. Co robi metoda "wait_window"?
- 30. Co robi EventEmitter.call()?
Jest tam więcej niż jedna instrukcja montażu ... z którą masz do czynienia? x86? MIPS? PPC? RAMIĘ? etc ... etc ... etc ..? –
Myślę, że jest ia32. – sarslanhan
I MOVZBL do zera przedłużenia: http://stackoverflow.com/questions/9317922/what-does-the-movzbl-instruction-do-in-ia-32-att-syntax?lq=1 –