WELCOME MY BLOG

Senin, 02 April 2012


PRAKTEK MICROPROSESOR
PEMROGRAMAN ASSAMBLER 2

Oleh Kelompok II:
Ayu Berlianda Putri (1001083014)
Irhamul Hamdi (1001083018)

Dasar Teori
Secara umum struktur penulisan suatu segment dapat dilukiskan sebagai berikut:
[Nama Segment] segment
ASSUME CS:[Segment] DS:[Segment] SS:[Segment] ES:[Segment]
Org 100h
[label]: [Program ASM]
-
-
[nama segment] ends
       End [label]
Penulisan awal program juga ditentukan oleh ekstensi program COM atau EXE
Pada Penulisan program .COM  pemberian Org 100h, merupakan awal mulai menulis program pada alamat 100h. Hal ini hanya berlaku untuk program yang berektensikan com, karena 100h alamat sebelum digunakan untuk PSP (program segment prefiks). Disamping itu juga Org menujuk lokasi memori tertentu dari suatu segment.
Penulisan Assume cukup dituliskan 1 segmen saja, yaitu
Assume CS:Code_Seg
Tetapi bila menuliskan program .EXE, penulisan segmen harus benar-benar menunjukkan arah yang benar, contoh:
Assume CS:Code_Seg DS:Data_Seg SS:Stack_Seg ES:0b800h
Org 0h
Syarat Label:
-          Harus unik
-          Maksimal 31 karakter
-          Karakter yang boleh digunakan:
o   Alphabet
o   Angka
o   Tanda Dollar ($)
o   Tanda Tanya (?)
o   Titik (.)
o   Tanda satuan (@)
-          Bukan merupakan suatu perintah assambler
-          Label hanya dapat didefinisikan satu kali dalam program
Mendefinisikan variabel
Pada bahasa assambler, variabel dibagi menjadi 2 jenis:
1.  variabel yang dapat dimodifikasi isinya
2.  variabel yang tidak dapat dimodifikasi isinya
Variabel yang dapat dimodifikasi isinya
Variabel ini adalah variabel yang memakan tempat pada memori.
Adapun besaran-besaran variabel tersebut adalah
-          DB (Define Byte), mendefinisikan variabel per Byte
-          DW (Define Word), mendefinisikan variabel per Word (2 Byte)
-          DD (Define Double Word) mendefinisikan variabel per 2 Word (4 Byte)
Tata penulisan variabel jenis ini adalah
Label (DB/DW/DD) [Isi Variabel]
Contoh
Satu db ‘Aku adalah anak gembala $’
Dua db 1234h
Tiga db 12h
Variabel yang tidak dapat dimodifikasi isinya
Variabel ini digunakan untuk menggantikan besaran tertentu dengan menggunakan kata equ dan variabel ini tidak menggunakan memori.
Contoh penggunaan variabel ini adalah
Satu equ 2190h
Dua equ 2323h
Int 21h service number 09h
Interupt ini digunakan untuk mencetak suatu kalimat, dengan syarat-syarat sebagai berikut
-          Masukkan service number interupt pada register AH
-          Masukkan segment dari variabel tempat menampung kalimat yang akan dicetak ke register DS dan offsetnya ke register DX.
-          Kalimat yang akan dicetak harus diakhiri dengan tanda $ (dollar)

Langkah Kerja

A.   Mencetak sebuah kalimat

1.  Buka notepad dan ketikkan program di bawah ini:
Code_Seg Segment
     Assume CS:Code_Seg
     Org 100h
Start:     jmp mulai

Kata db “Aku adalah mahasiswa TI”,13,10
     db “sedang belajar bahasa assambler”,13,10
     db “$”

Mulai:     mov dx,offset kata
           mov ah,09h
           int 21h
           int 20h

Code_Seg Ends
End Start
2.  Simpan program ini di D:\>cd TI (folder TI di directory D), jangan lupa untuk mengubah tipe file menjadi All File dan nama file dengan ekstensi .asm.
3.  Kemudian buka command prompt.
4.  Pada command prompt ketik E:, itu berfungsi untuk masuk ke direktori E, tempat menyimpan folder TI.


5.  Selanjutnya ketikkan:
·         cd TI
·         tasm ham.asm

                    

·         tlink /t ham, ini berfunsi untuk compile

·         ham, ini berfungsi untuk menampilkan program.


B.   Input per huruf

1.  Buka notepad dan ketikkan program di bawah ini:
Code_seg segment
     Assume CS:Code_seg
     Org 100h
Start: Jmp mulai
Tanya db 'Jawab pertanyaan di bawah ini!',13,10
      db 'Apakah anda seorang mahasiswa',13,10
      db 'Jawaban anda: $'
