- Start: JMP MULAI (instruksi untuk melompat (JMP) ke label
MULAI
, melewati deklarasi data di bawahnya) - KATA DB 'INPUTKAN KATA MAKSIMUM 12 HURUF :$' (Mendefinisikan string untuk menampilkan pesan kepada pengguna. Tanda
$
di akhir string digunakan sebagai penanda akhir string saat mencetaknya dengan interrupt 21H, fungsi 09H) - LABOR_LEI1 DB 12,?,12 DUP(?) ;11 KARAKTER + 1=INDICATOR (Mendefinisikan buffer untuk menyimpan input dari pengguna. Byte pertama berisi kapasitas maksimum input (12 karakter), byte kedua akan diisi dengan jumlah karakter yang diinputkan oleh pengguna, dan 12 byte selanjutnya digunakan untuk menyimpan karakter input.)
- GANTI DB 13,10,'$'(Mendefinisikan string untuk mengatur posisi kursor ke baris berikutnya setelah input dicopy.
13
adalah carriage return (CR) dan10
adalah line feed (LF).) - LABOR_LEI2 DB 12 DUP(?) (Mendefinisikan buffer kosong untuk menyimpan salinan string yang diinputkan oleh pengguna)
- MULAI: MOV AH, 09H
MOV DX, OFFSET KATA
INT 21H ;MENCETAK KATA (Memuat nilai 09H ke register AH (untuk mencetak string menggunakan interrupt 21H), kemudian memuat alamat dari pesanKATA
ke register DX, dan memanggil interrupt 21H untuk menampilkan pesan ke layar)
- MOV AH, 0AH
MOV DX, OFFSET LABOR_LEI1
INT 21H ;AMBIL INPUT DARI KEYBOARD (Memuat nilai 0AH ke AH (untuk membaca input string dari keyboard menggunakan interrupt 21H), kemudian memuat alamat dariLABOR_LEI1
ke DX, dan memanggil interrupt 21H untuk mendapatkan input dari pengguna. Input disimpan di bufferLABOR_LEI1
)
- PUSH DS
POP ES ;MEMBUAT DS = ES (Menyimpan nilai DS ke stack dan kemudian mengisi ES dengan nilai yang sama dari DS. Ini memastikan bahwa data segment (DS) dan extra segment (ES) sama.)
- MOV SI,OFFSET LABOR_LEI1
INC SI ;1=INDIKATOR, BERAPA HURUF YG DIMASUKKAN(Memuat alamat dariLABOR_LEI1
ke register SI, kemudian menambah SI dengan 1 untuk melewati byte pertama (yang berisi panjang maksimum input))
- MOV CL,ES:[SI] ;MENGAMBIL BANYAKNYA KARAKTER YANG DIPUTKAN (Memuat jumlah karakter yang dimasukkan pengguna ke register CL dari alamat yang ditunjuk oleh SI)
- XOR CH,CH(Mengosongkan register CH, menjadikan CX sebagai counter 16-bit yang hanya berisi nilai CL)
- INC SI ;SI=SI+1. MENUJU KE KARAKTER PERTAMA YANG DIINPUTKAN
MOV DI, OFFSET LABOR_LEI2CLD (Menambah SI untuk mengarah ke karakter pertama dari input pengguna, lalu memuat alamatLABOR_LEI2
ke DI, yang digunakan sebagai tujuan untuk string yang akan disalin. CLD digunakan untuk memastikan instruksi copy berjalan maju (autoincrement))
- ULANG: MOVSB
LOOP ULANG ;ULANG SEBANYAK Cx (InstruksiMOVSB
memindahkan satu byte dari alamat yang ditunjuk oleh SI (source index) ke DI (destination index).LOOP ULANG
mengurangi nilai CX dan mengulangi loop hingga CX bernilai 0)
- MOV AL,'$' ;LETAKKAN '$' DI AKHIR TAMPUNG2
MOV DS:[DI],AL ;SUPAYA BISA DICEPAK DENGAN INT 21H (Memuat karakter$
ke register AL dan menyalinnya ke lokasi yang ditunjuk oleh DI sebagai penanda akhir string diLABOR_LEI2
, sehingga string bisa dicetak menggunakan interrupt 21H)
- MOV AH,09H
MOV DX, OFFSET GANTIINT 21H (Mencetak stringGANTI
yang berisi carriage return dan line feed untuk membuat baris baru sebelum mencetak hasil input yang telah disalin)
- MOV DX,OFFSET LABOR_LEI2
MOV AH,09HINT 21H (Memuat alamat dariLABOR_LEI2
ke DX dan memanggil interrupt 21H untuk menampilkan string yang telah disalin)
- MOV AH, 4CH
INT 21H (Mengakhiri program dengan mengembalikan kontrol ke sistem operasi (DOS))
Tidak ada komentar:
Posting Komentar