Topik 2
Topik 2
Topik 2 “Percabangan”
Tujuan :
• Agar mahasiswa dapat mengerti konsep percabangan pada ASC, serta mampu
menerapkannya pada praktikum.
• Agar mahasiswa dapat mengenal tentang proteksi-proteksi dengan menggunakan instruksi
percabangan.
• Agar mahasiswa dapat mengembangkan teori ke dalam praktikum dan tugas rancang.
Peralatan :
• 1 Set Komputer
• ASCASM
• ASCML
Dasar teori :
Secara umum, instruksi-instruksi yang ada pada ASC dikelompokkan menjadi 3 bagian
besar, yaitu :
• MRI (Memory Reference Instruction)
• RRI (Register Reference Instruction)
• IOI (Input Output Instruction)
Daftar instruksi pada ASC : LDA, STA, INP, INC, CMI, CMA, CME, CLA, CLE, ADD,
AND, CIL, CIR, CTR, CTL, SNA, SPA, SZA, SZE, ION, IOF, BUN, BSA, ORG, OUT, HLT.
Tiap instruksi akan dijelaskan lebih detail pada topik-topik selanjutnya. Untuk topik ini, kita
hanya perlu mengenal beberapa perintah dasar saja, seperti :
• ORG XXX : untuk memberikan alamat awal XXX
• HLT : menghentikan program secara paksa
• LDA VAR : untuk mengcopy nilai dari variabel VAR ke ACC
• STA VAR : untuk mengcopy nilai dari ACC ke variabel VAR
• ADD VAR : untuk menambah nilai yang sudah ada di ACC dengan nilai variable VAR,
lalu disimpan di ACC lagi atau ACC = ACC + VAR
• AND VAR : untuk melakukan operasi AND antara nilai yang sudah ada di ACC dengan
nilai variabel VAR, lalu disimpan di ACC lagi.
• INP : meminta sebuah inputan dari keyboard, lalu nilai ASCIInya akan disimpan
pada ACC. Misalkan kita memasukkan inputan ‘A’, maka ACC akan terisi
nilai 41h atau 65 desimal. (coba cek di tabel ASCII)
• OUT : menampilkan karakter yang nilai ASCIInya adalah nilai ACC saat itu ke
layar monitor. Misalkan pada ACC terdapat nilai 61h atau 97 desimal, maka
karakter yang ditampilkan adalah ‘a’.
• INC : mengincrement ACC. Dengan kata lain ACC = ACC + 1
• CMA : nilai ACC akan di 1’s complement, lalu disimpan di ACC lagi.
• CMI : nilai ACC akan di 2’s complement, lalu disimpan di ACC lagi.
• CLA : clear accumulator. Mereset nilai ACC menjadi 0h.
• CLE : clear Extended Bit. Mereset bit E menjadi 0.
• CIL : E dan ACC digeser secara circular ke kiri sebanyak satu kali
• CIR : E dan ACC digeser secara circular ke kanan sebanyak satu kali
• CTL : sama dengan 2x CIL
• CTR : sama dengan 2x CIR
Instruksi-instruksi percabangan dengan perbandingan (test case) pada bahasa ASC adalah
sebagai berikut :
• SNA : skip if negative ACC
Jika nilai ACC < 0 => skip
Jika nilai ACC ≥ 0 => run normally
• SPA : skip if positive ACC
Jika nilai ACC > 0 => skip
Jika nilai ACC ≤ 0 => run normally
• SPN : skip if positive or negative ACC
Jika nilai ACC ≠ 0 => skip
Jika nilai ACC = 0 => run normally
• SZA : skip if zero ACC
Jika nilai ACC = 0 => skip
Jika nilai ACC ≠ 0 => run normally
• SZE : skip if zero E bit
Jika nilai E = 0 => skip
Jika nilai E = 1 => run normally
SNA SPA
False case yes False case yes
dst dst
dst dst
Sebelum kita masuk contoh coding untuk percabangan, kita pelajari terlebih dahulu instruksi
“CMI”. Instruksi ini diperlukan untuk mempermudah proteksi percabangan.
ORG 100
INP ->meminta inputan (misal kita menekan “4” ASCII = 52)
CMI ->2’s complement dari ACC = -52
LDA A ->nilai ACC = 65
CMI ->2’s complement dari ACC = -65
HLT
A, DEC 65
Karena di ASCASM tidak memiliki instruksi “pengurangan” maka bisa kita gunakan cara
var1 + (- var2) = var1-var2. Selain CMI kita juga perlu mempelajari instruksi “BUN”. Instruksi
ini digunakan untuk loncat ke label yang ditunjuk.
ORG 100
AWL, BUN MEN ->loncat ke label “MEN”
LDA A ->dilewati
OUT ->dilewati
LDA B ->dilewati
OUT ->dilewati
LDA C ->dilewati
OUT ->dilewati
LDA D ->dilewati
OUT ->dilewati
MEN, LDA E >>menampilkan huruf “E” ke layar
OUT
HLT
A, DEC 65
B, DEC 66
C, DEC 67
D, DEC 68
E, DEC 69
ORG 100
MEN, INP
STA IN
ADD -49
SPN
BUN ME1
LDA IN
ADD -50
SPN
BUN ME2
BUN MEN
ME1, LDA S
OUT
LDA A
OUT
LDA T
OUT
LDA U
OUT
BUN SEL
ME2, LDA D
OUT
LDA U
OUT
LDA A
OUT
BUN SEL
SEL, HLT
IN, DEC 0
-49, DEC -49
-50, DEC -50
1, DEC 49
2, DEC 50
S, DEC 83
A, DEC 65
T, DEC 84
U, DEC 85
D, DEC 68
Penjelasan coding
Di dalam ASCASM proteksi hanya berupa instruksi pembanding ACC. Untuk coding
diatas kita menggunakan SPN yaitu Skip if Positif or Negatif ACC. Atau apabila nilai ACC tidak
sama dengan 0, maka akan skip 1 baris.
MEN, INP ->meminta inputan (dimisalkan kita menekan “2”)
STA IN ->nilai var “IN” adalah ASCII dari “2” = 50
ADD -49 ->nilai ACC ditambah var “-49” >> 50-49 =1
SPN ->nilai ACC =1 -> skip 1 baris (loncat ke baris LDA IN)
BUN ME1
LDA IN ->nilai ACC =50
ADD -50 ->nilai ACC =50-50 =0
SPN ->nilai ACC =0 sehingga tidak skip
BUN ME2 ->loncat ke label “ME2” (mencetak tulisan “DUA”)
BUN MEN
Coding ini adalah contoh penggunaan instruksi “SPN” untuk aplikasi proteksi menu.
Sehingga hanya dapat menekan angka 1 atau 2 saja.
Instruksi percabangan lainnya seperti SZA, SPA, dan SNA memiliki pola yang mirip.
Sekali lagi pecabangan ini hanya membandingkan nilai “ACC” saja.
Tugas Rumah
Buatlah sebuah program yang meminta 1 buah inputan angka antara 1 – 9 yang kemudian
hasilnya akan menampilkan bulan ke X sesuai dengan inputan X yang diberikan.
Ingat gunakan proteksi inputan seperti contoh proteksi menu.
Gambar 2. Contoh Program jika inputan yang diberikan tidak sesuai perintah
Tugas dikumpulkan paling lambat bersamaan dengan soal praktikum dimulai, di kirim ke
email
Dengan Format nama file yang dikirim Tugas2_[nim].asm
Disarankan untuk PRINT coding dan dibawa saat praktikum, karena akan membantu.
Konfirmasi ke asisten setelah mengirim tugas