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