belajar bahasa rakiatan
DESCRIPTION
baikTRANSCRIPT
PRAKTIKUM MIKROPROSESOR DAN BAHASA RAKITAN
MENCETAK HURUF, KALIMAT, DAN ANGKATUJUAN
1. Mahasiswa mampu melakukan pemrograman assembly menggunakan Turbo Assembler
2. Mahasiswa mampu membuat program assembly untuk mencetak huruf , kalimat, dan angkaDASAR TEORI
Proses pencetakan huruf, kalimat, atau angka pada bahasa assembly secara umum memanfaatkan interupsi dos. Untuk mencetak sebuah kalimat maka dipergunakan INT 21h dengan kode servis 9 dengan ketentuan sebagai berikut :1. Register AH diisi dengan 09h2. Register DS:DX diisi dengan alamat kalimat yang akan dicetak
3. Jalankan INT 21h
Untuk metode ini , maka secara default karakter $ akan dijadikan tanda akhir kalimat yang akan dicetak.
Dalam implementasinya, akan sering dijumpai karakter kontrol. Karakter kontrol merupakan karakter yang khusus untuk melaksanakan fungsi tertentu. Macamnya sebagai berikut :Kode ASCIINamaFungsi
7BelMemberikan suara beep
8BackspaceMemindahkan kursor 1 kolom ke belakang
9Horizontal tabMemindah kursor 8 kolom ke kanan
10Line feedMemindah kursor 1 kolom ke bawah
13Carriage returnMemindahkan kursor ke ke awal baris
Tabel 1. Tabel Karakter Kontrol ASCIISelain karakter kontrol tersebut, juga ada karakter kontrol lainnya, yang dipergunakan untuk komunikasi komputer dengan periferalnya, antara lain :Kode ASCIINama
0Null
1Start of heading
2Start of text
3End of text
4End of transmission
5Enquiry
6Acknowledge
7Bel
8Backspace
9Horizontal tab
10Line feed
11Vertical tabulation
12Form feed
13Carriage return
14Shift out
15Shift in
16Data link escape
17Device control
18Negative acknowledge (NACK)
19Synchronous idle
20End of transmission block
21Cancel
22End of medium
23Substitute
24Escape
25File separator
26Group separator
27Record separator
28Unit separator
29Spasi
30Delete
Tabel 1. Tabel Karakter Kontrol ASCII LengkapMencetak kalimat juga bisa menggunakan atribut seperti pada pencetakan huruf. Interupsi yang dipergunakan yaitu INT 10h dengan langkah sebagai berikut :1. Register AX diisi dengan 1300h2. Register BL diisi dengan atribut yang diinginkan3. Register BH diisi dengan halaman tampilan
4. Register DL diisi dengan posisi X kalimat akan ditampilkan5. Register DH diisi dengan posisi Y kalimat akan ditampilkan
6. Register CX diisi dengan panjang kalimat yang akan ditampilkan7. Register ES:BP diisi alamat kalimat yang akan dicetak
8. Jalankan INT 10h
Pengaturan atribut yang diinginkan dapat dilihat seperti pada tabel berikut :Warna dasarWarna tulisan
Bit ke76543210
NamaBL (Blink)R(Red)G(Green)B(Blue)I(Intensitas warna)R
(Red)G
(Green)B
(Blue)
Tabel 3. Atribut KalimatMencetak angka untuk bahasa assembly tidak semudah pada bahasa tingkat tinggi. Hal ini dikarenakan tidak ada fungsi khusus yang dapat digunakan. Misal ingin cetak angka 2, maka kita harus mencari nilai kode ASCII-nya yaitu 32h baru bisa dicetak ke layar. Cara yang sering digunakan adalah dengan melakukan pembagian bertingkat dengan 10. Pembagian memanfaatkan register AX dan BX, untuk selanjutnya hasil pembagian disimpan ke stack pointer. Setelah pembagian selesai maka data di stack pointer dikonversi ke ASCII dan ditampilkan ke layar.PROSEDUR PERCOBAAN
1. Mencetak kalimatTuliskan program berikut ini pada text editor dan simpan sebagai file kal00.asm pada folder yang sama dengan tasm.exe. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;; Program: kal00.asm ;; Fungsi : Mencetak kalimat ;; dengan Int 21 servis 9 ;;=====================================;
.Model Small
.Code
ORG 100h
Kalimat : JMP Proses
Kal0 db 'PROSES PENCETAKAN STRING ',13,10,'$'
Kal1 db 'DIBELAKANG TANDA $ TIDAK BISA DICETAK 'Proses:
MOVAH,09h
; Servis ke 9
MOV DX,OFFSET Kal0 ; Ambil Alamat Offset Kal0
INT 21h
; Cetak perkarakter sampai tanda $
LEA DX,Kal0
; Ambil Alamat Offset Kal0
INT 21h
; Cetak perkarakter sampai tanda $
LEA DX,Kal0+7
; Ambil Alamat Offset KAl0+7
INT 21h
; Cetak perkarakter sampai tanda $
LEA DX,KAL1
; Ambil Offset kal1
INT 21h
; Cetak perkarakter sampai ketemu $
INT 20h
; Selesai, kembali ke DOSEnd Kalimata. Buka command prompt dos.
b. Compile program menggunakan tasm dengan perintah berikut :
tasm kal00c. Lingking file kal00.obj menggunakan tlink dengan mengetikkan perintah berikut :tlink/t kal00d. Jalankan file kal00.com dan amati yang terjadi pada layar Anda.
e. Ubah nilai Kal0 dan Kal1 sesuai dengan keinginan Anda dan lihat hasilnya3. Mencetak kalimat dengan atributa. Tulis source code program berikut ini pada text editor lalu compile ,linking, dan jalankan hasilnya serta amati hasilnya dengan seksama.;=============================================; Program : kal01.asm ;; Fungsi : Mencetak kalimat disertai ;; atributnya ;;-----------------------------------------------;; INT 10h ;;-----------------------------------------------;; Input : ;; AX = 1300h ;; BL = Atribut ;; BH = Halaman tampilan ;; DL = Posisi X ;; DH = Posisi Y ;; CX = Panjang kalimat;; ES:BP = Alamat awal string ;;=============================================;
.Model Small
.Code
ORG 100h
Kalimat :
JMP Proses
Kal0 db ' Menulis kalimat dengan Atributnya '
Proses:
MOV AX,1300h
; Servis 13h subfungsi 00
MOV BL,10010101b ; Atribut tulisan
MOV BH,00
; Halaman tampilan 0
MOV DL,20
; Posisi X
MOV DH,12
; Posisi Y
MOV CX,35
; Banyaknya karakter dalam string
LEA BP,Kal0
; ES:BP alamat string
INT 10h
; Cetak kalimat !
INT 20h
; Selesai, kembali ke DOSEnd Kalimatb. Ubah nilai BL menjadi : 65, 128, 180, 200, 255, 0 dan amati yang terjadic. Ubah nilai DL dan DH lalu amati apa yang terjadi pada tulisan di layar Anda3. Mencetak angka dalam bentuk desimala. Tulis source code program berikut ini pada text editor lalu compile ,linking, dan jalankan hasilnya serta amati hasilnya dengan seksama.;============================================; Program : angka01.ASM ; Fungsi : Mencetak angka yang bernilai ; antara 0 sampai 65535 dalam ; format desimal ;============================================
.Model Small
.Code
ORG 100hTData :
JMP Proses
Test_Angka dw 65535
; Angka yang akan dicetakProses:
MOV AX,Test_Angka
; AX = angka yang akan dicetak
MOV BX,10
; BX = penyebut
XOR CX,CX
; CX = 0Ulang :
XOR DX,DX
; Cegah sisa bagi menjadi pembilang !
DIV BX
; Bagi angka yang akan dicetak dengan 10
PUSH DX
; Simpan sisa bagi dalam stack
INC CX
; CX ditambah 1
CMP AX,0
; Apakah hasil bagi sudah habis ?
JNE Ulang
; Jika belum, ulangi lagi !Cetak :
POP DX
; Ambil 1 angka yang disimpan
ADD DL,'0'
; Ubah angka tersebut dalam kode ASCII
MOV AH,02
; No servis yang dipergunakan
INT 21h
; Cetak angka tersebut
LOOP Cetak
; ulangi
INT 20hEnd TDatab. Ubah nilai Test_Angka ke 32, 50, 75,1234,33445,123456 dan amati apa yang terjadi4. Mencari dan menampilkan angka primaa. Tulis source code program berikut ini pada text editor lalu compile ,linking, dan jalankan hasilnya serta amati hasilnya dengan seksama.
Cetak_Klm Macro Klm ; Macro untuk mencetak kalimat
MOV AH,09
LEA DX,Klm
INT 21hEndMCDesimal Macro Angka
Local Ulang, Cetak
MOV AX,Angka ; AX = angka yang akan dicetak
MOV BX,10 ; BX = penyebut
XOR CX,CX ; CX = 0Ulang :
XOR DX,DX ; Cegah sisa bagi menjadi pembilang !
DIV BX
; Bagi angka yang akan dicetak dengan 10
PUSH DX
; Simpan sisa bagi dalam stack
INC CX
; CX ditambah 1
CMP AX,0
; Apakah hasil bagi sudah habis ?
JNE Ulang ; Jika belum, ulangi lagi !Cetak :
POP DX
; Ambil 1 angka yang disimpan
ADD DL,'0' ; Ubah 1 angka dalam kode ASCII
MOV AH,02 ;
INT 21h
; Cetak angka tersebut
LOOP Cetak ; ulangiEndM;================================================;; Program : angka02.ASM ;; Fungsi : Mencari dan menampilkan angka ;; prima dari 0 sampai 1000 ;;================================================;
.Model Small
.Code
ORG 100hTData :
JMP Awal
Batas dw 1000
Prima dw 0
I
dw 2
J
dw 2
Spasi db ' $'
Header db 9,9,9,'Bilangan Prima 1 sampai 1000 : ',13,10
db 9,9,9,'------------------------',13,10,10,'$'
Awal :
Cetak_Klm HeaderProses :
MOV AX,Batas ; Jika bilangan yang dicek
CMP AX,I
; sudah sama dengan Batas
JE Exit
; maka selesaiForI :
MOV J,2
; J untuk dibagi oleh I
MOV Prima,0 ; Prima = TidakForPrima:
MOV AX,Prima ;
CMP AX,0
; Apakah prima = Tidak ?
JNE TambahI ; jika Prima = Ya, lompat ke TambahI
MOV AX,I
;
CMP AX,J
; I = J ?
JNE Tidak ; Jika tidak sama, lompat ke Tidak
CDesimal I ; Cetak angka prima
Cetak_Klm Spasi ; Cetak spasi
MOV Prima,1 ; Prima = Ya
JMP TambahJ ; Lompat ke TambahJTidak :
MOV DX,0 ;
MOV AX,I ;
MOV BX,J ;
DIV BX
; Bagi I dengan J
CMP DX,0
; Apakah sisa bagi=0?
JNE TambahJ ; Jika tidak sama lompat ke TambahJ
MOV Prima,1 ; Prima = YaTambahJ :
INC J ; Tambah J dengan 1
JMP ForPrima ; Ulangi, bagi I dengan JTambahI :
INC I
; Tambah I dengan 1
JMP Proses ; Ulangi Cek I = prima atau bukanExit :
INT 20hEnd TData5. Menampilkan angka dalam bentuk heksadesimala. Tulis source code program berikut ini pada text editor lalu compile ,linking, dan jalankan hasilnya serta amati hasilnya dengan seksama.Cetak Macro
MOV DL,Tabel_Hex[BX] ; MACRO untuk
MOV AH,02
; mencetak
INT 21h
; huruf ke BX pada tabel_HexEndM;======================================================;; Program : angka03.ASM ;; Fungsi : Mencetak angka yang bernilai antara ;; 0000 sampai 255 dalam format ;; hexadesimal ;;======================================================;
.Model Small
.Code
ORG 100hTData :
JMP Proses
Tabel_Hex db '0123456789ABCDEF'
Test_Angka db 255 ; Angka yang akan dicetak 255=FFhProses:
SUB BH,BH
; Jadikan BH=0
MOV BL,Test_Angka ; BL = angka yang akan dicetak
PUSH BX
; Simpan angka tersebut
MOV CL,4
; Ambil 4 bit tinggi dari +
SHR BL,CL
; BL untuk dicetak
Cetak
; Cetak 1 angka hexa tingginya
POP BX
; Ambil angka yang disimpan
AND BL,0Fh
; Ambil 4 bit rendah dari +
Cetak
; BL untuk dicetak
INT 20hEnd TDataPAGE 8