123451. Pemrograman Assembly
πŸ–₯️ Dasar Sistem Komputer β€’ Pertemuan 8

Pemrograman Assembly dengan emu8086

Panduan lengkap struktur arsitektur mikroprosesor Intel 8086, instruksi tingkat rendah, dan tutorial penggunaan emulator emu8086 secara langkah demi langkah.

Kanal Pemateri: Program Studi Teknik Informatika, Universitas Ahmad Dahlan (UAD)
Tautan YouTube: Buka Video Sumber (K5TTCNchwVU) β†—

🎯 Tujuan Pembelajaran

Setelah mempelajari modul ini, mahasiswa mampu:

  1. Menjelaskan fungsi register utama 8086 (AX, BX, CX, DX, SP, segmen).
  2. Menulis, merakit, dan menjalankan program sederhana di emu8086.
  3. Menggunakan LOOP dan lompatan bersyarat (CMP + Jcc) untuk kontrol alur.
  4. Menggunakan INT 21h untuk input dan output.

🎯 1. Konsep Dasar & Pengenalan

Bahasa Assembly adalah bahasa pemrograman tingkat rendah (*low-level programming*) yang memiliki keterkaitan 1:1 dengan kode biner mesin yang dijalankan langsung oleh CPU. Di bahasa ini, Anda tidak bekerja dengan variabel abstrak melainkan langsung mengatur register dan alamat memori fisik.

πŸ’‘ Kenapa Mempelajari Bahasa Assembly?

Mempelajari Assembly memberikan pemahaman konkret mengenai siklus eksekusi instruksi CPU (Fetch-Decode-Execute), alokasi memori fisik, dan interaksi mendasar antara sistem operasi (DOS/BIOS) dengan perangkat keras.

βš™οΈ 2. Struktur Register Mikroprosesor Intel 8086

Prosesor Intel 8086 memiliki arsitektur internal 16-bit. Setiap instruksi memproses data melalui sejumlah register penyimpanan super cepat di dalam CPU.

2.1 General Purpose Registers (Register Serbaguna)

Register ini berukuran 16-bit dan masing-masing dapat dipecah menjadi dua register 8-bit independen (*High byte* dan *Low byte*):

AX (Accumulator Register) [16-bit] Terdiri dari AH (High) dan AL (Low). Digunakan untuk operasi aritmetika, logika, perkalian/pembagian, serta nomor layanan interupsi DOS.
BX (Base Register) [16-bit] Terdiri dari BH dan BL. Sering digunakan memegang alamat dasar (base address) saat mengakses array atau alamat memori tak langsung.
CX (Count Register) [16-bit] Terdiri dari CH dan CL. Digunakan sebagai penghitung perulangan (*loop counter*) dan shift/rotate bit secara otomatis.
DX (Data Register) [16-bit] Terdiri dari DH dan DL. Menampung data I/O port, hasil perkalian 32-bit, dan penunjuk alamat pesan string untuk DOS interrupt.

2.2 Pointer, Index & Segment Registers

  • Pointer & Index Registers:
    • SP (Stack Pointer): Menunjuk ke puncak tumpukan (*stack*).
    • BP (Base Pointer): Menunjuk ke data di stack frame fungsi.
    • SI (Source Index): Indeks sumber pemindahan blok memori.
    • DI (Destination Index): Indeks tujuan pemindahan blok memori.
  • Segment Registers:
    • CS (Code Segment): Tempat instruksi kode program disimpan.
    • DS (Data Segment): Tempat variabel dan konstanta program disimpan.
    • SS (Stack Segment): Segmen khusus untuk operasi push/pop memori tumpukan.
    • ES (Extra Segment): Segmen tambahan untuk operasi string atau array.

πŸ› οΈ 3. Mengenal Perangkat Lunak emu8086

Software emu8086 menggabungkan text editor, assembler, dan emulator CPU 8086 virtual dalam satu paket terpadu:

Komponen emu8086 Fungsi Utama
Source Editor Menulis kode sumber program Assembly dengan format ekstensi berkas .asm.
Assembler / Emulate Menerjemahkan kode Assembly ke kode biner mesin dan membuka emulator virtual.
Single Step (Step Into) Mengeksekusi program baris demi baris secara manual agar mahasiswa bisa melihat perubahan register di setiap instruksi.
Register & Flags Viewer Memantau nilai heksadesimal dalam register (AX, BX, CX, DX) serta status flag (ZF, CF, SF) secara real-time.
Virtual Screen Layar monitor DOS virtual untuk menampilkan keluaran grafis atau teks karakter.

πŸ’» 4. Praktik & Contoh Kode Program

4.1 Aritmetika Sederhana (Format .COM)

Program mengisi register dengan nilai dan melakukan operasi penambahan nilai:

program1_aritmetika.asm
ORG 100h          ; Titik awal segmen program format .COM (offset 100h)

MOV AX, 5         ; Masukkan angka desimal 5 ke register AX (AX = 0005h)
MOV BX, 10        ; Masukkan angka desimal 10 ke register BX (BX = 000Ah)
ADD AX, BX        ; AX = AX + BX (Hasil AX sekarang bernilai 15 desimal / 000Fh)

