NIM : 13111940
Kelas : 13.3D.01
Mata Kuliah : Arsitektur Komputer
TUGAS !!!
Ambil
5 line program assembler, analisa :
- Elemen-elemen intruksi
- Jenis-jenis intruksinya
- Mode Pengalamatan
- Tuliskan penjelasan intruksinya
PENGENALAN ....
Pengenalan Bahasa assembler,
Bahasa Assembly adalah bahasa pemrograman tingkat rendah. Dalam pemrograman komputer dikenal dua jenis tingkatan bahasa, jenis yang pertama adalah bahasa pemrograman tingkat tinggi (high level language) dan jenis yang kedua adalah bahasa pemrograman tingkat rendah (low level language).
Bahasa pemrograman tingkat tinggi lebih berorientasi kepada manusia yaitu bagaimana agar pernyataan-pernyataan yang ada dalam program mudah ditulis dan dimengerti oleh manusia. Sedangkan bahasa tingkat rendah lebih berorientasi ke mesin, yaitu bagaimana agar komputer dapat langsung mengintepretasikan pernyataan-pernyataan program.
Kelebihan Bahasa Assembly:
- Ketika di-compile lebih kecil ukuran
- Lebih efisien/hemat memori
- Lebih cepat dieksekusi
Kesulitan Bahasa Assembly:
- Dalam melakukan suatu pekerjaan, baris program relatif lebih panjang dibanding bahasa tingkat tinggi
- Relatif lebih sulit untuk dipahami terutama jika jumlah baris sudah terlalu banyak
- Lebih sulit dalam melakukan pekerjaan rumit, misalnya operasi matematis
Dalam program bahasa assembly terdapat 2 jenis yang kita tulis dalam program yaitu:
- Assembly Directive (yaitu merupakan kode yang menjadi arahan bagi assembler/compiler untuk menata program)
- Instruksi (yaitu kode yang harus dieksekusi oleh CPU mikrokontroler)
Elemen-elemen Instruksinya
Instruksi bahasa assembly
Instruksi bahasa assembly adalah representasi simbolik instruksi mesin tunggal. Dalam bentuknya yang paling sederhana, yang terdiri dari satu mnemonic, kode alphabet singkat yang secara harfiah “membantu memori” dalam mengingat instruksi CPU. Mnemonic mungkin diikuti oleh operand contoh berikut:
- clc ; hanya sebuah mnemonic
- inc ax ; operand tunggal
- mov ax, bx ; dua operand
setiap instruksi dapat diikuti oleh komentar, yang selalu diawali dengan titik koma(;). Operand mungkin berupa register, variable, lokasi memori atau nilai immediate. Contoh :
- 10 (nilai immediate)
- count (variable)
- AX (register)
- [0200] (lokasi memori)
Contoh program
Program bahasa assembly dibangun oleh instruksi dan operand. Instruksi memerintahkan CPU untuk melaksanakan aksi, sedang variable adalah lokasi memori dimana dat disimpan. Variable juga disebut operand memori. Operand langsung adalah konstanta seperti 5 dan 10. Berikut ini contoh program untuk menjumlahkan 3 bilangan dan menyimpannya dalam variable yang disebut sum. Sum diasumsikan dalam heksadesimal.
- mov ax, 5 ; memindahkan 5 ke dalam register ax
- add ax, 10 ; menambahkan nilai 10h terhadap register ax
- add ax, 20 ; menambahkan nilai 20h terhadap register ax
- mov sum, ax ; menyimpan ax dalam variable sum
- int 20 ; akhir program
instruksi MOV memerintahkan CPU untuk memindahkan atau menyalin data, dari operand sumber ke operand tujuan. Baris 1 memindahkan 5 ke dalam register AX. Baris 2 memindahkan 10 (heksa) ke dalam AX, membuatnya sama dengan 15. Baris 3 menambahkan 20 ke AX, membuatnya sama dengan 35, dan baris 4 menyalin AX ke dalam variable dalam memori yang disebut SUM. Baris terakhir menghentikan program.
Perintah DEBUG untuk menyusun dan menguji program adalah sebagi berikut:
Perintah
|
Komentar
|
A 100
Mov ax, 5
Add ax,10
Add ax,20
Mov [0120], ax
Int 20
R
T
T
T
G
Q
|
Assembly dimulai pada lokasi 100h
Perintah program yang pertama
Hasil jumlah pada lokasi 0120h
Akhir program
(tekan Enter untuk mengakhiri assembly)
Menampilkan register
Trace satu instruksi
Eksekusi sisa program
Keluar dari Debug kembali ke DOS
|
Setelah instruksi yang kedua, akan diperoleh tampilan hasil sebagai berikut:
- mov ax, 5 ax : 05
- add ax, 10 ax : 10
- add ax, 20 ax : 20
- mov sum, ax ax : 35 sum : 35
AX = 0015 BX= 0000 CX= 0000 DX= 0000 SP= FFEE
BP= 0000 SI= 0000 DI= 0000 DS= 23AD ES= 23AD
SS= 23AD CS= 23AD IP= 0106 NV UP EI PL NZ NA PO NC
23AD : 0106 052000 ADD AX, 0020
Register AX merupakan hasil penjumlahan 5 dan 10 sehingga AX= 15. Register IP menyimpan alamat instruksi berikutnya yang akan dieksekusi (0106). Instruksi berikutnya yang akan dieksekusi adalah ADD AX, 0020.
Elemen dasar bahasa assembly
Karakter- karakter dasar assembler mungkin digunakan untuk membentuk nomor, nama, perintah, dan parameter.
Konstanta
Konstanta adalah nilai yang diketahui dan dikalkulasikan pada saat penyusunan program. Konstanta mungkin nomor atau karakter string. Dia tidak dapat diubah pada saat program dijalankan.
Kumpulan karakter dalam assembly
Letter : A-Z, a-z
Digit : 0-9
Karakter khusus:
? , (koma)
@ “
_ &
$ %
: !
. ‘
[] ~
() |
{} =
+ #
- ^
/ ;
* `
Variable, sebaliknya, adalah lokasi memori yang dapat berubah pada saat program dijalankan. Contoh berikut adalah konstanta:
- ‘ABC’
- 2134
- 5*6
- (1+2)/3
Integer. Integer dibangun oleh digit-digit angka tanpa decimal,diikuti oleh karakter radix (d=decimal, h=hexa, q=octal, b=biner)
Contoh
Contoh
|
Radix
|
11110000b
200
300d
4A6Bh
2047q
2047o
|
Biner
Decimal
Decimal
Heksadesimal
Octal
oktal
|
Bilangan riil. Angka riil mengandung digit, titikdesimal tunggal, eksponen (opsional) dan tanda awal (opsional). Sintaknya:
[{+/-}] digit.digit [E{+/-}] digit
Contoh:
2.3
+ 200.576 E +05
0.243526E – 05
6.08 e3
Notasi sintak. Dalam contoh sebelumnya dan pada contoh yang akan datang, elemen opsional akan ditutup dengan kurung siku. Tanda kurung besar mengidentifikasikan pilihan yang diperlukan. Kata kunci yang diperlukan ditulis dalam huruf capital. Kata dengan huruf kecil miring adalah istilah- istilah yang didefinisikan sebelumnya seperti identifier, operand, dan register.
Karakter atau konstanta string. Karakter ASCII tunggal atau string karakter yang ditutup oleh tanda quotasi tunggal (‘’) atau ganda (“”), contoh:
“a”
‘B’
“Stack Overflow”
‘012#?%&’
Konstanta karakter panjangnya 1 byte. Panjang sebuah string ditentukan oleh jumlah karakter yang ada di dalamnya. Konstanta berikut panjangnya 5 byte:
‘ABCDE’
Apostrof (‘) ditutup diantara dua tanda quotasi (“”), atau tanda quotasi ganda (“”) ditutup oleh tanda quotasi tunggal (‘’). Contoh berikut adalah benar:
“That’s not all………”
‘The file “First” was not found’
“The file ‘First’ was not found”
Pernyataan
Pernyataan/perintah bahasa assembly terdiri dari nama, mnemonic, operand dan komentar. Pernyataan secara umum dibagi menjadi dua kelas, yaitu instruksi dan perintah. Instruksi adalah pernyataan yang dapat dieksekusi, sementara perintah adalah pernyataan yang menyediakan informasi untuk membantu assembler dalam menghasilkan kode yang dapat dieksekusi. Format umum sebuah kalimat:
[name][mnemonic][operand][;coment]
Kalimat harus ditulis pada baris tunggal dan tidak melebihi 128 kolom.
Perintah, atau pseudo op, adalah pernyataan yang berefek pada daftar program atau cara kode mesin dibuat. Contoh, perintah DG memerintah assembler untuk membuat memori untuk variable bernama count dan member nilai awal 50.
Count DB 50
Instruksi dieksekusi oleh mikroprosesor pada saat dijalankan. Instruksi dibagi ke dalam tipe-tipe umum, seperti: kendali program, transfer data, aritmetik, logic, dan I/O. Instruksi-instruksi selalu diterjemahkan langsung ke dalam kode mesin oleh assembler. Setiap satu instruksi bahasa assembly diterjemahkan langsung ke dalam satu instruksi bahasa mesin.
Nama
Nama mengidentifikasikan label, variable, symbol atau kata kunci. Nama mungkin mengandung salah satu karakter berikut:
Karakter
|
Penjelasan
|
A…Z, a…z
0-9
?
_
@
$
.
|
Huruf
Angka
Tanda Tanya
Underscore
Tanda @
Tanda dollar
Titik
|
Nama mempunyai batasan sebagai berikut:
- Hanya 31 karakter pertama yang dikenali,
- Tidak ada perbedaan antara huruf capital dan huruf kecil,
- Karakter pertama tidak boleh angka,
- Jika digunakan, tanda (.) hanya bisa digunakan sebagai karakter pertama,
- Tidak boleh memilih nama yang samadengan kata kunci (perintah/direktif).
Variable dan konstanta. Nama digunakan sebelum perintah alokasi memori mengidentifikasikan lokasi diman data disimpan dalam memori. Atau, mungkin juga digunakan untuk mengidentifikasikan konstanta, sebagai berikut:
Count 1 db 50 ; variable (alokasi memori)
Count 2 equ 100 ; konstanta
Label. Jika nama tampil disamping instruksi program, ini disebut label.
Label berfungsi sebagai penanda kapan saja program mau meloncat atau looping dari satu lokasi ke lokasi lain. Sperti contoh berikut dimana label 1 dan label 2 adalah label yang mengidentifikasikan lokasi dalam program:
Label 1 mov ax, 0
Label 2 mov ax, 0
…
…
Label 2
Jmp label 1
add : mov ax, 10
Jenis-Jenis Instruksinya
Page 1
Page 2
Page 3
Mode Pengalamatan
Pengalamatan Langung
Pengalamatan
langsung dilakukan dengan memberikan nilai ke suatu register secara
langsung, Untuk melaksanakan hal tesersebut digunakan tanda #. Operand yang digunakan pada pengalamatan langsung /immediate data dapat berupa bilangan bertanda mulai 256 hingga +256.
Contoh :
MOV A,#25H ;Isi akumulator dengan bilangan 25H
MOV DPTR, #20H :isi register DPTR dengan bilangan 20H
MOV R1,10H : ; isi register R1 dengan 10H
MOV A,#-1 ; sama dengan MOV A,#0FFH
; karena 00H 1 menjadi FFH
Pengalamatan Tak Langsung
Pada
pengalamatan ini, operand menunjuk ke sebuah register yang berisi
lokasi alamat memori yang akan digunakan dalam operasi. Untuk
melaksanakan pengalamatan tak langsung digunakan symbol @. Pengalamatan
jenis ini biasa digunakan untuk melakukan penulisan, pemindahan atau
pembacaan beberapa data dalam lokasi memori. AT89C51 mempunyai sebuah register 16 bit (DPTR) yang dapat digunakan untuk melakukan pengalamatan tidak langsung.
Contoh :
ADD, A,R1 ; Tambahkan isi RAM yang lokasinya ditunjukkan oleh
;register R1 ke akumulator
;register R1 ke akumulator
DEC @R1 ;Kurangi satu isi RAM yang alamatnya ditunjukkan oleh R1
MOVX, ADPTR, A ; pindahkan isi dari akumulator ke memori luar yang
; lokasinya ditunjukkan oleh data pointer (DPTR)
Pengalamatan Data
Pengalamatan
data terjadi pada sebuah perintah ketika nilai operasi merupakan alamat
dari data yang akan diisi atau yang akan dipindahkan.
Contoh :
MOV P1,A ;isi P1 dari Akumulator
MOV P2,FFH ;isi P2 dengan nilai FFH
Pengalamatan Kode
Pengalamatan
kode terjadi ketika operand merupakan alamat dari instruksi JUMP dan
CALL. Berikut contoh ACALL yang memanggil label Tunda, sehingga akan
melompat ke lokasi memori bernama Tunda.
Contoh :
ACALL Tunda
TUNDA:
MOV A,#FEH
LOOP:
DJNZ A, LOOP
RET
Pengalamatan Bit
Pengalamatan bit ialah penunjukkan alamat lokasi bit baik dalam RAM internal atau perangkat keras menggunakan symbol titik (.).
Contoh :
SETB P1.7 ; Set bit port 1.7 aktif
SETB TR1 : Set TR1 (Timer 1 aktif)
SETB RXD ; memberikan logika 1 pada kaki RXD yang berada di port 3.0
Operator
Operator
digunakan untuk melakukan aksi aritmatika, logika pergeseran bit dan
lain-lainnya pada operand .Beberapa operator yang tersedia diantaranya :
Operator Aritmatika
* = untuk perkalian
/ = untuk pembagian
+ = untuk penambahan
- = untuk pengurangan
Contoh : MOV A, #25H+3H ; sama dengan MOV A,#28H
Operator Logika
OR untuk operasi OR
AND untuk operasi AND
XOR untuk operasi XOR
EXOR untuk operasi EXOR
NOT untuk operasi invert
Contoh :
MOV A, #20H OR 40H ;sama dengan MOV A,#60H
MOV A,#10H AND 31H ;sama dengan MOV A, 10H
Operasi Khusus
SHR 16 bit geser ke kanan
SHL 16 bit geser ke kiri
HIGH pilih bagian tas bit
LOW pilih bagian bawah bit
EQ = sama dengan
NET <> tidak sama dengan
Lt < lebih kecil
LE <= lebih kecil atau sama dengan
GT >; lebih besar
GE >;= lebih besar atau sama dengan
Dimana perlu anda perhatikan prioritas dari operator sebagai berikut :
()
HIGH , LOW
Z*/, MOD, SHL , SHR
+, -
EQ, NE, LT, LE, GT, GE,=,<>,<,<=,>,>=
NOT
AND
OR, XOR
Tuliskan penjelasan Isntruksinya
.model small
.code
org 100h
mulai:
mov ah,2
mov dl,'B'
int 21h
int 20h
end mulai
.Model small (program yang akan dibuat hanya membutuhkan memory kecil) .Code berpasangan dengan org 100h (kita memberitahukan bahwa kita akan menggunkan kode segmen) Mulai : (label, dan diakhir dengan label end mulai untuk membatasi kode inti) Mov ah,2 (perintah menampilakan karakter yang disimpan dalam register DL) Mov dl, “B” () Int 21h dipasangkan dengan int 20h (berfungsi untuk menampilkan sebuah karakter pada layar)
Contoh 2
ORG 0 ;Mulai program dari alamat 0000
MOV R5,#25h ;Isikan 25h pada R5
MOV R7,#34h ;Isikan 34h pada R7
MOV A,#0 ;buat A = 0
ADD A,R5 ;Tambahkan isi R5 ke dalam A
;sehingga A = A + R5
ADD A,R7 ;Tambahkan isi R7 ke dalam A
;sehingga A = A + R5
ADD A,#12h ;Tambahkan 12h ke dalam A
TUNGGU: SJMP TUNGGU ;program selesai dan berputar di sini
END
Sumber :
Selesai
0 komentar:
Posting Komentar