Selasa, 21 Juni 2011

INTRUKSI TRANSFER DATA

INTRUKSI TRANSFER DATA
v  INTRUKSI MOV
Oleh karena mov menyalin data dari satu operand ke operand lain maka ini disebut intruksi transfer data. Pada prosesor 8086 dan 80286, operandnya 8 atau 16-bit.
Sintaknya sebagai berikut :
            MOV tujuan, sumber
Data benar benar disalin sehingga operand sumber tidak berubah. Sumber mungkin berupa nilai, register, atau operand memori.
Ø  Operand Register
Pemindahan hanya melibatkan register; ini paling efisien. Satu register berperan sebagai operand sumber, dan yang lainya, selain CS dan IP, berperan sebagai operand tujuan.
Ø  Operand Immediate.
Nilai langsung (konstanta integer) mungkin dipindahkan ke suatu register ( kecuali register segmen atau IP) dan mungkin dipindahkan ke memori.
Ø  Operand Langsung
Variable mungkin salah satu (tapi tidak keduanya) operand dalam intruksi MOV.
Contoh MOV dengan semua tipe sebagai berikut:
Mov al, bl
Mov dx, cx
Mov bl, 1
Mov bx, 8FE2h
Mov al, count
Mov total, ax
Mov total, 1000h
Count db 10
Total dw 0
Operand mempunyai sedikit keterbatasan, yang berdasarkan rancangan fisik pemroses dan set intruksinya. Berikut ii tidak diperbolehkan :
  1. CS atau IP sebagai register tujuan
  2. Memindahkan data immediate segmen ke register segmen
  3. Memindahkan dari register segmen ke register segmen
  4. Perbedaan ukuran antara operand sumber dan tujuan
  5. Nilai immediate sebagai tujuan
  6. Perpindahan dari memori ke memori
v  OFFSET
Anda dapat menambahkan offset pada operand memori. Dengan ini maka anda dapat mengakses nilai data yang tidak mempunyai label. Misalkan kita punya daftar nomor 8-bit yang disebut array. Kemudian, array+1 adalah nama yang mengacu pada offset 1byte lebih dari array. Keduanya,array dan array+,mempunyai offset yang dihitung oleh assembler sebagai offset fixed dari permulaan segmen data. Alamat-alamat tersebut digunakan untuk mengakses memori pada offset yang diberikan,seperti contoh berikut:  


.data
Array db 10,20,30,40,50,
.code
mov al,array        ;isi=10
mov dl,array+1     ;isi=20  
mov dh,array+4   ;isi=50
Nama PTR tidak benar kalau dimaksudkan penggunaan pointer ini benar benar mengidentifikasi atribut operand memori. Pada contoh berikut, WORD PTR mengidentifikasi count sebagai variable berukuran word, dimana BYTE PTR mengidentifikasikan var2 sebagai opereand 8-bit.
            Mov word ptr count, 10
            Mov byte ptr var2, 5
v  PERINTAH XCHG
Perintah XCHG menukarkan isi dari 2 register atau antara register dengan variable. Sintaknya sebagai berikut :
            XCHG                        op1, op2
Dua operand mungkin register atau operand memori, selama satu operandnya adalah register.
XCHG adalah cara yang efisien untuk menukarkan dua operand 8-bit atau 16-bit karena tidaka memerlukanb register ketiga untuk menyimpan nilai sementara. Khususna dalam aplikasi pengurutan, intruksi ini mempunyai keuntungan karena kecepatannya.
Contoh berikut adalah contoh yang benar :
            Xchg ax, bx
            Xchg ah, al
            Xchg var1, bx
v  OPERASI STACK
Stack adalah buffer memori khusus yang digunakan untuk program aplikasi dan DOS. Dua register berperan dalam stack, yaitu ss dan register sp. Register SS (stack segment) mengandung lokasi basis stack, sementara register SP (satck pointer) mengandung alamat puncak stack tempat nilai terakhir dimasukkan.
Ada beberapa istilah pada stack. Operasi PUSH adalah meletakkan nilai baru pada stack dan mengurangi nilai stack pointer, stack bergerak kea rah bawah dalam memori setiap nilai baru dimasukkan. Operasi POP mengeluarkan data dari stack dengan menyalin words kedalam register atau operand memori dan menambah nilai stack pointer. Setiap inputan stack memiliki panjang 2 byte.
Ø  Intruksi PUSH
Intruksi PUSH megurangi register SP dan menyalin isi register atau operand memori 16-bit ke dalam stack pada lokasi yang ditunjuk oleh SP. Hanya pada prosesor 80286 atau yang lebih tinggi. Anda dapat memasukkan nilai immediate. Berikut ini contoh penggunaanya :
            Push ax
            Push memval
Push 1000h
Intruksi PUSH bisa digunakan untuk menyimpan nilai register sementara untuk suatu saat diambil kembali.
Ø  Intruksi POP
Intruksi POP. Intruksi POP menyalin isi stack yang ditunjukkan oleh SP kedalam register 16-bit atau variable, dan menambah SP. Dua register, CS dan IP, tidak boleh digunakan sebagai operand. Contoh POP seperti terlihat dibawah ini.
            Pop cx
            Pop memval
Menyimpan dan mengambil kembali nilai register. Berbagai cara bisa dilakukan jika sebuah register akan digunakan ulang.pada contoh berikut, pemanggilan DOS (int 21h) untuk menampilkan string pada layar. DX dan AX diasumsikan mempunyai nilai penting yang harus disimpan kembali sesudah tampilan.. oleh karena stack berstruktur LIFO (last in first out) maka register yang terakhir disimpan pertama kali:
Push ax
Push dx
Mov ah, 9
Mov dx offset message
Int 21h
Pop dx
Pop ax
Message db”ini adalah pesan.$”
PUSHF dan POPF. Intruksi PUSHF memasukkan register flag ke dalam stack, menjaganya agar tidak terjadi perubahan. Pada lain waktu, intruksi POPF dapat digunakan untuk mengembalikan nilai flag. Contoh berikut, kita menyimpan flag sebelum memanggil subrutin yang mungkin mengubah flag.

Tidak ada komentar:

Posting Komentar