belajar bahasa rakiatan

Upload: habibullah-srg

Post on 16-Oct-2015

17 views

Category:

Documents


0 download

DESCRIPTION

baik

TRANSCRIPT

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