Modul Praktikum Bahasa
Rakitan
1 Laboratorium Elektronika
dan Teknik Digital
MODUL I
SISTEM BILANGAN DAN REGISTER
TUJUAN
􀂾 Mahasiswa mengenal sistem bilangan
􀂾 Mahasiswa mampu mengkonversikan sistem bilangan
􀂾 Menampilkan dan membaca isi register
􀂾 Mengetahui fungsi-fungsi register sebagai pengalamat data
DASAR TEORI
BERBAGAI JENIS BILANGAN
Didalam pemrograman dengan bahasa assembler, bisa digunakan
berbagai jenis
bilangan. Jenis bilangan yang bisa digunakan, yaitu: Bilangan
biner, oktaf, desimal
dan hexadesimal. Pemahaman terhadap jenis-jenis bilangan ini
adalah penting, karena
akan sangat membantu kita dalam pemrograman yang sesungguhnya.
BILANGAN BINER
Sebenarnya semua bilangan, data maupun program itu sendiri akan
diterjemahkan
oleh komputer ke dalam bentuk biner. Jadi pendefinisisan data
dengan jenis bilangan
apapun(Desimal, oktaf dan hexadesimal) akan selalu diterjemahkan
oleh komputer ke
dalam bentuk biner. Bilangan biner adalah bilangan yang hanya
terdiri atas 2
kemungkinan(Berbasis dua), yaitu 0 dan 1. Karena berbasis 2, maka
pengkorversian
ke dalam bentuk desimal adalah dengan mengalikan suku ke-N dengan
2N.
Contohnya: bilangan biner 01112 = (0 X 23) + (1 X 22) + (1 X 21) +
(1 X 20) = 710.
Modul Praktikum Bahasa Rakitan
2
BILANGAN DESIMAL
Tentunya jenis bilangan ini sudah tidak asing lagi bagi kita
semua. Bilangan Desimal
adalah jenis bilangan yang paling banyak dipakai dalam kehidupan
sehari-hari,
sehingga kebanyakan orang sudah akrab dengannya. Bilangan desimal
adalah
bilangan yang terdiri atas 10 buah angka(Berbasis 10), yaitu angka
0-9. Dengan basis
sepuluh ini maka suatu angka dapat dijabarkan dengan perpangkatan
sepuluh.
Misalkan pada angka 12310 = (1 X 102) + (2 X 101) + (1 X 100).
BILANGAN OKTAL
Bilangan oktal adalah bilangan dengan basis 8, artinya angka yang
dipakai hanyalah
antara 0-7. Sama halnya dengan jenis bilangan yang lain, suatu
bilangan oktal dapat
dikonversikan dalam bentuk desimal dengan mengalikan suku ke-N
dengan 8 N.
Contohnya bilangan 128 = (1 X 81) + (2 X 80) = 1010.
BILANGAN HEXADESIMAL
Bilangan hexadesimal merupakan bilangan yang berbasis 16. Dengan
angka yang
digunakan berupa: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Dalam
pemrograman assembler,
jenis bilangan ini boleh dikatakan yang paling banyak digunakan.
Hal ini dikarenakan
mudahnya pengkonversian bilangan ini dengan bilangan yang lain,
terutama dengan
bilangan biner dan desimal. Karena berbasis 16, maka 1 angka pada
hexadesimal
akan menggunakan 4 bit.
BILANGAN BERTANDA DAN TIDAK
Pada assembler bilangan-bilangan dibedakan lagi menjadi 2, yaitu
bilangan bertanda
dan tidak. Bilangan bertanda adalah bilangan yang mempunyai arti
plus(+) dan
minus(-), misalkan angka 17 dan -17. Pada bilangan tidak bertanda,
angka
negatif(yang mengandung tanda '-') tidaklah dikenal. Jadi angka
-17 tidak akan akan
dikenali sebagai angka -17, tetapi sebagai angka lain. Kapan suatu
bilangan
diperlakukan sebagai bilangan bertanda dan tidak? Assembler akan
selalu melihat pada
Sign Flag, bila pada flag ini bernilai 0, maka bilangan akan
diperlakukan sebagai
bilangan tidak bertanda, sebaliknya jika flag ini bernilai 1, maka
bilangan akan
diperlakukan sebagai bilangan bertanda. Pada bilangan bertanda bit
terakhir (bit ke
16) digunakan sebagai tanda plus(+) atau minus(-). Jika pada bit
terakhir bernilai 1
artinya bilangan tersebut adalah bilangan negatif, sebaliknya jika
bit terakhir bernilai
0, artinya bilangan tersebut adalah bilangan positif(Gambar 1.1).
+--------------------------------------------+
| >>>> Bilangan <<<< |
+------------+---------------+---------------+
| Biner |Tidak Bertanda | Bertanda |
+------------+---------------+---------------+
| 0000 0101 | + 5 | + 5 |
| 0000 0100 | + 4 | + 4 |
| 0000 0011 | + 3 | + 3 |
| 0000 0010 | + 2 | + 2 |
| 0000 0001 | + 1 | + 1 |
| 0000 0000 | 0 | 0 |
| 1111 1111 | + 255 | - 1 |
| 1111 1110 | + 254 | - 2 |
| 1111 1101 | + 253 | - 3 |
| 1111 1100 | + 252 | - 4 |
| 1111 1011 | + 251 | - 5 |
| 1111 1010 | + 250 | - 6 |
+------------+---------------+---------------+
PENGERTIAN REGISTER
Dalam pemrograman dengan bahasa Assembly, mau tidak mau anda harus
berhubungan dengan apa yang dinamakan sebagai Register. Lalu
apakah yang
dimaksudkan dengan register itu sebenarnya ?.
Register merupakan sebagian memori dari mikroprosesor yang dapat
diakses dengan
kecepatan yang sangat tinggi. Dalam melakukan pekerjaannya
mikroprosesor selalu
menggunakan register-register sebagai perantaranya, jadi register
dapat diibaratkan
sebagai kaki dan tangannya mikroprosesor.
JENIS-JENIS REGISTER
Register yang digunakan oleh mikroprosesor dibagi menjadi 5 bagian
dengan
tugasnya yang berbeda-beda pula, yaitu :
Segmen Register.
Register yang termasuk dalam kelompok ini terdiri atas register
CS,DS,ES dan SS
yang masing-masingnya merupakan register 16 bit. Register-register
dalam kelompok
ini secara umum digunakan untuk menunjukkan alamat dari suatu
segmen.
Register CS(Code Segment) digunakan untuk menunjukkan tempat
dari segmen yang
sedang aktif, sedangkan register SS(Stack Segment) menunjukkan
letak dari segmen
yang digunakan oleh stack. Kedua register ini sebaiknya tidak
sembarang diubah
karena akan menyebabkan kekacauan pada program anda nantinya.
Register DS(Data Segment) biasanya digunakan untuk menunjukkan
tempat segmen
dimana data-data pada program disimpan. Umumnya isi dari register ini
tidak perlu
diubah kecuali pada program residen. Register ES(Extra Segment), sesuai dengan
namanya adalah suatu register bonus yang tidak mempunyai suatu
tugas khusus.
Register ES ini biasanya digunakan untuk menunjukkan suatu alamat
di memory,
misalkan alamat memory video. Pada prosesor 80386 terdapat
tambahan register
segment 16 bit, yaitu FS<Extra Segment> dan GS<Extra
Segment>.
Pointer dan Index Register.
Register yang termasuk dalam kelompok ini adalah register SP,BP,SI
dan DI yang
masing-masing terdiri atas 16 bit. Register- register dalam
kelompok 16 ini secara
umum digunakan sebagai penunjuk atau pointer terhadap suatu lokasi
di memory.
Register SP(Stack Pointer) yang berpasangan dengan register
segment SS(SS:SP)
digunakan untuk mununjukkan alamat dari stack, sedangkan register BP(Base
Pointer)yang berpasangan dengan register SS(SS:BP) mencatat suatu
alamat di
memory tempat data.
Register SI(Source Index) dan register DI(Destination Index) biasanya digunakan
pada operasi string dengan mengakses secara langsung pada alamat
di memory yang
ditunjukkan oleh kedua register ini. Pada prosesor 80386 terdapat
tambahan register
32 bit, yaitu ESP,EBP,ESI dan EDI.
General Purpose Register.
Register yang termasuk dalam kelompok ini adalah register AX,BX,CX
dan DX yang
masing-masing terdiri atas 16 bit. Register- register 16 bit dari
kelompok ini
mempunyai suatu ciri khas, yaitu dapat dipisah menjadi 2 bagian
dimana masingmasing
bagian terdiri atas 8 bit, seperti pada gambar 4.1. Akhiran H menunjukkan
High sedangkan akhiran L menunjukkan Low.
+ A X + + B X + + C X + + D X +
+-+--+--+-+ +-+--+--+-+ +-+--+--+-+ +-+--+--+-+
| AH | AL | | BH | BL | | CH | CL | | DH | DL |
+----+----+ +----+----+ +----+----+ +----+----+
Secara umum register-register dalam kelompok ini dapat digunakan
untuk berbagai
keperluan, walaupun demikian ada pula penggunaan khusus dari
masing-masing
register ini yaitu :
􀂾 Register AX, secara khusus digunakan pada operasi aritmatika
terutama
dalam operasi pembagian dan pengurangan.
􀂾 Register BX, biasanya digunakan untuk menunjukkan suatu alamat
offset dari
suatu segmen.
􀂾 Register CX, digunakan secara khusus pada operasi looping
dimana register
ini menentukan berapa banyaknya looping yang akan terjadi.
􀂾 Register DX, digunakan untuk menampung sisa hasil pembagian 16
bit. Pada
prosesor 80386 terdapat tambahan register 32 bit, yaitu
EAX,EBX,ECX dan
EDX.
Index Pointer Register
Register IP berpasangan dengan CS(CS:IP) menunjukkan alamat
dimemory tempat
dari intruksi(perintah) selanjutnya yang akan dieksekusi. Register
IP juga merupakan
register 16 bit. Pada prosesor 80386 digunakan register EIP yang
merupakan register
32 bit.
Flags Register.
Sesuai dengan namanya Flags(Bendera) register ini menunjukkan
kondisi dari suatu
keadaan< ya atau tidak >. Karena setiap keadaan dapat
digunakan 1 bit saja, maka
sesuai dengan jumlah bitnya, Flags register ini mampu memcatat
sampai 16 keadaan.
Adapun flag yang terdapat pada mikroprosesor 8088 keatas adalah :
- OF <OverFlow Flag>. Jika terjadi OverFlow pada operasi
aritmatika, bit ini
akan bernilai 1.
- SF <Sign Flag>. Jika digunakan bilangan bertanda bit ini
akan bernilai 1
- ZF <Zero Flag>. Jika hasil operasi menghasilkan nol, bit
ini akan bernilai 1.
- CF <Carry Flag>. Jika terjadi borrow pada operasi
pengurangan atau carry
pada penjumlahan, bit ini akan bernilai 1.
- PF <Parity Flag>. Digunakan untuk menunjukkan paritas
bilangan. Bit ini
akan bernilai 1 bila bilangan yang dihasilkan merupakan bilangan
genap.
Modul Praktikum Bahasa Rakitan
7
- DF <Direction Flag>. Digunakan pada operasi string untuk
menunjukkan arah
proses.
- IF <Interrupt Enable Flag>. CPU akan mengabaikan interupsi
yang terjadi
jika bit ini 0.
- TF <Trap Flag>. Digunakan terutama untuk Debugging, dengan
operasi step
by step.
- AF <Auxiliary Flag>. Digunakan oleh operasi BCD, seperti
pada perintah
AAA.
- NT <Nested Task>. Digunakan pada prosesor 80286 dan 80386
untuk
menjaga jalannya interupsi yang terjadi secara beruntun.
- IOPL <I/O Protection level>. Flag ini terdiri atas 2 bit
dan digunakan pada
prosesor 80286 dan 80386 untuk mode proteksi.
- PE <Protection Enable>. Digunakan untuk mengaktifkan mode
proteksi. flag
ini akan bernilai 1 pada mode proteksi dan 0 pada mode real.
- MP <Monitor Coprosesor>. Digunakan bersama flag TS untuk
menangani
terjadinya intruksi WAIT.
- EM <Emulate Coprosesor>. Flag ini digunakan untuk
mensimulasikan
coprosesor 80287 atau 80387.
- TS <Task Switched>. Flag ini tersedia pada 80286 keatas.
- ET <Extension Type>. Flag ini digunakan untuk menentukan
jenis coprosesor
80287 atau 80387.
- RF <Resume Flag>. Register ini hanya terdapat pada
prosesor 80386 keatas.
- VF <Virtual 8086 Mode>. Bila flag ini bernilai 1 pada saat
mode proteksi,
mikroprosesor akan memungkinkan dijalankannya aplikasi mode real
pada
mode proteksi. Register ini hanya terdapat pada 80386 keatas.
Modul Praktikum Bahasa Rakitan
8
Perintah –Perintah Debug
• A : Merakit intruksi simbolik (kode mesin)
• D : menampilkan isi suatu daerah memori
• E : memasukan data ke memori yang dimulai pad lokasi
tertentu
• G : run executable program ke memori
• N : menamai program
• P : eksekusi sekumpulan intruksi yang terkait
• Q : quit
• R : menampilkan isi satu atau lebih register
• T : trace isi sebuah intruksi
• U : unassembled kode mesin ke kode simbolik
• W : menulis program ke disk
Instruksi Bahasa Assembly
Secara fisik, kerja dari sebuah komputer dapat dijelaskan sebagai
siklus
pembacaan instruksi yang tersimpan di dalam memori. komputer
menentukan alamat
dari memori program yang akan dibaca, dan melakukan proses baca
data di memori.
Data yang dibaca diinterprestasikan sebagai instruksi. Alamat
instruksi disimpan
oleh komputer di register, yang dikenal sebagai program counter. Instruksi ini
misalnya program aritmatika yang melibatkan 2 register.
Dalam bahasa Assembly mempunyai 3 tipe intruksi dasar yaitu :
mnemonic, operan1
dan 2 serta kometar
mnemonic operand1 operand2 komentar
(opcode)
MOV A, #30H ;kirim 30H ke akumulator A
Mnemonic atau opcode ialah kode yang akan melakukan
aksi terhadap operand . Operand
ialah data yang diproses oleh opcode. Sebuah opcode bisa
membutuhkan 1 ,2 atau lebih
operand, kadang juga tidak perlu operand. Sedangkan komentar dapat
kita berikan dengan
menggunakan tanda titik koma (;). Berikut contoh jumlah operand
yang berbeda beda dalam
suatu assembly.
CJNE R0,#22H, Tasmi ;dibutuhkan 3 buah operand
MOVX @DPTR, A ;dibutuhkan 2 buah operand
RR A ;1 buah operand
NOP ; tidak memerlukan operand
Semua instruksi tersebut dapat dibagi menjadi lima kelompok
menurut fungsinya, yaitu:
􀂾 Instruksi Pemindahan Data
􀂾 Instruksi Aritmatika
􀂾 Instruksi Logika dan Manipulasi Bit
􀂾 Instruksi Percabangan
􀂾 Instruksi Stack, I/O, dan Kontrol.
Prosedur Percobaan
1. Klik menu start pada computer
2. Pilih All Programs dan pilih accessories
3. Pilih command prompt
4. Lalu anda ketika debug pada bagian c prompt dan tekan Enter
5. Kemudian anda ketikan Huruf A 100 dan tekan Enter
6. Lalu teketikan program dibawah ini
MOV AX, 0090H
Modul Praktikum Bahasa Rakitan
10
MOV DS, AX
MOV SI,0120H
MOV DI, 0130H
MOV AX, SI
MOV DI, AX
INT 20H
7. Untuk melihat hasil dari program di atas ketika huruf T (Trace)
lalu tekan enter
dan lihat nilai dari tiap register
8. Untuk memberi nama pada program yang kita buat adalah dengan
mengetikan
huruf n nama
program.com
-n test.com
Tugas
1. Analisis Program yang anda dapat
2. Buatkan program untuk menukarkan isi data pada alamat memory
0120H dan
alamat memory 0130H
3. Buatkan Flowchart dari tugas no 2
Modul Praktikum Bahasa Rakitan
11
MODUL II
TURBO ASSEMBLY DAN MEMBUAT PROGRAM COM
TUJUAN
􀂾 Dapat memahami pembuatan program yang berektensi COM dan EXE
􀂾 Dapat menjalan program dengan mengunakan Tasm
DASAR TEORI
MODEL PROGRAM COM
Untuk membuat program .COM yang hanya menggunakan 1 segment,.
Bentuk yang
digunakan disini adalah bentuk program yang dianjurkan(Ideal).
Dipilihnya bentuk
program ideal dalam buku ini dikarenakan pertimbangan dari
berbagai keunggulan
bentuk program ideal ini seperti, prosesnya lebih cepat dan lebih
mudah digunakan
oleh berbagai bahasa tingkat tinggi yang terkenal(Turbo Pascal dan
C).
-----------------------------------------------------------
.MODEL SMALL
.CODE
ORG 100H
Label1 : JMP Label2
+---------------------+
| TEMPAT DATA PROGRAM |
+---------------------+
Label2 : +---------------------+
| TEMPAT PROGRAM |
+---------------------+
INT 20H
END Label1
-----------------------------------------------------------
Supaya lebih jelas bentuk dari program ideal, marilah kita
telusuri lebih lanjut dari
bentuk program ini.
Modul Praktikum Bahasa Rakitan
12
MODEL SMALL
Tanda directive ini digunakan untuk memberitahukan kepada
assembler bentuk
memory yang digunakan oleh program kita. Supaya lebih jelas model-model
yang
bisa digunakan adalah :
- TINY
Jika program anda hanya menggunakan 1 segment seperti program COM.
Model
ini disediakan khusus untuk program COM.
- SMALL
Jika data dan code yang digunakan oleh program kurang dari ukuran
1 segment
atau 64 KB.
- MEDIUM
Jika data yang digunakan oleh program kurang dari 64 KB tetapi
code yang
digunakan bisa lebih dari 64 KB.
- COMPACT
Jika data yang digunakan bisa lebih besar dari 64 KB tetapi
codenya kurang dari
64 KB.
- LARGE
Jika data dan code yang dipakai oleh program bisa lebih dari 64
KB.
- HUGE
Jika data, code maupun array yang digunakan bisa lebih dari 64 KB.
Mungkin ada
yang bertanya-tanya mengapa pada program COM yang dibuat digunakan
model
SMALL dan bukannya TINY ? Hal ini disebabkan karena banyak dari
compiler
bahasa tingkat tinggi yang tidak bisa berkomunikasi dengan model
TINY,
sehingga kita menggunakan model SMALL sebagai pemecahannya.
.CODE
Tanda directive ini digunakan untuk memberitahukan kepada
assembler bahwa
kita akan mulai menggunakan Code Segment-nya disini. Code segment
ini
digunakan untuk menyimpan program yang nantinya akan dijalankan.
Modul Praktikum Bahasa Rakitan
13
. ORG 100h
Pada program COM perintah ini akan selalu digunakan. Perintah ini
digunakan
untuk memberitahukan assembler supaya program pada saat
dijalankan(diload ke
memory) ditaruh mulai pada offset ke 100h(256) byte. Dapat
dikatakan juga bahwa
kita menyediakan 100h byte kosong pada saat program dijalankan.
100h byte
kosong ini nantinya akan ditempati oleh PSP(Program Segment
Prefix) dari
program tersebut. PSP ini digunakan oleh DOS untuk mengontrol
jalannya program
tersebut.
JMP
Perintah JMP(JUMP) ini digunakan untuk melompat menuju tempat yang
ditunjukkan oleh perintah JUMP. Adapun syntaxnya adalah:
JUMP Tujuan .
Dimana tujuannya dapat berupa label seperti yang digunakan pada
bagan diatas.
Mengenai perintah JUMP ini akan kita bahas lebih lanjut nantinya.
Perintah JUMP
yang digunakan pada bagan diatas dimaksudkan agar melewati tempat
data
program, karena jika tidak ada perintah JUMP ini maka data program
akan ikut
dieksekusi sehingga kemungkinan besar akan menyebabkan program
anda menjadi
Hang.
INT 20h
Perintah INT adalah suatu perintah untuk menghasilkan suatu
interupsi
INT NoInt
Interupsi 20h berfungsi untuk mengakhiri program dan menyerahkan
kendali
sepenuhnya kepada Dos. Pada program COM cara ini bukanlah
satu-satunya tetapi
cara inilah yang paling efektif untuk digunakan. Bila anda lupa
untuk mengakhiri
sebuah program maka program anda tidak akan tahu kapan harus
selesai, hal ini
akan menyebabkan komputer menjadi hang.
Modul Praktikum Bahasa Rakitan
14
PROSEDUR PERCOBAAN
1. Gunakan prog editor untuk membuat source program
.MODEL SMALL ;memory model
.CODE ;the following lines are program
instructions
ORG 100H
Proses:
mov ah,1h ;moves the value 1h to register ah
mov cx,07h ;moves the value 07h to register
cx
int 10h ;10h interruption
mov ah,4ch ;moves the value 4 ch to register
ah
int 21h ;21h interruption
END proses ;finishes the
2. Simpan Program yang sudah anda ketik dengan nama file
Latihan1.asm
3. Gunakan TASM untuk membuat program obyek
C:\>tasm \tasm latihan1.asm
4. Gunakan TLINK untuk membangun excutable program
C:\>tasm\tlink/t latihan1.obj
5. Jalan program yang sudah anda buat
C:\>tasm>latihan1
Modul Praktikum Bahasa Rakitan
15
MODUL III
FUNGSI INTTERUPT
(MENCETAK HURUF DAN KALIMAT)
TUJUAN
􀂾 Mengerti penggunakan register dalam mencentak kalimat
􀂾 Dapat mengerti fungsi dari int 21h
DASAR TEORI
Bila dihasilkan interupsi 21h apa yang akan dikerjakan oleh komputer
?. Jawabnya,
ada banyak sekali kemungkinan. Pada saat terjadi interupsi 21h
maka pertama-tama
yang dilakukan komputer adalah melihat isi atau nilai apa yang
terdapat pada register
AH. Misalkan bila nilai AH adalah 2 maka komputer akan mencetak
sebuah karakter,
berdasarkan kode ASCII yang terdapat pada register DL. Bila nilai
pada register AH
bukanlah 2, pada saat dilakukan interupsi 21h maka yang
dikerjakaan oleh komputer
akan lain lagi. Dengan demikian kita bisa mencetak sebuah karakter
yang diinginkan
dengan meletakkan angka 2 pada register AH dan meletakkan kode
ASCII dari
karakter yang ingin dicetak pada register DL sebelum menghasilkan
interupsi 21h.
;================================;
; PROGRAM : lat1.ASM ;
; FUNGSI : MENCETAK KARATER ;
; 'A' DENGAN INT 21 ;
;===============================;
.MODEL SMALL
.CODE
ORG 100h
Proses :
MOV AH,02h ; Nilai servis ntuk mencetak
karakter
MOV DL,'A' ; DL = Karakter ASCII yang akan
dicetak
INT 21h ; Cetak karakter !!
INT 20h ; Selesai ! kembali ke DOS
END Proses
Modul Praktikum Bahasa Rakitan
16
Kita lihat disini bahwa karakter yang tercetak adalah yang sesuai
dengan kode ASCII
yang ada pada register DL. Sebagai latihan cobalah anda ubah
register DL dengan
angka 65 yang merupakan kode ASCII karakter 'A'. Hasil yang
didapatkan adalah
sama.
.
MENCETAK BEBERAPA KARAKTER
Untuk mencetak beberapa karakter, bisa anda gunakan proses
looping. Sebagai
contoh dari penggunaan looping ini bisa dilihat pada program 7.3.
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; PROGRAM : lat2.ASM ;
; FUNGSI : MENCETAK 16 BUAH ;
; KARAKTER DENGAN ;
; INT 21h SERVIS 02 ;
;============================;
.MODEL SMALL
.CODE
ORG 100h
Proses :
MOV AH,02h ; Nilai servis
MOV DL,'A' ; DL=karakter 'A' atau DL=41h
MOV CX,10h ; Banyaknya pengulangan yang akan
Ulang :
INT 21h ; Cetak karakter !!
INC DL ; Tambah DL dengan 1
LOOP Ulang ; Lompat ke Ulang
INT 20h
END Proses
PROSEDUR PERCOBAAN
1. Tahap pertama dalam membuat program diatas, dimana listing ini
dapat anda tulis
mengunakan program EDIT dalam MS-DOS atau NOTEPAD
(ketik program
diatas)
2. Simpan Program yang telah anda ketik pada folder TASM
3. Aktifkan MS-DOS lalu masuk kedalam folder TASM
Modul Praktikum Bahasa Rakitan
17
4. Lalu ketik Program TASM.EXE dan ketik nama program yang telah
anda ketik
C:\tasm\tasm lat1.asm
Akan muncul infromasi tentang program anda
(bila ada error laihat
pada baris berapa yang terjasi kesalahan dan aktifkan
kembali program Edit dan buka file yang
telah anda bua dan cari update
program tersebutt)
5. Langka selajutnya anda merubah file anda yang telah menjadi
program yang
berekstensi OBJ menjadi COM or EXE
C:\tasm\tlink/t lat1.obj untuk program yang berektensi COM
C:\tasm\tlink lat1.obj Untuk program yang berektensi EXE
6. Lalu jalan program anda
C:\tasm\ lat1
Tugas
1. Analisi Program I dan II dan sebutkan perbedaan dari kedua
program
2. Buatkan program untuk mencetak huruf D
Modul Praktikum Bahasa Rakitan
18
MODUL IV
OPERASI ARITMATIKA
TUJUAN
􀂾 Mengerti tentang tambah satu kurang satu sautu register atau
lokasi
memory
􀂾 Mengerti tentang proses penambahan, pengurangan, pembagian dan
perkalian
DASAR TEORI
OPERASI PERNAMBAHAN
ADD
Untuk menambah dalam bahasa assembler digunakan perintah ADD dan ADC
serta INC. Perintah ADD digunakan dengan syntax :
ADD Tujuan,Asal
Perintah ADD ini akan menambahkan nilai pada Tujuan dan Asal.
Hasil yang
didapat akan ditaruh pada Tujuan, dalam bahasa pascal sama dengan
instruksi
Tujuan:=Tujuan + Asal. Sebagai contohnya :
MOV AH,15h ; AH:=15h
MOV AL,4 ; AL:=4
ADD AH,AL ; AH:=AH+AL, jadi AH=19h
Perlu anda perhatikan bahwa pada perintah ADD ini antara Tujuan
dan Asal harus
mempunyai daya tampung yang sama, misalnya register AH(8 bit) dan
AL(8 bit),
AX(16 bit) dan BX(16 bit).
Modul Praktikum Bahasa Rakitan
19
CONTOH (CODING):
; Menambah angka 74H pada
ADD AL,74H ; isi AL. Hasil dalam AL
; Menambah jumlah BL ditambah membawa status
ADD DX,BX ; pada isi DX
; Menambah huruf dari memory pada offset [SI]
ADD DX,[SI] ; dalam DS ke isi DX
; Menambah byte dari PRICES[BX]
ADD PRICES [BX],AL; isi memory pada address efektif
; PRICES[BX]
CONTOH (NUMERIK)
; Penambahan angka-angka yang tidak ditandai
; CL = 01110011 = 115 desimal
; + BL = 01001111 = 79 desimal
ADD CL,BL ; Hasil dalam CL
; CL = 11000010 = 194 desimal
; Penambahan angka-angka yang ditandai
; CL = 01110011 = + 115 desimal
; + BL = 01001111 = + 79 desimal
ADD CL,BL ; Hasil dalam CL
; CL = 11000010 = - 62 desimal –
; salah sebab hasil terlalu besar untuk ukuran 7 bit.
HASIL HASIL FLAG UNTUK CONTOH TAMBAHAN YANG
DITANDAI
CF = 0 Tidak membawa bit 7
PF = 0 Hasilnya memiliki keseimbangan ganjil
AF = 0 Carry dihasilkan diluar bit 3
ZF = 0 Hasil di tujuan bukan 0
Modul Praktikum Bahasa Rakitan
20
SF = 0 Hasil copy bit yang paling jelas:
menunjukkan hasil negatif jika Anda
menambahkan angka-angka yang ditandai.
OF = 0 Disiapkan untuk menunjukkan hasil penambahan terlalu besar
untuk masuk
dalam 7 bit bawah dari tujuan digunakan untuk mewakili besarnya
angka
yang ditandai. Dengan kata lain, hasilnya lebih besar dari +127
desimal,
maka hasilnya ditutupi menjadi tanda posisi bit dan menunjukkan
secara
tidak benar hasilnya negatif. Jika Anda menambahkan dua tanda
nilai 16-bit,
OF akan disiapkan jika besarnya hasil terlalu besar untuk dimuat
dalam 15
bit bawah tujuan.
ADC
Perintah ADC digunakan dengan cara yang sama pada perintah ADD,
yaitu :
ADC Tujuan,Asal
Perbedaannya pada perintah ADC ini Tujuan tempat menampung hasil
pertambahan Tujuan dan Asal ditambah lagi dengan carry flag
(Tujuan:=Tujuan+Asal+Carry). Pertambahan yang demikian bisa
memecahkan
masalah seperti yang pernah kita kemukakan, seperti pertambahan
pada bilangan
12345678h+9ABCDEF0h. Seperti yang telah kita ketahui bahwa satu
register hanya
mampu menampung 16 bit, maka untuk pertambahan seperti yang diatas
bisa anda
gunakan perintah ADC untuk memecahkannya, Contoh:
MOV AX,1234h ; AX = 1234h CF = 0
MOV BX,9ABCh ; BX = 9ABCh CF = 0
MOV CX,5678h ; BX = 5678h CF = 0
MOV DX,0DEF0h ; DX = DEF0h CF = 0
ADD CX,DX ; CX = 3568h CF = 1
ADC AX,BX ; AX = AX+BX+CF = ACF1
Hasil penjumlahan akan ditampung pada register AX:CX yaitu
ACF13568h.
Adapun flag-flag yang terpengaruh oleh perintah ADD dan ADC ini
adalah
CF,PF,AF,ZF,SF dan OF.
Modul Praktikum Bahasa Rakitan
21
INC
Perintah INC(Increment) digunakan khusus untuk pertambahan dengan
1.
Perintah INC hanya menggunakan 1 byte memory, sedangkan perintah
ADD dan
ADC menggunakan 3 byte. Oleh sebab itu bila anda ingin melakukan
operasi
pertambahan dengan 1 gunakanlah perintah INC. Syntax pemakainya
adalah :
INC Tujuan
Nilai pada tujuan akan ditambah dengan 1, seperti perintah
Tujuan:=Tujuan+1
dalam Turbo Pascal. Tujuan disini dapat berupa suatu register
maupun memory.
Contoh : perintah INC AL akan menambah nilai di register AL dengan
1. Adapun
flag yang terpengaruh oleh perintah ini adalah OF,SF,ZF,AF dan PF.
OPERASI PENGURANGAN
CONTOH:
; ASCII 9 – ASCII 5 (9 – 5)
; AL = 00111001 = 39H = ASCII 9
; BL = 00110101 = 35H = ASCII 5
SUB AL,BL ; Hasil: AL = 00000100 = BCD 04
; dan CF = 0
AAS ; Hasil: AL = 00000100 = BCD 04
; dan CF = 0; tidak diperlukan peminjaman
; ASCII 5 – ASCII 9 (5 – 9)
; Anggap AL = 00111001 = 35H = ASCII 5
; dan BL = 00110101 = 39H = ASCII 9
SUB AL, BL ; Hasil: AL = 11111100 = - 4
; dalam komplemen 2 dan CF = 1
AAS ; Hasil: AL = 00000100 = BCD 04
; dan CF = 1; diperlukan peminjaman
Modul Praktikum Bahasa Rakitan
22
Instruksi AAS menyisakan hasil dari hasil BCD yang benar pada angka bawah AL
dan menghapus angka atas AL pada semua 0. Jika Anda ingin mengirim
kembali ke
sebuah terminal CRT, Anda bisa melakukan OR AL dengan 30H untuk
menghasilkan
kode ASCII yang benar sebagai hasilnya. Jika perkalian digit angka
dicari hasil
pengurangannya, CF bisa diambil menjadi account dengan menggunakan instruksi
SBB ketika mengurangi digit berikutnya.
Instruksi AAS hanya berfungsi untuk register AL. Instruksi ini
memperbaharui AF dan CF tetapi OF, PF, SF, dan ZF tidak diterang
Untuk Operasi pengurangan dapat digunakan perintah SUB dengan
syntax:
SUB Tujuan,Asal
Perintah SUB akan mengurangkan nilai pada Tujuan dengan Asal.
Hasil yang didapat
akan ditaruh pada Tujuan, dalam bahasa pascal sama dengan
instruksi
Tujuan:=Tujuan-Asal.
Contoh :
MOV AX,15 ; AX:=15
MOV BX,12 ; BX:=12
SUB AX,BX ; AX:=15-12=3
SUB AX,AX ; AX=0
Untuk menolkan suatu register bisa anda kurangkan dengan dirinya sendiri
seperti
SUB AX,AX.
SBB
Seperti pada operasi penambahan, maka pada operasi pengurangan
dengan
bilangan yang besar(lebih dari 16 bit), bisa anda gunakan perintah
SUB disertai
dengan SBB(Substract With Carry). Perintah SBB digunakan dengan
syntax:
SBB Tujuan,Asal
Modul Praktikum Bahasa Rakitan
23
Perintah SBB akan mengurangkan nilai Tujuan dengan Asal dengan
cara yang
sama seperti perintah SUB, kemudian hasil yang didapat dikurangi
lagi dengan Carry
Flag(Tujuan:=Tujuan-Asal-CF).
DEC
Perintah DEC(Decrement) digunakan khusus untuk pengurangan dengan
1.
Perintah DEC hanya menggunakan 1 byte memory, sedangkan perintah
SUB dan
SBB menggunakan 3 byte. Oleh sebab itu bila anda ingin melakukan
operasi
pengurangan dengan 1 gunakanlah perintah DEC. Syntax pemakaian
perintah dec ini
adalah:
DEC Tujuan
Nilai pada tujuan akan dikurangi 1, seperti perintah
Tujuan:=Tujuan-1 dalam
Turbo Pascal. Tujuan disini dapat berupa suatu register maupun
memory. Contoh :
perintah DEC AL akan mengurangi nilai di register AL dengan 1.
OPERASI PERKALIAN
Untuk perkalian bisa digunakan perintah MUL dengan syntax:
MUL Sumber
Sumber disini dapat berupa suatu register 8 bit(Mis:BL,BH,..),
register 16 bit(Mis:
BX,DX,..) atau suatu varibel. Ada 2 kemungkinan yang akan terjadi
pada perintah
MUL ini sesuai dengan jenis perkalian 8 bit atau 16 bit.
Bila Sumber merupakan 8 bit seperti MUL BH maka komputer akan mengambil nilai
yang terdapat pada BH dan nilai pada AL untuk dikalikan. Hasil
yang didapat akan
selalu disimpan pada register AX. Bila sumber merupakan 16 bit
seperti MUL BX
maka komputer akan mengambil nilai yang terdapat pada BX dan nilai
pada AX
untuk dikalikan. Hasil yang didapat akan disimpan pada register DX
dan
AX(DX:AX), jadi register DX menyimpan Word tingginya dan AX
menyimpan
Word rendahnya.
Modul Praktikum Bahasa Rakitan
24
Sebelum Anda bisa mengalikan dua digit ASCII, Anda harus menutup 4
bit angka
atas dari masing-masing digit. Hal ini menyebabkan hasil BCD (satu digit BCD per
byte) pada setiap byte. Setelah dua hasil digit BCD dikalikan, instruksi AAM
digunakan untuk mengatur hasil dari dua hasil digit BCD dalam AX.
AAM berfungsi hanya setelah pengalian dari dua hasil byte BCD, dan AAM
hanya berfungsi hanya pada suatu operand dalam AL. AAM memperbaharui PF,
SF,
dan ZF, tetapi AF, CF, dan OF tidak diterangkan.
CONTOH:
; AL = 00000101 = hasil BCD 5
; BH = 00001001 = hasil BCD 9
MUL BH ; AL x BH ; hasil dalam AX
; AX = 00000000 00101101 = 002DH
AAM ; AX = 00000100 00000101 = 0405H,
; yang merupakan hasil BCD untuk angka 45.
; Jika menginginkan kode ASCII untuk hasilnya, gunakan instruksi
berikutnya
OR AX, 3030H ; Letakkan 3 pada angka atas di setiap byte.
; AX = 00110100 00110101 = 3435H,
; yang merupakan kode ASCII untuk angka 45
PEMBAGIAN
Operasi pada pembagian pada dasarnya sama dengan perkalian. Untuk
operasi
pembagian digunakan perintah DIV dengan syntax:
DIV Sumber
Bila sumber merupakan operand 8 bit seperti DIV BH, maka komputer akan
mengambil nilai pada register AX dan membaginya dengan nilai BH.
Hasil
Modul Praktikum Bahasa Rakitan
25
pembagian 8 bit ini akan disimpan pada register AL dan sisa dari
pembagian akan
disimpan pada register AH.
Bila sumber merupakan operand 16 bit seperti DIV BX, maka komputer akan
mengambil nilai yang terdapat pada register DX:AX dan membaginya
dengan nilai
BX. Hasil pembagian 16 bit ini akan disimpan pada register AX dan
sisa dari
pembagian akan disimpan pada register DX.
AAD mengubah dua hasil digit BCD menjadi AH dan AL
menjadi angka biner yang
seimbang dalam AL. Pengaturan ini harus dibuat sebelum membagi dua
hasil digit
BCD dalam AX dengan byte hasil BCD.
Setelah pembagian, AL akan berisi hasil
bagi dari hasil BCD dan AH akan berisi sisa hasil BCD. PF, SF, dan ZF diperbaharui.
AF, CF, dan OF tidak diterangkan setelah AAD.
CONTOH:
; AX = 0607H hasil BCD untuk 67 desimal
; CH = 09H, sekarang atur menjadi biner
AAD ; Hasil: AX = 0043 = 43H = 67 desimal
DIV CH ; Bagi AX dengan hasil BCD pada CH
; Hasil Bagi : AL = 07 hasil BCD
; Sisa : AH = 04 hasil BCD
; Flags tidak diterangkan setelah DIV
PROSEDUR PERCOBAAN
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; PROGRAM : TAMBAH.ASM ;
; FUNGSI : MELIHAT PENAMBAHAN ;
;==============================;
.MODEL SMALL
.CODE
ORG 100h
Proses :
MOV AH,15h ; AH:=15h
Modul Praktikum Bahasa Rakitan
26
MOV AL,4 ; AL:=4
ADD AH,AL ; AH:=AH+AL, jadi AH=19h
MOV AX,1234h ; NIlai AX:=1234h dan carry=0
MOV BX,0F221h ; Nilai BX:=F221h dan carry=0
ADD AX,BX ; AX:=AX+BX, jadi nilai AX=0455h
MOV AX,1234h ; AX = 1234h CF = 0
MOV BX,9ABCh ; BX = 9ABCh CF = 0
MOV CX,5678h ; BX = 5678h CF = 0
MOV DX,0DEF0h ; DX = DEF0h CF = 0
ADD CX,DX ; CX = 3568h CF = 1
ADC AX,BX ; AX = AX+BX+CF = ACF1
INC AL ; AL:=AL+1, nilai pada AL ditambah 1
INT 20h
END Proses
;================================;
; PROGRAM : KALI.ASM ;
; FUNGSI : MENGALIKAN BILANGAN;
;================================;
.MODEL SMALL
.CODE
ORG 100h
TData :
JMP Proses ; Lompat ke Proses
A DW 01EFh
B DW 02FEh
HslLo DW ?
HslHi DW ?
Proses:
MOV AX,A ; AX=1EF
MUL B ; Kalikan 1FH*2FE
MOV HslLo,AX ; AX bernilai C922 sehingga
HslLo=C922
MOV HslHi,DX ; DX bernilai 0005 sehingga
HslHi=0005
INT 20h ; Kembali ke DOS
END TData
Prosedur Percobaan
1. ketik program diatas dengan mengunakan program EDIT dalam MS-DOS atau
NOTEPAD atau program simulator(sms)
2. Simpan Prograam yang telah anda ketik pada folder TASM
Modul Praktikum Bahasa Rakitan
27
3. Aktifkan MS-DOS lalu masuk kedalam folder TASM
4. Lalu ketik Program TASM.EXE dan ketik nama program yang telah
anda ketik
5. Langka selajutnya anda merubah file anda yang telah menjadi
program yang
berekstensi OBJ menjadi COM or EXE
6. Lalu jalan program anda
Tugas
Buat program untuk membagi bilangan 1- 9 dengan bilangan 2 dan
disimpan dengan
nama lat4.asm
Modul Praktikum Bahasa Rakitan
28
MODUL V
INSTRUKSI BANDING DAN LOMPAT
TUJUAN
􀂾 Memahami intruksi percabangan
􀂾 Memahami teknik merancang program percabangan
DASAR TEORI
LOMPAT TANPA SYARAT
Perintah JMP(Jump), sudah pernah kita gunakan, dimana perintah ini
digunakan
untuk melompati daerah data program. Perintah JMP digunakan dengan
syntax:
JMP Tujuan
Perintah JMP ini dikategorikan sebagai Unconditional Jump, karena
perintah ini
tidak menyeleksi keadaan apapun untuk melakukan suatu
lompatan.Setiap ditemui
perintah ini maka lompatan pasti dilakukan. Selain dari perintah
jump tanpa syarat,
masih banyak perintah Jump yang menyeleksi suatu keadaan tertentu
sebelum
dilakukan lompatan. Perintah jump dengan penyeleksian kondisi
terlebih dahulu
biasanya diikuti dengan perintah untuk melihat kondisi, seperti
membandingkan
dengan perintah "CMP"(Compare).
MEMBANDINGKAN DENGAN CMP
Perintah CMP(Compare) digunakan untuk membandingkan 2 buah
operand,
dengan syntax:
CMP Operand1,Operand2
CMP akan membandingkan operand1 dengan operand2 dengan cara
mengurangkan operand1 dengan operand2. CMP tidak mempengaruhi
nilai Operand1
Modul Praktikum Bahasa Rakitan
29
dan Operand2, perintah CMP hanya akan mempengaruhi flags register
sebagai hasil
perbandingan. Adapun flag-flag yang terpengaruh oleh perintah CMP
ini adalah:
- OF akan 1, jika operand1 lebih kecil dari operand2 pada operasi
bilangan bertanda.
- SF akan 1, bila operand1 lebih kecil dari operand2, pada operasi
bilangan bertanda.
- ZF akan 1, jika operand1 nilainya sama dengan operand2.
- CF akan 1, jika operand1 lebih kecil dari operand2 pada operasi
bilangan tidak
bertanda.
Perlu anda ingat bahwa CMP tidak dapat membandingkan antar 2
lokasi memory.
LOMPAT YANG MENGIKUTI CMP
Perintah CMP yang hanya mempengaruhi flag register, biasanya
diikuti dengan
perintah lompat yang melihat keadaan pada flags register ini.
Jenis perintah lompat
yang biasanya mengikuti perintah CMP, terdapat 12 buah seperti
-----------------------------+----------------------------------
Perintah Lompat | Kondisi
-----------------------------+----------------------------------
JA <Jump If Above> | Lompat, jika
Operand1 > Operand2
| untuk bilangan tidak bertanda
JG <Jump If Greater> | Lompat, jika
Operand1 > Operand2
| untuk bilangan bertanda
JE <Jump If Equal> | Lompat, jika
Operand1 = Operand2
JNE <Jump If Not Equal> | Lompat, jika
Operand1 tidak sama
| dengan Operand2
JB <Jump If Below> | Lompat, jika
Operand1 < Operand2
| untuk bilangan tidak bertanda
JL <Jump If Less> | Lompat, jika
Operand1 < Operand2
| untuk bilangan bertanda
JBE <Jump If Below or Equal> | Lompat,
jika operand1 <= Operand2
| untuk bilangan tidak bertanda
JLE <Jump If Less or Equal> | Lompat,
jika Operand1 <= Operand2
| untuk bilangan bertanda
JAE <Jump If Above or Equal> | Lompat,
jika Operand1 >= Operand2
| untuk bilangan tidak bertanda
JGE <Jump If Greater or | Lompat, jika
Operand1 >= Operand2
Equal> | untuk bilangan bertanda
-----------------------------+----------------------------------
Modul Praktikum Bahasa Rakitan
30
LOMPAT BERSYARAT
Instruksi ini dapat dilihat pada tabel dibawah yang menjelaskan
masalah ada
atau tidak adanya syarat status tertentu
Mnemonic Arti Format Operasi Flag efect
Jcc Lompat bersyarat Jcc operand Jika syarat cc benar maka
lompat ke alamat
ditentukan. Jika tidak
instruksi selanjutnya
dilanjutkan
None
-----------------------------+----------------------------------
Perintah Lompat | Kondisi
-----------------------------+----------------------------------
JA <Jump If Above> | Lompat, jika
Operand1 > Operand2
| untuk bilangan tidak bertanda
JG <Jump If Greater> | Lompat, jika
Operand1 > Operand2
| untuk bilangan bertanda
JE <Jump If Equal> | Lompat, jika
Operand1 = Operand2
JNE <Jump If Not Equal> | Lompat, jika
Operand1 tidak sama
| dengan Operand2
JB <Jump If Below> | Lompat, jika
Operand1 < Operand2
| untuk bilangan tidak bertanda
JL <Jump If Less> | Lompat, jika
Operand1 < Operand2
| untuk bilangan bertanda
JBE <Jump If Below or Equal> | Lompat,
jika operand1 <= Operand2
| untuk bilangan tidak bertanda
JLE <Jump If Less or Equal> | Lompat, jika
Operand1 <= Operand2
| untuk bilangan bertanda
JAE <Jump If Above or Equal> | Lompat,
jika Operand1 >= Operand2
| untuk bilangan tidak bertanda
JGE <Jump If Greater or | Lompat, jika
Operand1 >= Operand2
Equal> | untuk bilangan bertanda
JC <Jump Carry> | Lompat, jika Carry
flag=1
JCXZ <Jump If CX is Zero> | Lompat, jika
CX=0
JNA <Jump If Not Above> | Lompat, jika
Operand1 < Operand2
| dengan CF=1 atau ZF=1
JNAE <Jump If Not Above nor | Lompat, jika
Operand1 < Operand2
Equal> | dengan CX=1
JNB <Jump If Not Below> | Lompat, jika
Operand1 > Operand2
| dengan CF=0
JNBE <Jump If Not Below nor | Lompat, jika
Operand1 > Operand2
Equal> | dengan CF=0 dan ZF=0
JNC <Jump If No Carry> | Lompat, jika
CF=0
JNG <Jump If Not Greater> | Lompat, jika
Operand1 <= Operand2
| dengan ZF=1 atau SF tidak sama OF
JNGE <Jump If Not Greater | Lompat, jika
Operand1 <= Operand2
Nor Equal> | dengan SF tidak sama OF
JNL <Jump If Not Less> | Lompat, jika
Operand1 >= Operand2
| dengan SF=OF
Modul Praktikum Bahasa Rakitan
31
JNLE <Jump If Not Less | Lompat, jika
Operand1 > Operand2
Nor Equal> | dengan ZF=0 dan SF=OF
JNO <Jump If No Overflow> | Lompat, jika
tidak terjadi
| tidak terjadi Overflow
JNP <Jump If Not Parity> | Lompat, jika
Ganjil
JNS <Jump If No Sign> | Lompat, jika
SF=0
JNZ <Jump If Not Zero> | Lompat, jika
tidak 0
JO <Jump On Overflow> | Lompat, jika
OF=1
JP <Jump On Parity> | Lompat, jika Genap
JPE <Jump If Parity Even> | Lompat, jika
PF=1
JPO <Jump If Parity Odd> | Lompat, jika
PF=0
JS <Jump On Sign> | Lompat, jika SF=1
JZ <Jump Is zero> | Lompat, jika 0
-----------------------------+----------------------------------
PROSEDUR PERCOBAAN
;/=========================================\;
; Program : CMPJ.ASM ;
; Fungsi : Mendemokan perintah lompat ;
;\=========================================/;
.MODEL SMALL
.CODE
ORG 100h
TData: JMP Proses
BilA DB 67
BilB DB 66
Kal0 DB 'Bilangan A lebih kecil dari bilangan
B $'
Kal1 DB 'Bilangan A sama dengan bilangan B $'
Kal2 DB 'Bilangan A lebih besar dari bilangan
B $'
Proses:
MOV AL,BilA ; Masukkan bilangan A pada AL
CMP AL,BilB ; Bandingkan AL(BilA) dengan
Bilangan B
JB AKecil ; Jika BilA < BilB, lompat ke
AKecil
JE Sama ; Jika BilA = BilB, lompat ke Sama
JA ABesar ; Jika BilA > BilB, lompat ke
ABesar Akecil:
LEA DX,Kal0 ; Ambil offset Kal0
JMP Cetak ; Lompat ke cetak
Sama:
LEA DX,Kal1 ; Ambil offset Kal1
JMP Cetak ; Lompat ke cetak ABesar:
LEA DX,Kal2 ; Ambil offset Kal2
Cetak:
MOV AH,09 ; Servis untuk mencetak kalimat
INT 21h ; Cetak kalimat !!
EXIT: INT 20h ; Kembali ke DOS.
END TData
Modul Praktikum Bahasa Rakitan
32
;/================================================\;
; Program : JMPL.ASM ;
; Fungsi : Mencetak kalimat secara perkarakter
;
;\================================================/;
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
Kal DB ' Lucky Luck menembak ',13,10
DB 'Lebih cepat dari bayangannya !! ',7,7,'*'
Proses:
XOR BX,BX ; BX=0
MOV AH,02h ; Servis Untuk Cetak Karakter
Ulang:
CMP Kal[BX],'*' ; Bandingkan dengan '*'
JE Exit ; Jika Sama Lompat ke Exit
MOV DL,Kal[BX] ; Masukkan karakter ke BX
menuju DL
INT 21h ; Cetak karakter
INC BX ; Tambah 1 pada BX
JMP Ulang ; Lompat Ke Ulang
Exit: INT 20h ; Selesai ! kembali ke DOS
END TData
1. Tahap pertama dalam membuat program adalah menulis listrik,
dimana listing ini
dapat anda tulis mengunakan program EDIT dalam MS-DOS atau NOTEPAD
(ketik program diatas)
2. Simpan Prograam yang telah anda ketik pada folder TASM
3. Aktifkan MS-DOS lalu masuk kedalam folder TASM
4. Lalu ketik Program TASM.EXE dan ketik nama program yang telah
anda ketik
5. Langka selajutnya anda merubah file anda yang telah menjadi
program yang
berekstensi OBJ menjadi COM or EXE
6. Lalu jalan program anda
Modul Praktikum Bahasa Rakitan
33
MODUL VI
STACK DAN SUBROTINE DAN PROCEDURE
TUJUAN
􀂾 Memahami arti dan pengunaan dari stack
􀂾 Memahami teknik merancang dan menggunakan sobroutine
DASAR TOERI
APA ITU STACK
Bila kita terjemahkan secara bebas, stack artinya adalah
'tumpukan'. Stack
adalah bagian memory yang digunakan untuk menyimpan nilai dari
suatu register
untuk sementara. Operasi- operasi pada assembler yang langsung
menggunakan stack
misalnya pada perintah PUSH, POP, PUSF dan POPF. Pada program COM
yang
hanya terdiri atas satu segment, dimanakah letak dari memory yang
digunakan untuk
stack ?. Seperti pasangan CS:IP yang menunjukkan lokasi dari
perintah selanjutnya
yang akan dieksekusi, pada stack digunakan pasangan SS:SP untuk
menunjukkan
lokasi dari stack.
PUSH DAN POP
Stack dapat kita bayangkan sebagai sebuah tabung yang panjang.
Sedangkan
nilai pada register dapat dibayangkan berbentuk koin yang dapat
dimasukkan dalam
tabung tersebut. Untuk memasukkan nilai suatu register pada stack,
digunakan
perintah push dengan syntax:
PUSH Reg16Bit
Sebagai contohnya pada perintah:
MOV AX,12
MOV BX,33
MOV CX,99
Modul Praktikum Bahasa Rakitan
34
PUSH AX ; Simpan nilai AX pada stack
PUSH BX ; Simpan nilai BX pada stack
PUSH CX ; Simpan nilai CX pada stack
Untuk mengambil keluar koin nilai pada tabung stack, digunakan
perintah pop
dengan syntax:
POP Reg16Bit
Perintah POP akan mengambil koin nilai pada stack yang paling atas
dan
dimasukkan pada Reg16Bit. Dari sini dapat anda lihat bahwa data
yang terakhir
dimasukkan akan merupakan yang pertama dikeluarkan. Inilah
sebabnya operasi
stack dinamankan LIFO(Last In First Out). Sebagai
contohnya, untuk mengambil
nilai dari register AX, BX dan CX yang disimpan pada stack harus
dilakukan pada
register CX dahulu barulah BX dan AX, seperti:
POP CX ; Ambil nilai pada puncak stack,
masukkan ke CX
POP BX ; Ambil nilai pada puncak stack,
masukkan ke BX
POP AX ; Ambil nilai pada puncak stack,
masukkan ke AX
Bila anda terbalik dalam mengambil nilai pada stack dengan POP AX
kemudian
POP BX dan POP CX, maka nilai yang akan anda dapatkan pada
register AX, BX
dan CX akan terbalik. Sehingga register AX akan bernilai 99 dan CX
akan bernilai
12.
Seperti yang telah kita ketahui, data tidak bisa dicopykan antar
segment atau
memory. Untuk mengcopykan data antar segment atau memory anda
harus
menggunakan register general purpose sebagai perantaranya,
seperti:
MOV AX,ES ; Untuk menyamakan register
MOV DS,AX ; ES dan DS
Dengan adanya stack, anda bisa menggunakannya sebagai perantara,
sehingga akan
tampak seperti:
PUSH ES ; Untuk menyamakan register
POP DS ; ES dan DS
Modul Praktikum Bahasa Rakitan
35
SUBROUTINE
Subroutine adalah prosedur yang ditulis terpisah dari program
utama. Bilamana
program utama harus menjalankan fungsi yang didefenisikan oleh
subroutine, maka
subroutine harus dipanggil kedalam operasi. Untuk kerja ini harus
dilepaskan dari
program utama ke tempat subroutine. Perhatikan hal ini lah yang
membedahkan
antara subroutine dengan lompta, tidak hanya prosedur lompat pada
alamat yang tepat
dalam kode segment, tetapi itu memiliki juga mekanisme untuk menyimpan
informasi masing-masing IP dan CS, itu diperlukan kembali ke
program utama.
Dalam pemanggilan subroutine mengizinkan dua tipe operasi yaitu
call intrasegment
dan ret. Call di gunakan untuk memanggil subroutine dan Ret untuk
kembali ke
program utama
PROSEDUR PERCOBAAN
;/=========================================\;
; Program : NSTACK.ASM ;
; Fungsi : Mencetak kalimat 2 kali ;
;\=========================================/;
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
Kal DB 'TASMI TASMI TASMI $'
Ganti DB 13,10,'$'
Stacks DW ?
Proses:
LEA DX,Kal
MOV Stacks,DX
MOV AH,09
INT 21h
LEA DX,Ganti
INT 21h
MOV DX,Stacks
INT 21h
Exit: INT 20h
END TData
Modul Praktikum Bahasa Rakitan
36
;/=========================================\;
; Program : STACK.ASM ;
; Fungsi : Mencetak kalimat 2 kali ;
;\=========================================/;
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
Kal DB 'TASMI TASMI TASMI $'
Ganti DB 13,10,'$'
Stacks DW ?
Proses:
LEA DX,Kal
PUSH DX
MOV AH,09
INT 21h
LEA DX,Ganti
INT 21h
POP DX
INT 21h
Exit: INT 20h
END TData
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; PROGRAM : PROC_KAR.ASM ;
; FUNGSI : MENCETAK KARATER ;
;============================;
.MODEL SMALL
.CODE
ORG 100h
Proses : CALL Cetak_Kar ; Panggil Cetak_Kar
INT 20h
Cetak_Kar PROC NEAR
MOV AH,02h
MOV DL,'S'
INT 21h ; Cetak karakter
RET ; Kembali kepada si pemanggil
Cetak_Kar ENDP ; END Procedures
END Proses
1. Tahap pertama dalam membuat program adalah menulis listrik,
dimana listing ini
dapat anda tulis mengunakan program EDIT dalam MS-DOS atau NOTEPAD
(ketik program diatas)
Modul Praktikum Bahasa Rakitan
37
2. Simpan Prograam yang telah anda ketik pada folder TASM
3. Aktifkan MS-DOS lalu masuk kedalam folder TASM
4. Lalu ketik Program TASM.EXE dan ketik nama program yang telah
anda ketik
5. Langka selajutnya anda merubah file anda yang telah menjadi
program yang
berekstensi OBJ menjadi COM or EXE
6. Lalu jalan program anda
Tugas
latihan buatkan program dengan memanggil untuk menambahkan 2 data
8 byte yang
disimpan dalam memory 1A00h
Modul Praktikum Bahasa Rakitan
38
MODUL VII
MACRO
TUJUAN
􀂾 Dapat mengenal proses macro
􀂾 Dapat menerapkanya macro untuk apliaksi sederhana
DASAR TEORI
Macro hampir sama dengan procedure, yang dapat membantu anda dalam
membuat
program yang besar. Dengan Macro anda tidak perlu menggunakan
perintah "CALL"
dan anda juga bisa menggunakan parameter dengan mudah. Suatu ciri
dari
pemrograman bahasa tingkat tinggi!
Macro adalah lebih mudah dibuat daripada procedure. Untuk membuat
Macro bisa
anda gunakan bentuk seperti pada gambar
---------------------------------------------------------------
NamaM MACRO [P1,P2,,]
+------------+
| Program |
+------------+
ENDM
---------------------------------------------------------------
"P1" dan "P2" adalah parameter yang bisa anda
gunakan pada macro. Parameter ini
berbentuk optional, artinya bisa digunakan ataupun tidak. Supaya
lebih jelas bisa
anda lihat pada program MAC1 yang menggunakan macro ini untuk
mencetak
karakter.
Cetak_Kar MACRO Kar
MOV CX,3
MOV AH,02
Modul Praktikum Bahasa Rakitan
39
MOV DL,Kar
Ulang :
INT 21h ; Cetak Karakter
LOOP Ulang
ENDM ; End Macro
.MODEL SMALL
.CODE
ORG 100h
Proses:
Cetak_Kar 'S' ; Cetak Huruf S
INT 20h
END Proses
Dari program MAC1 bisa anda lihat betapa mudahnya untuk
menggunakan macro.
Pada procedure, setiap kali kita memanggilnya dengan perintah CALL
maka program
akan melompat pada procedure tersebut, sehingga setiap procedure
hanya terdapat
satu kali saja pada program. Lain halnya dengan Macro, setiap
terjadi pemanggilan
terhadap macro atau dapat dikatakan secara kasar, setiap kita
memanggil macro
dengan menuliskan nama macronya dalam program, maka seluruh isi
macro akan
dipindahkan pada program yang memanggilnya. Dengan demikian bila
pada program
anda memanggil suatu macro sebanyak 10 kali maka macro tersebut
akan disisipkan
10 kali pada program. Hal inilah yang menyebabkan program yang
menggunakan
macro ukuran programnya menjadi lebih besar. Tetapi hal ini juga
yang
menyebabkan program yang menggunakan macro lebih cepat daripada
procedure,
karena pada procedure komputer harus melakukan lompatan tetapi
pada macro tidak
perlu.
Cetak_Kar MACRO Kar
LOCAL Ulang ; Label 'Ulang' jadikan Local
MOV CX,3
MOV AH,02
MOV DL,Kar
Ulang:
INT 21h ; Cetak Karakter
LOOP Ulang
Modul Praktikum Bahasa Rakitan
40
ENDM ; End Macro
.MODEL SMALL
.CODE
ORG 100h
Proses:
Cetak_Kar 'P' ; Cetak Huruf P
Cetak_Kar 'C' ; Cetak Huruf C
INT 20h
END Proses
1. Tahap pertama dalam membuat program adalah menulis listrik,
dimana listing ini
dapat anda tulis mengunakan program EDIT dalam MS-DOS atau NOTEPAD
(ketik program diatas)
2. Simpan Prograam yang telah anda ketik pada folder TASM
3. Aktifkan MS-DOS lalu masuk kedalam folder TASM
4. Lalu ketik Program TASM.EXE dan ketik nama program yang telah anda
ketik
5. Langka selajutnya anda merubah file anda yang telah menjadi
program yang
berekstensi OBJ menjadi COM or EXE
6. Lalu jalan program anda
Modul Praktikum Bahasa Rakitan
41
MODULVIII
MASUKAN DARI KEYBOARD
TUJUAN
􀂾 Dapat mengenal port input dan output
􀂾 Dapat menerapkanya untuk apliaksi sederhana
DASAS TEORI
Keyboard merupakan sarana bagi kita untuk berkomunikasi dengan
program.
Pada bagian ini akan kita lihat bagaimana caranya untuk menanggapi
masukan dari
keyboard. Tetapi sebelumnnya anda tentunya harus mengerti sedikit
mengenai
beberapa hal penting yang berkaitan dengan keyboard itu.
KODE SCAN DAN ASCII
Prosesor pada keyboard mendeteksi setiap penekanan maupun
pelepasan tombol
pada keyboard. Prosesor ini menterjemahkan setiap sinyal yang
terjadi berdasarkan
posisi tertentu menjadi apa yang dinamakan kode Scan. Dengan
demikian tombol "A"
dan "B" akan mempunyai kode Scan yang berbeda karena
posisinya memang
berbeda. Lain halnya untuk tombol "A"<A besar> dan
"a"<a kecil> yang terdapat
pada posisi yang sama, akan mempunyai kode Scan yang sama. Kode
Scan ini
biasanya tidak berguna bagi kita. Kita biasanya hanya menggunakan
kode ASCII dan
Extended yang merupakan hasil terjemahan dari kode scan oleh
keyboard handler.
Kode ASCII adalah kode yang melambangkan suatu karakter baik
berupa
huruf,angka, maupun simbol-simbol grafik. Misalkan angka
"1" akan dilambangkan
dengan kode ASCII 49. Untuk kode ASCII ini bisa anda lihat pada
lampiran.
APA ITU KODE EXTENDED ?
Kode ASCII telah menyediakan sebanyak 256 karakter dengan beberapa
karakter kontrol, misalnya #10 untuk pindah baris dan #13 untuk
Enter yang akan
menggerakkan kursor kesamping kiri. Tetapi fungsi yang telah
disediakan ini tidak
Modul Praktikum Bahasa Rakitan
42
mampu untuk menampilkan ataupun mendeteksi tombol fungsi misalnya
F1, F2, F3
dan Home. Tombol kombisasi juga tidak dapat dideteksi oleh
karakter ASCII ,
misalnya penekan tombol shif disertai tombol F1, penekanan Ctrl
disertai tombol
Home, dan lain-lain. Penekanan terhadap tombol-tombol fungsi dan
tombol
kombinasi akan menghasilkan kode ASCII 0<nil>. Karena alasan
diatas maka
diciptakanlah suatu kode yang dinamakan sebagai kode EXTENDED.
Kode
Extended ini dapat mendeteksi penekanan terhadap tombol-tombol
fungsi maupun
tombol kombinasi. Untuk kode extended bisa anda
PROSEDUR PERCOBAAN
;####################################################
; Program : kunci.asm
; Fungsi : mengunci keyboard
;####################################################
code_seg segment
assume cs:code_seg
org 100h
start: jmp mulai
kata1 db'Selamat anda Bisa Menggunakan
komputer ini',13,10,'$'
kata2 db'Silakan masukan kata kunci
sekarang!',13,10,'$'
mulai: mov ah,09h
mov dx,offset kata2
int 21h
masuk: mov ah,07h
int 21h
cmp al,'t'
je lewat1
cmp al,'T'
jne masuk
lewat1: mov ah,07h
int 21h
cmp al,'a'
je lewat2
cmp al,'A'
Modul Praktikum Bahasa Rakitan
43
jne masuk
lewat2: mov ah,07h
int 21h
cmp al,'s'
je lewat3
cmp al,'S'
jne masuk
lewat3: mov ah,07h
int 21h
cmp al,'m'
je lewat4
cmp al,'M'
jne masuk
lewat4: mov ah,07h
int 21h
cmp al,'i'
je lewat5
cmp al,'I'
jne masuk
lewat5: mov ah,09h
mov dx,offset kata1
int 21h
int 20h
code_seg ends
end start
1. Tahap pertama dalam membuat program adalah menulis listrik,
dimana listing ini
dapat anda tulis mengunakan program EDIT dalam MS-DOS atau NOTEPAD
(ketik program diatas)
2. Simpan Prograam yang telah anda ketik pada folder TASM
3. Aktifkan MS-DOS lalu masuk kedalam folder TASM
4. Lalu ketik Program TASM.EXE dan ketik nama program yang telah
anda ketik
Modul Praktikum Bahasa Rakitan
44
5. Langka selajutnya anda merubah file anda yang telah menjadi
program yang
berekstensi OBJ menjadi COM or EXE
6. Lalu jalan program anda
Modul Praktikum Bahasa Rakitan
45
MODUL IX
PORT SERIAL (PPI 8255)
TUJUAN
􀂾 Mahasiswa mampu membuat program aplikasi input dan output
menggunakan
PPI dan port
􀂾 Mahasiswa mampu memahami pengalamatan pada PPI 8255
DASAR TOERI
Jika paraler port mengirimkan data secara paraler,maka serial
mengirimkan
data secara serial. Serial port lebih sulit untuk ditangani dari
pada port paraler karena
peralatan yang dihubungkan ke serial harus berkomunikasi dengan
menggunakan
transmisi serial sedangkan data di computer diolah secara paraler.
Karenanya data
dari serial port harus dikonversikan ke dalam bentuk paraler agar
bisa digunakan.
Dari segi kecepatan transmisi data serial juga tidak mungkin bisa
mengalakan
kecepatan transmisi paraler. Namun demikian adal hal yang menjadi
keuntungan dari
serial port yaitu :
• Kabel serial bisa lebih panjang dari kabel paraler
port
• Tidak diperlukan banyak kabel untuk transmisi dengan
port
• Memungkinkan sinar infra merah
• Banyak mikrokontroler yang menggunakan port serial
IC Programmable Peripheral Interface (PPI)
8255
IC PPI 8255 merupakan IC antarmuka yang dapat dikendalikan program
sehingga dapat diakses langsung ke data bus sebagai masukan maupun
keluaran.
Didesain untuk sistem mikroprosesor INTEL, ZILOG, dan berbagai
mikrokontroler,
dll. Fungsinya dibuat sedemikian sebagai sebuah komponen
masukan/keluaran
serbaguna untuk menjembatani perangkat periferal ke bus sistem
mikroprosesor.
Modul Praktikum Bahasa Rakitan
46
Konfigurasi Pena
Konfigurasi pena IC PPI 8255 terdiri dari 40 pena (pin) sebagai
gambar berikut:
Gambar 8. Konfigurasi Pena IC PPI 8255
Deskripsi Fungsional IC PPI 8255
Deskripsi fungsional pena-pena (pin) IC 8255 adalah sebagai
berikut:
CS (chip select): jika pena masukan ini berlogika 0, maka PPI 8255 akan aktif,
berlangsung komunikasi antara PPI 8255 dan CPU (sistem mikro).
RD (read): jika pena masukan berlogika 0, maka PPI 8255 akan mengirim data ke
CPU melalui bus data (CPU membaca data dari PPI 8255).
WR (write): jika pena masukan ini berlogika 0,maka CPU akan mengirim data atau
kata kendali ke PPI 8255.
A0 dan A1 (pilihan port 0 dan 1):merupakan sinyal masukan, diberikan bersamaan
dengan RD dan WR, berfungsi memilih salah satu
dari tiga port atau kata
kendali. Pena ini dihubungkan ke bit terendah dari bus alamat A0
dan A1.
RST: jika pena masukan ini berlogika 1, maka akan menghapus nilai
register kendali
dan semua port (A,B,C) akan diset sebagai modus masukan.
Modul Praktikum Bahasa Rakitan
47
Vcc (catu daya +5V): sebuah kapasitor 0,1 mikrofarat antara pena 26 dan 7
diperbolehkan sebagai dekopling.
GND (ground): hubungan ke ground (pembumian).
D0…D7: merupakan jalur bus data (dua arah).
PA0…PA7 : port A : berfungsi sebagai keluaran 8 bit data latch/buffer dan
masukan
8 bit data latch.
PB0…PB7 : port B : berfungsi sebagai keluaran 8 bit data latch/buffer dan
masukan
8 bit data buffer.
PC0…PC7: port C : keluaran 8 bit data lacth/buffer dan masukan 8 bit data
buffer.
Port ini dapat dibagi atas dua port (setiap port 4 bit data lacth)
yang digunakan secara
bersama dengan port A dan B untuk mengendalikan sinyal keluaran
dan status sinyal
masukan.
PROSEDUR PERCOBAAN
􀂾 Hubungkan control DT-51 MinSys dengan control DT-51 trainner board
(sebagai sumber) menggunakan kabel tipe X
􀂾 Hubungkan DT 51 MinSys dengan PC dengan menngunakan kabel serial
􀂾 Hubungkan DT-51 MinSys dengan sumber tegangan
􀂾 hubungkan Port A DT-51 MinSys dengan Port Output Dt-51 Trainner
Board
menggunakan kabel Y, Ketik program dibawah, assemble, download ke
DT-
51 MinSys
$mod51
CSEG
ORG 400H
LJMP TASMI
ORG 4100H
TASMI:
MOV SP, #30H
Modul Praktikum Bahasa Rakitan
48
;inisialisasi
MOV DPTR, #2003H
MOV A, #80h
MOVX @DPTR, A
;PORT A
MOV DPTR, #2000H
MOV A, #0CFH
MOVX @DPTR, A
SJMP $
Modul Praktikum Bahasa Rakitan
49
Lampiran Code ASCII
US ASCII Character Codes
(000-063)
Decimal Hexadecimal
Character
000 00 NUL
001 01 SOH
002 02 STX
003 03 ETX
004 04 EOT
005 05 ENQ
006 06 ACK
007 07 BEL
008 08 BS
009 09 HT
010 0A LF
011 0B VT
012 0C FF
013 0D CR
014 0E SO
015 0F SI
016 10 DLE
017 11 DC1
018 12 DC2
019 13 DC3
020 14 DC4
021 15 NAK
022 16 SYN
023 17 ETB
024 18 CAN
025 19 EM
026 1A SUB
US ASCII Character Codes
(064-127)
Decimal Hexadecimal
Character
064 40 @
065 41 A
066 42 B
067 43 C
068 44 D
069 45 E
070 46 F
071 47 G
072 48 H
073 49 I
074 4A J
075 4B K
076 4C L
077 4D M
078 4E N
079 4F O
080 50 P
081 51 Q
082 52 R
083 53 S
084 54 T
085 55 U
086 56 V
087 57 W
088 58 X
089 59 Y
090 5A Z
Modul Praktikum Bahasa Rakitan
50
027 1B ESC
028 1C FS
029 1D GS
030 1E RS
031 1F US
032 20 SP
033 21 !
034 22 "
035 23 #
036 24 $
037 25 %
038 26 &
039 27 '
040 28 (
041 29 )
042 2A *
043 2B +
044 2C ,
045 2D -
046 2E .
047 2F /
048 30 0
049 31 1
050 32 2
051 33 3
052 34 4
053 35 5
054 36 6
055 37 7
056 38 8
057 39 9
091 5B [
092 5C \
093 5D ]
094 5E ^
095 5F _
096 60 `
097 61 a
098 62 b
099 63 c
100 64 d
101 65 e
102 66 f
103 67 g
104 68 h
105 69 i
106 6A j
107 6B k
108 6C l
109 6D m
110 6E n
111 6F o
112 70 p
113 71 q
114 72 r
115 73 s
116 74 t
117 75 u
118 76 v
119 77 w
120 78 x
121 79 y
Modul Praktikum Bahasa Rakitan
51
058 3A :
059 3B ;
060 3C <
061 3D =
062 3E >
063 3F ?
122 7A z
123 7B {
124 7C |
125 7D }
126 7E ~
127 7F DEL
Modul Praktikum Bahasa Rakitan
52
MODUL PRAKTIKUM
BAHASA RAKITAN
DISUSUN OLEH
TASMI, S.Si
LABORATORIUM KOMPUTER
PROGRAM DIPLOMA KOMPUTER
UNIVERSITAS SRIWIJAYA
Modul Praktikum Bahasa Rakitan
53
KATA PENGANTAR
Puji Syukur kepada ALLAH SWT atas berkat yang telah diberikan-Nya
dalam
penyusunan Penuntun Praktikum Bahasa Rakitan edisi refisi. Terima
kasih juga
kepada semua pihak yang telah membantu baik secaralangsung maupun
tidak.
Pada Modul ini, Pembaca akan diajak untuk mengenal cara pemograman
dengan assembly
Modul penuntun praktikum ini merupakan edisi kedua, yang
pembahasannaya
di fokuskan pada aplikasi dan cara awal menggunakan program
debugger, Tasm ,
Simulator.
Modul ini disusun untuk membatu para pemakai pemulai dalam pemograman
menggunakan Bahasa Tingkat Rendah (assembly) karena di modul
diberikan
beberapa contoh dan cara menggunakan program Assembly. Dan penulis
berharap
modul ini sebagai awal mahasiswa dalam memahami pemograman dengan
mengunakan bahasa mesin yang nanti nya akan terus di gunakan dalam
mata kuliah
yang berhubungan dengan Hardware (mikrokontroler dan
mikroprosesor)
Besar harapan penyusun agar para Pembaca dapat memberikan kritik
dan
saran mengenai isi ataupun penyusunan penuntun praktikum Bahasa
Rakitan. Akhir
kata, penyusun mengucapkan terima kasih kepada para Pembaca.
Selamat belajar!
Palembang, Februari 2005
Penulis
Modul Praktikum Bahasa Rakitan
54
DAFTAR ISI
Hal
Kata Pengantar ........................................................................................................
i
Daftar
isi..................................................................................................................
ii
Daftar Gambar.........................................................................................................
iii
Daftar Tabel
............................................................................................................
iv
Modul 1 ...................................................................................................................
1
Modul 2
...................................................................................................................
11
Modul 3 ...................................................................................................................
15
Modul 4
...................................................................................................................
18
Modul 5 ...................................................................................................................
24
Modul 6
...................................................................................................................
29
Modul 7 ...................................................................................................................
34
Modul 8
...................................................................................................................
37