Jawab1 db 13,10,'Anda seorang mahasiswa',13,10,'$'
Jawab2 db 13,10,'Anda seorang artis',13,10,'$'

Mulai:     mov ah,09h
     mov dx,offset Tanya
     int 21h

Ulang:     mov ah,01h
     int 21h
     cmp al,'y'
     je mahasiswa
     cmp al,'Y'
     je mahasiswa
     je artis
     cmp al,'t'
     jne Mulai

artis:     mov ah,09h
     mov dx,offset jawab2
     int 21h
     jmp selesai

mahasiswa: mov ah,09h
           mov dx,offset jawab1
           int 21h

selesai:   int 20h

Code_seg Ends
     End Start
2.  Selanjutnya ketikkan:
·         cd TI
·         tasm ayu.asm
·         tlink /t ayu
·         ayu







c. Input per kata dengan MOV AH,06

1.  Buka notepad dan ketikkan program di bawah ini:
Code_seg segment
     Assume CS:Code_seg
     Org 100h
Start: Jmp mulai
Tanya db 'AWAS KOMPUTER ANDA RUSAK! $'

Mulai:     mov ah,09h
     mov dx,offset Tanya
     int 21h
     mov ah,06h
     mov dl, 0ffh
     xor al,al
     int 21h
     cmp al,'Q'
     je selesai
     cmp al,'q'
     jne Mulai
selesai:   int 20h
Code_seg Ends
     End Start
2.  Apabila program dijalankan, maka hasilnya akan seperti di bawah ini:









Latihan
Membuat password dengan 3 huruf nama sendiri:
Cara 1:
Ketikkan program berikut pada notepad.
Code_seg segment
     Assume CS:Code_seg
     Org 100h

Start: jmp hapus
kunci db 'Masukkan Password : $'
betul db 13,10,'Password Anda Betul',13,10,'$'
salah db 13,10,'Password Anda Salah',13,10,'$' 
hapus:     mov ah,07h
     mov ch,00
     mov cl,00
     mov dh,56
     mov dl,100
     mov bh,07h
     int 10h

input:     mov ah,09h
     mov dx,offset kunci
     int 21h
     mov ah,01h
     int 21h
     cmp al,'A'
     cmp al,'B'
     cmp al,'C'
     je keluar
     mov ah,09h
     mov dx,offset salah
     int 21h
     loop input

keluar:    mov ah,09h
     mov dx,offset betul
     int 21h
     int 20h
    
Code_seg Ends
     End Start

Maka hasilnya akan seperti di bawah ini:









Cara 2:
Ketikkan program berikut pada notepad:

Code_seg segment
     Assume CS:Code_seg
     Org 100h
Start: Jmp mulai
kata db 'masukkan password: $'
password db 'AYUBP'
tampung db 6,?,6 dup(?)
kata1 db 13,10,'password anda salah ',13,10,13,10,'$'
kata2 db 13,10,'password anda benar ',13,10,13,10,'$'

mulai:     mov ah,09h
     mov dx,offset kata
     int 21h

     mov ah,0ah
     mov dx,offset tampung
     int 21h
    
     push ds
     pop es
     mov di,offset password
     mov si,offset tampung + 2
     mov cx,05h
     cld

ulang:     cmpsb
     jc salah
     loop ulang
     call betul
     int 20h
    
salah:     mov ah,09h
     mov dx,offset kata1
     int 21h
     jmp mulai

betul proc
     mov ah,09h
     mov dx,offset kata2
     int 21h
     ret

Code_seg Ends
     End Start
Maka hasilnya akan seperti di bawah ini:










Kesimpulan :
1.  Dapat disimpulkan dari latihan bahwa, apabila kita membuat password dengan menggunakan cara pertama, kita harus memasukkan hurufnya satu persatu, apabila ada satu hruf saja yang tinggal, maka password kita akan dinyatakan salah.
2.  Sedangkan pada cara kedua, kita bisa membuat password dengan satu kata, tetapi yang harus kita ingat adalah, apabila kita salah memasukkan huruf atau kita salah menuliskan huruf besar dan kecilnya, maka password kita juga akan dinyatakan salah.

Rabu, 28 Maret 2012

Latihan/Pertanyaan
a.    Dari program-program yang sudah ditulis dan diuji apa fungsi dari register AX,BX,CX,DX,SP,IP,DS,SS,ES,CS
• Accumulator Register AX
Fungsi: Sebagai akumulator dan berhubungan dengan jenis-jenis operasi khusus seperti Aritmetika, In/Out, Shift, Logic, Rotate, dan operasi desimal berkode biner.

• Base Register BX
Fungsi: Sebagai register base untuk mereferensi alamat memori. Operasi yang dapat dilakukan adalah Rotate, Logic, Shift, dan Aritmetika.

