MIKROPROSESOR
Selain MOV, instruksi yang berfungsi untuk operasi perpindahan data adalah : PUSH & PUSHF POP & POPF XCHG LEA Perpindahan String LODS, STOS, MOVS
Instruksi
untuk memasukkan data (langsung, register/lokasi memori) kedalam tumpukan (stack) Untuk prosesor 8086 & 80286, PUSH selalu mentransfer data 2 byte; sedangkan 80386 keatas bisa mentransfer data 2 atau 4 byte (tergantung dari ukuran register /lokasi memori yang terlibat). Sintaks :
PUSH Reg PUSH [alamat] PUSH data PUSHF
PUSH
BX PUSH EAX PUSH [DI] PUSH [ESI] PUSH 12H PUSH 0A15B PUSHF
Alamat stack ditunjuk oleh register SS:SP. Suatu data word (dua byte) dimasukkan kedalam stack; LSB menempati lokasi stack yg dialamati SP-1; MSB menempati lokasi stack yg dialamati SP-2. Setelah data disimpan didalam stack, maka isi register SP akan berkurang 2. Suatu data double word dimasukkan kedalam stack; LSB menempati lokasi stack yg dialamati SP-1; MSB menempati lokasi stack yg dialamati SP-4. Setelah data disimpan didalam stack, maka isi register SP akan berkurang 4.
Instruksi
untuk mengambil data stack ke register/lokasi memori. Untuk prosesor 8086 & 80286, POP selalu mentransfer data 2 byte; sedangkan 80386 keatas bisa mentransfer data 2 atau 4 byte (tergantung dari ukuran register /lokasi memori yang terlibat). Sintaks :
POP Reg POP [alamat] POPF
POP
BX POP EAX POP [DI] POP [ESI] POPF
Alamat stack ditunjuk oleh register SS:SP. Pada POP BX, data byte yang beralamat SS:SP dipindahkan ke register BL; data byte yang beralamat SS:SP+1 dipindahkan ke register BH; Setelah dipindahkan dari stack, isi register SP akan bertambah 2 Pada POP EAX, data byte yang beralamat SS:SP dipindahkan ke register AL; data byte yang beralamat SS:SP+1 dipindahkan ke register AH; Extended register berisi SP+2 & SP+3; Setelah dipindahkan dari stack, isi register SP akan bertambah 4
Berfungsi
untuk menukarkan isi suatu register ke register lainnya atau ke lokasi memory. Tidak dapat digunaka untuk menukar antar lokasi memory. Sintaks :
XCHG reg, reg XCHG reg, [alamat]
Contoh
: XCHG AX, BX XCHG DX, [SI] DX DSx10H + SI XCHG [SI], CH
Mengambil
alamat suatu data pada lokasi memory tertentu ke register 16 bit Sintaks : LEA
reg, [alamat] LEA reg, var
Contoh : LEA BX, [DI] alamat offset yang ditunjuk oleh [DI] diletakkan di register BX; sama dengan memindahkan isi register DI ke register BX
Memindahkan
data string pada segmen data yang alamat ofsetnya ditunjuk oleh isi register SI ke accumulator (AL,AX) Setelah memindahkan data byte (ke AL) atau word (ke AX) isi register SI akan di increment (bila flag D=0) atau di decrement (bila flag D=1). Instruksi LODS bisa ditambah B/W/D (byte, word, double word).
LODSB
; data pada lokasi memori alamat DSx10H+ SI dipindah ke AL; SI=SI±1 LODSW ; data pada lokasi memori alamat DSx10H+ SI dipindah ke AX; SI=SI±2 LODSD ; data pada lokasi memori alamat DSx10H+ SI dipindah ke EAX; SI=SI±4 LODS DAT1 ; data dari variabel DAT1 dipindahkan ke AL/AX/EAX ; SI=SI±1 / SI=SI±2/ SI=SI±4 ; tergantung ukuran DAT1.
Memindahkan
string pada register accumulator (AL,AX,EAX) ke extra segmen yang alamat offsetnya ditunjuk oleh register DI (ES:DI) Instruksi STOS bisa ditambah B/W/D (byte, word, double word).
STOSB
; isi register AL dipindahkan ke lokasi alamat ESx10H + DI; DI=DI±1 STOSW ; isi register AX dipindahkan ke lokasi alamat ESx10H + DI; DI=DI±2 STOSD ; isi register EAX dipindahkan ke lokasi alamat ESx10H + DI; DI=DI±4 STOS DAT1 ; isi AL/AX/EAX dipindahkan ke variabel DAT1; DI=DI±1/ DI=DI±2/ DI=DI±4 tergantung ukuran DAT1
Memindahkan
string dari lokasi memori ke lokasi memori lainnya. Instruksi MOVS bisa ditambah B/W/D (byte, word, double word).
MOVSB ; isi lokasi memori beralamat DSx10H+SI ke lokasi memori ESx10H+DI; SI=SI±1; DI=DI±1 MOVSW ; isi lokasi memori beralamat DSx10H+SI ke lokasi memori ESx10H+DI; SI=SI±2; DI=DI±2 MOVSD ; isi lokasi memori beralamat DSx10H+SI ke lokasi memori ESx10H+DI; SI=SI±4; DI=DI±4 MOVS DAT1,VAR1 ; isi variabel VAR1 ke variabel DAT1; SI=SI±1/2/4; DI=DI±1/2/4 tergantung ukuran data.