RET               ; Selesai, kembalikan kontrol ke sistem DOS

4.2 Mencetak Satu Karakter ke Layar (DOS Interrupt INT 21h)

Menggunakan service interupsi DOS nomor 02h untuk mencetak satu karakter ASCII:

program2_cetak_karakter.asm
ORG 100h

MOV AH, 02h       ; Layanan DOS nomor 02h: Menampilkan satu karakter
MOV DL, 'A'       ; Karakter yang akan dicetak ('A' = kode ASCII 41h) disimpan di DL
INT 21h           ; Panggil interupsi 21h (DOS Interrupt Service)

RET               ; Program selesai

4.3 Mencetak Kalimat / String

Menggunakan service interupsi DOS nomor 09h untuk mencetak teks yang diakhiri tanda dolar ($):

program3_cetak_string.asm
ORG 100h

MOV DX, OFFSET pesan  ; Masukkan alamat memori awal kalimat ke register DX
MOV AH, 09h          ; Layanan DOS nomor 09h: Cetak string berakhiran simbol '$'
INT 21h              ; Jalankan interupsi sistem DOS

RET                  ; Selesai

; Variabel Teks di Memori
pesan DB 'Halo Informatika UAD!$'

πŸ“‘ 5. Cheat Sheet Instruksi Cepat

Instruksi Format Sintaks Penjelasan
MOV MOV dest, src Menyalin data dari sumber (*src*) ke register/memori tujuan (*dest*).
ADD ADD dest, src Menjumlahkan isi dest = dest + src.
SUB SUB dest, src Mengurangkan isi dest = dest - src.
INC / DEC INC reg / DEC reg Menambah atau mengurangi nilai register sebesar 1 (+1 / -1).
INT 21h (AH=01h) MOV AH, 01h; INT 21h Membaca input 1 karakter dari keyboard (karakter disimpan ke register AL).
INT 21h (AH=02h) MOV AH, 02h; INT 21h Mencetak 1 karakter yang berada di register DL ke layar konsol.
INT 21h (AH=09h) MOV AH, 09h; INT 21h Mencetak seluruh teks string yang ditunjuk oleh register DX (diakhiri $).

πŸ§ͺ Praktik Lanjutan

4.4 Perulangan dengan LOOP (jumlahkan 5+4+3+2+1)

ORG 100h
MOV CX, 5          ; jumlah iterasi
MOV AX, 0          ; akumulator
ulang:
  ADD AX, CX       ; AX = AX + CX
  LOOP ulang       ; CX = CX - 1, lompat ke 'ulang' jika CX != 0
RET                ; akhir: AX = 000Fh (15)

Pakai Single Step dan amati CX turun dari 5 ke 0 sementara AX bertambah.

4.5 Percabangan dengan CMP dan JG

ORG 100h
MOV AX, 7
CMP AX, 5              ; bandingkan AX dengan 5 (atur flag)
JG  besar              ; lompat jika AX > 5 (signed)
MOV DX, OFFSET msg_kecil
JMP cetak
besar:
MOV DX, OFFSET msg_besar
cetak:
MOV AH, 09h
INT 21h
RET
msg_besar DB 'Lebih dari 5$'
msg_kecil DB 'Tidak lebih dari 5$'

Catatan sumber: bagian 1–4.3 dirangkum dari video kuliah kanal Prodi Teknik Informatika UAD (ID video K5TTCNchwVU); bagian 4.4–5 dan latihan merupakan tambahan penyusun.

πŸ“ Latihan Mandiri

Coba jawab dulu, lalu buka pembahasan.

Soal 1. Setelah MOV AX,1234h, berapa isi AH dan AL?

Pembahasan: AH = 12h (byte tinggi), AL = 34h (byte rendah).

Soal 2. Ubah program 4.4 agar menjumlahkan 1 sampai 10. Berapa hasil akhir AX?

Pembahasan: Ganti MOV CX,5 menjadi MOV CX,10. Hasil 55 desimal = 0037h.

Soal 3. Ubah program 4.5 agar mencetak pesan berbeda untuk AX = 5 tepat. Instruksi apa yang perlu ditambahkan?

Pembahasan: Gunakan CMP AX,5 lalu JE (jump if equal) ke label pesan khusus sebelum JG.

Soal 4. Mengapa string pada INT 21h AH=09h harus diakhiri tanda $?

Pembahasan: Layanan 09h tidak mengenal panjang string; ia berhenti mencetak ketika menemukan karakter $.

πŸ“š Referensi

  1. Irvine, K. R. Assembly Language for x86 Processors. Pearson.
  2. Hall, D. V. Microprocessors and Interfacing: Programming and Hardware. McGraw-Hill.
  3. Dokumentasi emu8086 (bawaan aplikasi).

Definisi istilah

Disimpan di browser ini. Klik istilah yang ditandai untuk mengubah atau menghapus penjelasan.