• Counter Register CX
Fungsi: Sebagai pencacah implisit dengan instruksi tertentu, misalnya terhadap perintah Loop dan operasi string. Counter naik jika direction flag bernilai 0, dan counter turun jika direction flag bernilai 1.

• Data Register DX
Fungsi: Menyimpan alamat port I/O selama operasi I/O tertentu, baik alamat port 8 bit maupun 16 bit. Digunakan juga dalam operasi perkalian dan pembagian.

• Register SP (Stack Pointer, 16 bit)
Fungsi: Digunakan untuk operasi stack seperti menyimpan alamat return saat memanggil subroutine. SP merupakan register yang secara implisit digunakan oleh perintah PUSH dan POP yaitu menyimpan dan mengambil kembali dari stack.

• Register IP (Instruction Pointer, 16 bit)
Fungsi: Register yang berpasangan dengan CS sebagai register utama untuk menunjukkan baris perintah program. Pada saat program dijalankan, IP akan langsung menunjuk pada awal program. Code Segment dan Instruction Pointer berfungsi sebagai program counter ditulis dengan format CS:IP. Secara umum, kode mesin diletakkan di Code Segment, semua data diletakkan di Data Segment, dan operasi PUSH dan POP dilakukan di Stack Segment.

• Register CS (Code Segment)
Fungsi: Mencatat segment dari kode program atau instruksi, register CS berpasangan dengan register IP (Instruction Pointer) dalam format CS:IP.

• Register DS (Data Segment)
Fungsi: Menyimpan alamat dari segment dimana data terletak.

b.    Apa yang bisa disimpulkan dari tabel 1.1 sampai dengan tabel terakhir
c.    Buat program untuk menampilkan
a.    1*1 = 1

MOV AH,02
MOV DL,31
INT 21
MOV BL,DL
MOV DL,2A
INT 21
MOV BL,DL
MOV DL,31
INT 21
MOV BL,DL
MOV DL,3D
INT 21
MOV BL,DL
MOV DL,31
INC DL
LOOP 107
INT 20

b.    2*1 = 2

MOV AH,02
MOV DL,32
INT 21
MOV BL,DL
MOV DL,2A
INT 21
MOV BL,DL
MOV DL,31
INT 21
MOV BL,DL
MOV DL,3D
INT 21
MOV BL,DL
MOV DL,32
INC DL
LOOP 107
INT 20
Kesimpulan
 Dalam penulisan Pemograman Assambler 1 ini kita terlebih dahulu dapat mengenal Bahasa Assambler,  ada 3 instruksi dasar pada Bahasa sssembler yaitu Mnemonic atau Opcode, Operand1 dan Operand2.
Kita dapat mengenal debug dan perintah-perintahnya. Debug yaitu suatu utiliti dalam DOS yang digunakan untuk membuat pemrograman assambler dengan format ekstensi COM.
Beberapa perintah-perintah debug dan kegunaannya yaitu :
1.     Q (Quit)
Mengembalikan ke dos prompt
2.    H (Hexa)
Melaksanakan perintah penambahan dan pengurangan terhadap dua bilangan hexa
3.    A (assambler)
Perintah untuk menulis program assembler
4.    R(Register)
Digunakan untuk mengetahui isi masing-masing register, perintah ini juga bias untuk mengetahui atau memperbaruhi isi register tertentu
5.    G (Go)
Untuk menjalankan program
6.    T(Trace)
Menjalankan program perbaris dengan menampilkan register dipakai
7.    U (Unsamble)
Menampilkan list dari program yang sedang berjalan U (tempat awal program yang diinginkan) L (panjang program/1 byte akhir dari alamat akhir program).
         Kita juga dapat mengenal fungsi dan kegunaan masing-masing instruksi yaitu :
Ø  Instruksi Pengalamatan = MOV
Ø  Instruksi Penjumlahan = INC,ADD
Ø  Instruksi Pengurangan = DEC,SUB
Ø  Instruksi untuk menentukan Larik = BX
Ø  Instruksi lompat jika tidak sama = JNE
Ø  Instruksi lompat jika masih kurang/ sama dengan = JLE
              Keterangan dari program diatas :
MOV CX, adalah  : untuk perulangan yang akan di buat
AH, 02 adalah  :  untuk menunjukkan fungsi pada INT 21
0L, 41 adalah  :  menunujukkan kode asciinya
INT 21 adalah  :  fungsi yang di lakukan
LOOP, 0103 adalah   :  perulangan
INT 20 adalah  :  untuk keluar dari program

REFERENSI
·         Lukito, Ediman, 1982, Dasar-dasar Pemrograman Dengan Assambler 8088, PT Elex Media Komputindo, Jakarta
·         Mulyono, Heri, 2005, Diktat Kuliah Bahasa Rakitan, STMIK Jaya Nusa, Padang