OPERASI PADA STRING Instruksi Pada String String adalah suatu jenis data yang terdiri atas kumpulan karakter, angka maupun simbol. Register yang digunakan dalam operasi string ini adalah register SI dan DI. Register SI (Source Index) digunakan untuk mencatat alamat dari sumber string yang akan dimanipulasi. Register DI (Destination Index) mencatat alamat atau tempat hasil dari manipulasi string
Instruksi-instruksi String Arti CLD Clear Direction Flag STD Set Destination Flag CMPS Compare String CMPSB Compare String 1 Byte CMPSW Compare String 1 Word CMPSD Compare String 1 Double Word (80386&80486) LODS Load String LODSB Load String 1 Byte LODSW Load String 1 Word LODSD Load String 1 Double Word to EAX (80386&80486) MOVS Move String MOVSB Move String 1 Byte MOVSW Move String 1 Word MOVSD Move String 1 Double Word (80386&80486)
Instruksi Arti REP Repeat REPE Repeat If Equal REPZ Repeat If Zero REPNE Repeat If Not Equal REPNZ Repeat If Not Zero SCAS Scan String SCASB Scan String 1 Byte SCASW Scan String 1 Word SCASD Scan String 1 Double Word (80386&80486) STOS Store String STOSB Store AL at ES:DI String STOSW Store AX at ES:DI String STOSD Store EAX at ES:DI String (80386&80486)
Pencopian dan Arah Proses Operasi String CLD (Clear Direction Flag) berfungsi untuk menaikkan nilai SI dan DI (arah proses menaik) STD (Set Direction Flag) berfungsi untuk menurunkan nilai SI dan DI (arah proses menurun) .MODEL SMALL .CODE ORG 100H DATA: JMP MULAI KAL DB ‘STMIK$’ BUF DB 5 DUP(?) MULAI: LEA SI,KAL LEA DI,BUF CLD MOV CX,5 ULANG: MOVS ES:BUFFER,KALIMAT ; BOLEH DITULIS MOVSB LOOP ULANG INT 20H END DATA
Pengulangan Pada String Selain menggunakan pengulangan yang biasa digunakan bisa juga digunakan pengulangan bersyarat seperti REP, REPE, REPZ dll. .MODEL SMALL .CODE ORG 100H DATA: JMP MULAI KAL DB ‘STMIK$’ BUF DB 5 DUP(?) MULAI: LEA SI,KAL LEA DI,BUF CLD MOV CX,5 REP MOVS ES:BUFFER,KALIMAT ; BLH DITULIS MOVSB INT 20H END DATA
Perbandingan Pada String Pada dasarnya perbandingan string sama dengan pencopian string. Pada perbandingan string juga terdapat bentuk CMPS yang dapat berupa CMPSB (perbandingan byte), CMPSW (perbandingan word) dan CMPSD (perbandingan double word). CETAK MACRO KAL MOV AH,09H LEA DX,KAL INT 21H ENDM .MODEL SMALL .CODE ORG 100H DATA: JMP MULAI KAL1 DB ‘akakjdjajdbk’ PESAN1 DB ‘Kedua kalimat sama$’ PESAN2 DB ‘Kedua kalimat tidak sama$’ MULAI: LEA SI,KAL1 LEA DI,KAL2 CLD MOV CX,12 ULANG: REP CMPSB JNZ TDKSAMA CETAK PESAN1 JMP EXIT TDKSAMA: CETAK PESAN2 EXIT: INT 20H END DATA
Operasi Scan Pada String Operasi scan pada string digunakan untuk membandingkan nilai pada register AL, AX atau EAX (80386) dengan data pada ES:DI. CETAK MACRO KAL MOV AH,09H LEA DX,KAL INT 21H ENDM .MODEL SMALL .CODE ORG 100H DATA: JMP MULAI CARI DB ‘akakkasdjadkdjfjdjajdbk’ PESAN1 DB ‘Karakter ‘’s’’ yang dicari ketemu! $’ PESAN2 DB ‘Karakter ‘’s’’ yang dicari tidak ketemu! $’ MULAI: LEA DI,CARI MOV AL,’s’ MOV CX,23 REPNE SCASB JNZ TDK_KETEMU CETAK PESAN1 JMP EXIT TDK_KETEMU:CETAK PESAN2 EXIT: INT 20H END DATA
Mengambil dan Mengisi String Operasi mengambil dan mengisi string ada dua operasi yang mempunyai fungsi yang berlawanan. LODS adalah bentuk umum untuk mengambil string dari lokasi memory DS:[SI] menuju AL, AX atau EAX. STOS adalah bentuk umum untuk mengisi string dari AL, AX atau EAX menuju ES:[DI]. Jika Direction Flaf bernilai 0 (dengan CLD) maka setelah instruksi STOS dijalankan register DI akan ditambah secara otomatis, sebaliknya jika Direction Flag bernilai 1 (dengan STD) maka register DI akan dikurang secara otomatis. Keterangan: lihat contoh program pada bagian praktikum operasi string