2011-10-22 15 views
17

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?

+3

Jest tam więcej niż jedna instrukcja montażu ... z którą masz do czynienia? x86? MIPS? PPC? RAMIĘ? etc ... etc ... etc ..? –

+0

Myślę, że jest ia32. – sarslanhan

+1

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 –

Odpowiedz

28

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)).

1

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.

14

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ę.

3

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.