Asembler X86/Instrukcje/Transferowe

Z Wikibooks, biblioteki wolnych podręczników.

Spis treści

[edytuj] mov

działanie: kopiuje B do A. Oba parametry muszą być tego samego rozmiaru. Operand docelowy i źródłowy nie mogą być jednocześnie adresami w pamięci.
A: rejestr ogólnego przeznaczenia, rejestr segmentowy (poza CS) lub adres w pamięci.
B: konkretna wartość, rejestr ogólnego przeznaczenia, rejestr segmentowy lub adres w pamięci.

przykład:

 mov edx 09055509h


[edytuj] movzx

działanie: kopiuje B do A wraz z rozszerzeniem o zera, co oznacza powiększenie wielkości kopiowanej wartości do rozmiaru A i wypełnienie powstałego w ten sposób nadmiarowego miejsca zerami. Dzięki temu można kopiować wartość z rejestru mniejszego do większego.
A: 16- lub 32-bitowy rejestr ogólnego przeznaczenia
B: 8- lub 16- bitowy rejestr ogólnego przeznaczenia albo adres w pamięci

przykład:

 movzx eax, [edx]

[edytuj] pop

działanie: zdejmuje ze szczytu stosu wartość i kopiuje ją do A.
A: rejestr ogólnego przeznaczenia, rejestr segmentowy (poza CS) lub adres w pamięci.
modyfikowane rejestry: ESP (zmniejszany o rozmiar A)

przykład:

 pop edx


[edytuj] popa, popad

działanie: zdejmuje ze szczytu stosu wszystkie wartości i kopiuje je do ośmiu rejestrów ogólnego przeznaczenia. POPA kopiuje zdjęte wartości do 16-bitowych rejestrów w kolejności: DI, SI, BP, SP, BX, DX, CX, AX. Natomiast POPAD (procesor 80386) kopiuje do 32-bitowych rejestrów w kolejności: EDI, ESI, EBP, ESP, EBX, EDX, ECX, EAX. Ta instrukcja nie przyjmuje żadnych operandów.

przykład:

 popad


[edytuj] push

działanie: umieszcza A na szczycie stosu.
A: słowo lub podwójne słowo.
modyfikowane rejestry: ESP (zwiększany o rozmiar A)

przykład:

 push edx


[edytuj] pusha, pushad

działanie: odkłada wszystkie rejestry na stos. PUSHA (procesor 80186) odkłada 16-bitowe rejestry w następującej kolejności: AX, CX, DX, BX, SP, BP, SI, DI. Rozkaz PUSHAD (procesor 80386) umieszcza na stosie rejestry 32-bitowe w tej kolejności: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI.Te polecenia nie przyjmują żadnych operandów.

przykład:

 pusha


[edytuj] out

działanie: wysyła dane A do portu B, numer portu wpisuje się bezpośrednio(liczba 8-bitowa) B można zastępić rejestrem DX

przykład:

out A,B

[edytuj] xchg

działanie: wymienia zawartości operandów między sobą
przykład:

MOV EAX, 9999
MOV ECX, 3333
XCHG AL, CL
 
EAX 00009933
ECX 00003399