Anda di halaman 1dari 135

TUGAS

METODE ELEMEN HINGGA


DI

OLEH

NAMA : INDRA FAUZI PARULIAN


NIM : 16 202 219

INSTITUT TEGNOLOGI MEDAN

1
TAHUN AJARAN 2019-2020

2
KATA PENGANTAR
Dengan rahmat-Nya, buku ajar “Metode elemen hingga dan Bahasa Pemrograman
Tingkat Rendah”, telah selesai disusun. Mudah-mudahan dapat membantu dalam memahami
dasar dasar elemen hingga dan pemrograman bahasa tingkat rendah dengan bahasa assembly.
Buku ajar ini berisi tentang sebagian materi Bahasa Pemrograman Tingkat Rendah yang
terdapat pada kurikulum jurusan Teknik Informatika STT Telkom, yang terdiri dari 10 bab
dengan masing-masing bab membahas :

 Pengenalan : Mengenali bahasa assembly dan elemen-elemen dasarnya.

Arsitektur Perangkat Keras dan Perangkat lunak : Membahas tentang komponen


 arsitektur sistem yang terdiri dari perangkat keras dan perangkat lunak.
Dasar-Dasar Bahasa Assembly : Membahas Perintah-perintah dan instruksi serta mode
 pengalamatan pada bahasa assembly.
Layanan Masukan/Keluaran (Input/Output) : Membahas tentang interrupt untuk
 input/output.

 Pemrosesan Kondisi : Insturksi-instruksi kondisi dan pencabangan.


Aritmetika : Instruksi Geser dan Putar, penjumlahan, pengurangan, perkalian dan
 pembagian.

 Makro dan Struktur : Membahas tentang makro dan perintah-perintahnya


Hubungan Dengan Bahasa Tingkat Tinggi : Membahas cara untuk membangun antara
 muka dengan bahasa pemrograman tingkat tinggi yaitu Turbo Pascal dan Turbo C.
Contoh Program : Contoh-contoh program dalam bahasa assembly.
Sebagian besar materi diambil dari buku “Assembly Language for the IBM-PC” karangan
Kip R. Irvine. Ada beberapa bahasan yang diambil dari User’s Guide Turbo Assembler 3.00.
Terima kasih banyak kepada semuanya yang telah membantu sehingga tersusunnya buku
ajar ini. Jazakallah kepada Teteh yang telah menemani dengan setia selama pembuatannya.
Buku ini dipersembahkan untuk si kecil Arina Dini Hanifa pada ulangtahunnya yang
pertama, hari ini.
Akhir kalam, tulisan kecil ini mudah-mudahan akan memberikan sedikit kemudahan bagi
siapa saja yang berminat untuk mempelajari bahasa assembly dan pemrograman bahasa
tingkat rendah.
MEDAN,27 MARET 2019

PENULIS

i
DAFTAR ISI

KATA PENGANTAR

BAB 1.PENDAHULUAN

1.1.Formulasi integral.........................................................................................................2

1.2.Metoda-metoda weghted resedual...............................................................................3

1.2.1.Metode Variasonal................................................................................................6

1.2.2.Metode Subdomainr..............................................................................................8

1.2.3.Metode Galerkin...................................................................................................9

1.2.4.Metode Leas Squares.............................................................................................9

BAB II.ELEMEN LINIER SATU DIMENSI.........................................................................13

2.1.Elemen Linier...............................................................................................................14

2.2.Persamaan “Continius Piecewise Smooth” ...........................................................20

BAB III.BAHASA PEM0GRAMAN TINGKAT RENDAH (ASSEMBLY)........................

3.1.Pendahuluan..................................................................................................................22

3.2.Represtasi Data..............................................................................................................26

3.3.Bahasa Assembly – Pengenalan...................................................................................36

3.3.1.Elemen Dasar Bahasa Assembly...........................................................................40

3.4.Contoh Program Hello...................................................................................................47

3.5.Komponen Mikrokomputer...........................................................................................51

3.6.Aristektur Sistem..........................................................................................................57

3.7.Perangkat Lunak Sistem Dan Memori..........................................................................77

3.8.Dasar – Dasar Bahasa Assembly..................................................................................81

3.8.1 Perintah Definisi Data............................................................................................81

3.8.2.Interaksi Transfer Data..........................................................................................91

3.8.3.Intruksi Aritmetik..................................................................................................99

3.8.4. Mode Pengalamatan ............................................................................................105


ii
3.8.5.Struktur Program.....................................................................................................116

3.8.5.1.Model Memori................................................................................................119

DAFTAR PUSTAKA .............................................................................................................

iii
i
BAB I
PENDAHULUAN

Metode elemen hingga adalah suatu prosedur numerik untuk memperoleh solusi terhadap
banyak permasalah yang sering di jumpai dalam analisis teknik. Secara garis besar di bagi
menjadi dua sub devisi yaitu pertama menjadi elemen-elemen diskrits untuk memperoleh
simpangan-simpangan dan gaya-gaya anggota dari struktur unsure. Ke.dua mennggunakan
elemen-elemen kontinum untuk memperoleh solusi terhadap permasalahan-permasalahan
perpindahan kalor, mekanika fluida dan benda padat.

Pendekatan pertama, dimana formulasi menggunakan elemen diskrits, biasasnya di sebut


sebagai analsisi matriks struktur dan memberikan hasil yang identik dengan analisis struktur.
Sedangkan pendekatan kedua metode elemen hingga sesungguhunya. Pendekatan ini akan
menghasilkan harga untuk menentukan parameter-parameter yang diperlukan pada titik tertentu
yang digunakan pada perangkat lunak program elemen hingga biasanya mampu menyelesaikan
masalah tersebut

Ada dua (2) karakteristik yang membedakan metode metode elemen hingga untuk
metode numerik antara lain, yaitu :

1. Metoda ini menggunakan formulasi integral untuk menetukan persamaan-persamaan


dalam bentuk aljabar.
2. Metoda ini , menggunakan fungsi-fungsi kontinyum sebagai acuan untuk mentukan
parameter yang belum di ketahui.
Ada lima (5) langkah untuk menyelesaikan persamaan metode elemen hingga, yaitu :
1. Permasalahan fisik di buat elemen-elemen kecil. Elemen elemen tersebut di tandai
dengan nomor elemen dan nomor titik nodal dan tempat titik koordinatnya.
2. Tentukan persamaan pendekatannya, linier atau kuadratik. Metode yang digunakan
tersebut harus di tulis dalam bentuk harga-harga nodal yang belum di ketahui (unknown
nodal values). Ini berlaku untuk setiap elemen harus di definisikan sifatya dalam bentuk
persamaan tersebut.

1
3. Bentuk lah sistim persamaan diatas dengan metode Galerkin, Variasional, formulasi
energi potensial, collocation, subdomain, dll. khusus untuk formulasi energi potensial,
energi potensial dari sist1m di tulis dalam bentuk persamaan dan kemudian
diminimalkan, dimana akan di beri satu persamaan setiap simpangan yang belum di
ketahui.
4. Selesaikan persamaan diatas.
5. Hitung besaran-besaran yang dicari. Besaran-besaran ini mempunyai komponen-
komponen tegangan, aliran panas atau kecepatan fluida.

1.1.Formulasi integral
Ada beberapa macam metoda untuk memformulasikan integral-integral fungsi tersebut

Metoda variasional
Pendekatan variasional melibatkan integral dari suatu persamaan yang
mempunyai harga-harga. setiap fungsi baru menghasilkan harga baru. Funsi tersebut
mempunyai nilai terkecil ini mempunyai sifat khusus yaitu memenuhi persamaan-
persamaan integral untuk mengklasifikasikan konsep ini, ambil integral berikut.

(1. 1 )

Harga numerik dapat dikalkulasikan dengan memberikan persamaan –persamaan


diatas. Misalnya persamaan coba-coba yang memberikan harga terkecil. Akan tetapi
persamaan ini merupakan jawab dari persamaan diferensial berikut.

(1. 2 )

Dengan kondisi batas y (0) = y0 dan y (H) = yH . Tentu saja proses ini dapat di
defenisikan sebagai suatu persamaan diffrensial, jawab dapat di peroleh dengan
mensubsitusikan persamaan coba-coba ke dalam fungsional secara tepat. Fungsi coba-
coba yag memberikan harga II minimum adalah merupakan jawab pendekatan.

2
Metode variasional adalah merupakan basis dari banyak formulasi elemen hingga,
tetapi metode ini mempunyai kelemahan yaitu : tidak dapat diaplikasikan pada persamaan
diferensial yang mengandung derivatif pertama.

1.2.Metoda-metoda Weighted Residual


Metode ini juga melibatkan suatu fungsi integral. Dalam metode ini, untuk
menjawab pendekatan disubstitusikan kedalam persamaan diffrensial dengan pendekatan
tidak memenuhi persyaratan persamaan, maka akan menghasilkan permasalahan.
Andaikan bahwa y = h(x) adalah merupakan jawab dari pendekatan persamaan (1.2).
substitusikan akan memberikan
Pendekatan variasional melibatkan integral dari suatu persamaan yang
mempunyai harga-harga

(1. 3)

Karena y = h(x) tidak memenuhi persyaratan persamaan. Maka metoda-metoda weighted


residual mengharuskan bahwa :

(1. 4)

Fungsi residual R(x) dikalikan dengan fungsi pemberatan fungsi dari Wi(x) dan
integral dari dua funsi tersebut harus sama dengan nol. Jumlah fungsi pemberatan
persamaan dengan jumlah koefisiens-koefisien yang belum di ketahui dalam persamaan
dan beberapa pilihan untuk fungsi-fungsi pemberatan,beberapa metode tersebut adalah

1. Metoda Collocation
Fungsi-fungsi impuls Wi(x) = (x-Xi) dipilih sebagai fungsi pemberatan.
Fungsi-fungsi ini equivalen ini equivalen dengan fungsi-fungsi residual yang
digunakan untuk menghilangkan titik-titik tertentu( mereduksi persamaan). jumlah

3
titik-titik yang dipilih sama dengan jumlah koefisien-koefisien yang belum di
ketahui dalam jawaban pendekatan.

2. Metode subdomaint
Setiap fungsi pemberatan dipilih sama dengan Wi(x)=1, untuk daerah
tertentu. Ini equivalen dengan integral fungsi residual untuk menghasilkan
persamaan dari daerah tersebut. Jumlah interval-interval integrasi sama dengan
jumlah pemberatan yang belum di ketahui dalam jawaban pendekatan.

3. Metode Galerkin
Metode galerkin menggunakan fungsi-fungsi yang sama Wi (x) yang
digunakan dalam persamaan pendekatan. Pendekatan ini adalah dasar dari metode
elemen hingga untuk masalah-masalah yang menyangkut suku pertama
derivative. Metode ini akan memberikan hasil yang sama seperti metoda
variasional bila diterapkan untuk analisis “Field Problems” diantaranya mekanika
fluida yang digunakan untuk penampang tak silindris dan sebagainya.

4. Metoda Least Squares

Metode least squares menggunakan fungsi residual yang di gunakan untuk


menghasilkan suatu kesalahan baru yang di definisikan sebagai berikut

(1. 5)

Kesalahan ini diminimalkan terhadap koefisien-koefisien yang tidak diketahui


dalam jawaban pendekatan. Metode least squares telah digunakan untuk
merumuskan solusi elemen hingga tetapi tidak sepopuler metode galerkin dan
variasional.

Contoh Ilustrasi
Untuk lebih jelasnya bagaimana metode-metode diatas dapat di gunakan untuk
memperoleh suatu jawaban pendekatan terhadap masalah fisik, maka disini akan di

4
berikan suatu contoh ilustrasi. Contoh tersebut adalah suatu beam di tumpu secara
sederhana mengalami momen terkonsentrasi pada masing-masing ujungnya seperti
diagram momen lengkung di tunjukan pada gambar 1.1

Gambar 1.1. sebuah beam di tumpu secara sederhana dengan momen dan konsentrasi

Persamaan diffrensial yang berhubungan dengan gambar diatas adalah

(1. 6)

Dengan kondisi-kondisi batas

Y(0) = 0 Y(H) = 0 (1. 7)

Koefisien EI menunjukan tahan beam terhadap defleksi dan M(x) adalah


persamaan momen lengkung. Dalam contoh ini, M(x) mempunyai harga konstan terhadap
M(0).

Persamaan pendekatan untuk defleksi beam adalah :

(1. 8 )

Dengan A adalah suatu koefisien yang belum di ketahui. Jawab ini merupakan
kandidat yang dapat di terima, mengingat persamaan diatas memenuhi persyaratan kondisi-
kondisi batas Y(0) = Y(H) = 0 dan mempunyai pola menyerupai kurva defleksi yang di
harapkan. Jawab ekstrak persamaan diffrensial adalah :

5
(1. 9)

1.2.1 Metoda Variasional

Integral untuk persamaan diffrensial (1.6) adalah :

(1. 10 )

Harga A yang membuat (1.8) merupakan pendekatan terbaik untuk kurva defleksi
adalah harga yang membuat Π minimum. Untuk mengevaluasi A, Π harus di tulis
sebagai fungsi A dan kemudian di minimalkan terhadap A. Catatan bahwa

Kita peroleh bahwa Π menjadi

atau

(1. 11)

Minimalkan Π di peroleh

Dan

(1. 1 2)

6
Jawab pendekatan adalah

(1.13 )

Meode Collocation

Metode collocation menyaratkan bahwa persamaan residul untuk jawab


pendekatan harus nol pada sejumlah titik-titik yang sama dengan sejumlah
koefesien yang belum diketahui. Residual diperoleh dengan mensubtitusikan (1.8)
ke (1.6). Hasilnya adalah

Karena (1.14)

Disini hanya ada satu koefesien yang belum diketahui, Oleh karena itu (R(x)
disamakan dengan nol pada satu titik antara 0 dan H. pilih x = H/2 dari
kenyamanan, maka kita memperoleh

Dan

(1.15)

7
Jawab pendekatan adalah

(1.16)

Jika dipilih titik selain x = H/2, maka akan diperoleh jawaban yang berbeda dari
perkiraan yang telah diperoleh.

1.2.2.Metode SubdomainR

Metode subdomain menyaratkan bahwa ∫ R (x) dx = 0 pada sejumlah lebih


banyak di subinterval karena ada koefesien-koefisen yang belum diketahui. Kita
dapat memilih berapa lama untuk membuat masing-masing subinterval. Pada
contoh ini hanya ada satu koefesien yang belum diketahui; Kemudian interval
yang dimaksud adalah [0, H]. Persamaan residual adalah (1.14), sehingga

Integrasi menghasilkan

Atau
(1.17)

Jawaban pendekatan adalah

(1.18)

8
1.2.3.Metode Galerkin

Dalam menggunakan metode ini Galerkin. ∫Wi (i) R (x) dx dievaluasi


menggunakan fungsi yang sama untuk Wi (x) yang telah digunakan dalam solusi
perkiraan. dalam contoh ini hanya satu fungsi pemberat, Wi (x)= sin πx/H.
Persamaan residual dan integralnya adalah

Integrasi menghasilkan

Atau
(1.19)

Dan jawabannya adalah

(1.20)

Jawabannya ini adalah identik dengan jawaban yang diberikan oleh metode
variasional.

1.2.4.Metode Leas Squares

Sebuah term kesalahan baru ∫ [R (dx), terbentuk jika saat menggunakan


kotak least aquares. Subtitusikan persamaan residual akan diperoleh

9
integrasi memberikan

Kesalan ini diminimalkan mumgkin terhadap A, menghasilkan

(1.21)

Setelah diperoleh A, jawab pendekatannya adalah

(1.21)

Ini juga identik denga jawaban yang diberikan oleh metode variational
dan metode galerkin, (1.3), (1.20).

Sebetulnya sulit untuk menjustifikasi metode yang paling akurat.


Kesalahan tergantung pada fungsi pendekatan dan persamaan yang bias
dipecahkan.prosentasi kesalahan untuk mencoba metode yang berbeda diberikan
di 1.2. Nampak nya persamaan (1.22) lebih akurat dari persamaan (1.16) atau
(1.8). hal terpenting yang dapat diambil dari contoh ini adalah bahwa solusi
numerik dari persamaan differensial dapat diformulasikan dalam bentuk integral.
Formulasi integral merupakan karakteristik dasar dari metode elemen hingga.

10
Gambar 1.2. Persamaan kesalahan untuk lima solusi
jawaban dari contoh beam ditumu sederhana

Formulasi Energi Potensial

Solusi masalah-masalah mekanika yang solid yang meliputi dua dimensi dan tiga dimensi
seperti plat dan cangkang, dapat didekati dengan beberapa cara. Pendekatan klasik adalah
memformulasikan persamaan diferensial dan menjawab analitis. Ini mungin tidak bisa
berjalan, mengingat kesulitan menjelaskan secara matematik geometri struktur dan atau
kondisi batas.alternatif terhadap solusi klasik adalah prosedur numeric didasarkan pada
kejadian yang menyatakan bahwa simpangan pada posisi kesetimbangan terjadi
sedemikian sehingga energi potesial sistim stabil mempuyai harga minimum.

Energi potensial yang memberi sumbangan pada masalah mekanika solid adalah
energy regangan (strain energy) yang didenfinisikan sebagai energi tersimpan selama
proses deformasi. Energi ragangan adalah suatu integral volume yang melibatkan hasil

11
kali komponen-komponen tegangan dan regangan. Sebagai contoh tegangan pada suatu
batang yang mendapatkan gaya aksil adalah

(1.23)

Prinsip energi potensial dan energi regangan akan stabil di bab-bab dibelakang.
Yang jelas prinsip ini banyak digunakan untuk masalah-masalah struktur dan mekanika
solid.

12
BAB II

ELEMEN LINEAR SATU DIMENSI

Dalam bab ini akan dibicarakan pembagian daerah satu dimensi ke dalam elemen-elemen linear
dan menjabarkan suatu persatuan elemen. Persamaan itu kemudian digeneralisasikan
sedemikian sehingga suatu persamaan “continuos piecewise smooth” dapat diterapkan didaerah
tersebut. Elemen linear digunakan untuk memperoleh jawab pendekatan terhadap persamaan
differensial berikut :

(2.1)

Persamaan elemen ini akan digunakan untuk menghitung perpindahan yang mengalami
pembebanan aksial.

Pembagian daerah menjadi elemen-elemen

Daerah satu dimensi adalah suatu segmen garis dan pembagian kedalam sub
bagian atau elemen cukup mudah dilakukan. Segmen garis dibagi menjadi menjadi
segmen garis pendek yang menggunakan nodal (Gambar 2.1). Nodal nodal diberi
penomoran secara berurutan dari kiri kekanan seperti pada penomoran nodal-nodal itu.

Ada beberapa aturan sebagai petunjuk untuk menentukan nodal-nodal yang kita
peroleh untuk mendapatkan jawab pendekatan yang akurat terhadap suatu persamaan
diferensial.

1. Tempatkan nodal didekat pada daerah dimana tidak diketahui ukuran


parameternya berubah secara cepat. Selanjutnya pada daerah yang jauh belum
diketahui relative konstan nodal dibuat lebih jauh.
2. Tempatkan nodal dimana saja terjadi perubahan harga koefesien D dan Q (2.1)
secara mendadak.
3. Tempat nodal dimana saja harga numeric ɸ pada (2.1). diperlukan

13
Aturan pertama mensyaratkan bahwa kita harus punya mengetahuan untuk mengetahui
kira-kira parameter yang belum diketehui bervariasi, ini menunjukkan dimana
pengetahuan ilmu tekik diperlukan dala proses sulosi. Aturan kedua juga perlu karna
integral-intergal yang melibatkan parameter D dan Q (2.1) harus dievaluasi. Integral
tersebut mudah dievaluasi jika tidak mempunyai koefesien-koefesien yang berubah
secara mendadak dakam interval intergrasi.

Gambar 2.1. Pembagian daerah satu dimensi bagian bagian elemen

2.1.Elemen Linear

Gambar 2.2 menunjukkan elemen linear satu dimensi yaitu garis bagian dengan
sebuah panjang L dan dua nodal masing-masing pada ujung elemen. Nodal-nodal
dinotasikan dengan i dan j dan harga nodal ɸ i dan ɸj. system koordinat asal disebelah kiri
adalah nodal i.

Parameter ɸ bervariasi secara linear antara nodal, dan persamaan untuk ɸ adalah

(2.2)

Koefesien-koefesien a1 dan a2 dapat ditentukan dengan kondisi nodal

14
(2.3)

Disubtitusikan (2.3) ke dalam (2.2), diperoleh sepasang persamaan

(2.4)

Yang menghasilkan a1 dan a2 sebagai

(2.5)

Gambar 2.2. Elemen linear satu dimensi

Subtitusi (2.5) kedalam (2.2) diperoleh

(2.6)

15
Dimana Xj-Xi telah diganti dengan L

16
Persamaan (2.6) merupakan elemen hingga. Harga nodal-nodal dikalikan dengan fungsi
linear x, yang disebut dengan bentuk fungsi atau fungsi interpolasi. Fungsi-fungsi ini
diberi notasi N dengan subscript untuk memperoleh nodal dengan bentuk yang mana
fungsi interpolasi spesifik digunakan. Fungsi –fungsi dalam (2.6) dinotasikan Ni dan Nj
dengan

(2.7)

Persamaan (2.6) dapat ditulis kembali sebagai

(2.8)

Dan juga sebagai

(2.9)

Dimana [N] = [Ni Nj] adalah vector baris fungsi interpolasi dan

Adalah vektor kolom terdiri dari harga-harga nodal elemen.

Fungsi interpolasi mempunyai karekteristik yang unik. Dan yang lain berharga 1
pada nodal nya sendiri dan berharga nol pada nodal yang lain-lain dari fungsi interpolasi
adalah bahwa fungsi ini selalu mempunyai harga yang sama dengan persamaan
interpolasi asal. Persamaan (2.2) adalah persamaan linear, maka fungsi interpolasi ini
juga linear (2.7). karekteristik dalam persamaan penjumlahan derivative fungsi
interpolasi terhadap x adalah nol.

17
Gambar 2.3. fungsi interpolasi linear Ni dan Nj

18
Contoh Ilustrasi

Sebuah elemen linear satu dimensi digunakan untuk memprediksi distribusi


temperature dalam sebuah fin. Solusi menujukkan bahwa temperature pada nodal i dan j
masing-masing adalah 120 dan 90o C. tentukan temperature pada titik berjarak 4 cm dari
titik asal dan gradien temperature elemen tersebut. Nodal i dan j terletak pada 1,5 dan 6,0
cm dari titik asal seperti ditunjukkan pada gambar 2.4.

Gambar 2.4. harga-harga nodal pada contoh permasalahan

Temperatur, ɸ, dalam elemen diberikan oleh (2.6)

Data elemen adalah

Subtitusikan menghasilkan

19
Gradien temperatur adalah direvatif persamaan (2.6)

(2.10)

Subtitusikan harga-harga nodal, diperoleh

2.2.Persamaan “Continuous Piecewise Smooth”

Persamaan “Continuous Piecewise Smooth” untuk daerah satu dimensi dapat


dikontruksikan dengan menggabungkan beberapa persamaan linear dengan
menggabungkan sifat-sifat yang telah dijelaskan ada seksi sebelumnya. Masalah
persamaan ini dapat ditulis sebagai

(2.11)

Dimana

(2.12)

Superskrip (e) menunjukkan suatu kuantitas elemen. Semua itu membutuhkan untuk
memberi harga-harga i, j dan e untuk setiap elemen yang lainnya. Nilai i dan j untuk e
tertentu diperoleh dari grid, dimana nodal i sebagai acuan untuk setiap elemen, misalnya
pemberian elemen pada grid dalam gambar 2.1 adalah

20
Persamaan untuk masing-masing elemen dalam gambar 2.1 adalah

(2.13)
Perlu diperhatikan bahwa N(1) dan N(2) merupakan persamaan differensial, jika
2 2
kedua melibatkan nodal 2. Persamaan-persamaan ini ini sebaga berikut

Ingat bahwa masing-masing persamaan (2.13) adalah untuk elemen tunggal dan
tidak dapat di-gunakan elemen lain, sehingga persaman pertama, misalnya, seharusnya
ditulis sebagai

Tetapi batas x dihilangkan dalam kebanyakan literatur elemen hinggga dan disini
juga demikian .

Komentar pada Notasi

Notasi berikut digunakan sehingga superskrip (e) tidak mempunyai tempat


disetiap koefesien.
20
1. Ungkapan-ungkapan dalam kurung mempunyai superskip (e), itu adalah (Gɸ +
Q)(e) kemudian setiap ungkapan harus di interpretasikan sebagai basis elemen.
2. Ungkapan ɸ(e) = Ni θi + Nj θj mengimplikasikan bahwa Ni dan Nj adalah benar-
benar N(e) dan N(e), dan θ1 dan θj adalah harga nodal elemen.
i j

21
BAB III

BAHASA PEMROGRAMAN TINGKAT RENDAH

(BPTR)

3. PENGENALAN

3.1. Pendahuluan

Bahasa assembly membuka rahasia perangkat keras dan perangkat lunak komputer.
Disini akan dipelajari bagaimana perangkat keras komputer dan sistem operasi
bekerjasama dan bagaimana program aplikasi berkomunikasi dengan sistem operasi.
Untuk memahami keseluruhan komputer dan sistem informasinya, seseorang perlu
memahami perangkat lunak pada berbagai level. Pertama level program aplikasi, dimana
program berinteraksi dengan DOS. Level bahasa tingkat tinggi, dimana
perintah/pernyataan yang handal diuraikan kedalam instruksi-instruksi mesin. Pada level
yang lebih rendah (lebih dekat dengan mesin), seseorang akan konsentrasi pada
instruksi-instruksi yang dikenali oleh CPU, sebagaimana program berkomunikasi dengan
DOS.

Bahasa assembly meningkatkan pemahaman seseorang tentang level yang lebih


rendah ini. Pada tulisan ini memberikan titik pandang bahwa bahasa assembly
seharusnya dipelajari secara kontekstual, sehingga interaksi perangkat keras dan
preangkat lunak komputer mungkin lebih mudah dipahami. Pada bab berikutnya, akan
dibahas perangkat keras komputer, bahasa mesin, konsep sistem operasi dan struktur
pemrograman.

Apakah bahasa assembly?

Bahasa assembly adalah bahasa pemrograman dengan korespondensi satu-satu antara


perintah-perintah/pernyataannya dan bahasa mesin komputer. Bahasa assembly tidak
satu jenis sebagaimana CPU komputer pun bermacam-macam. Setiap bahasa assembly
secara langsung dipengaruhi oleh set instruksi mesin komputer dan arsitektur perangkat
keras.

Secara singkat, bahasa assembly IBM-PC mengacu pada istruksi-instruksi yang dikenali
oleh keluargaa mikroprosesor Intel 8086-80486.

22
Apa itu assembler?

Assembler adalah program yang mengkonversi kode program sumber ke dalam


bahasa mesin. Pada tuliasn ini akan mengacu pada assembler yang membuat instruksi
mesin untuk mikrokomputer IBP yang sesuai. Semua kompter tersebut menggunakan
mikroprosesor keluarga intel, mulai dari intel 8088 sampai 80486. Program akan
berjalan dibawah sistem operasi PC-DOS/MS-DOS versi 3.0 atau lebih tinggi. Terdapat
dua assembler yang dikenal baik untuk IBM-PC yaitu MASM (Microsoft Assembler)
dan TASM (Turbo Assembler).

Bahasa assembly adalah kumpulan instruksi yang spesifik untuk sistem komputer
tertentu. Assembler adalah program yang menerjemahkan program yang ditulis dalam
bahasa assembly ke dalam bahasa mesin, yang dapat dieksekusi oleh komputer. Setiap
tipe komputer meiliki bahasa assembly yang berbeda, karena rancangan komputer
mempengaruhi instruksi yang dapat dieksekusi.

23
Bahasa assembly disebut bahasa level-bawah karena dalam struktur dan fungsi dekat
dengan bahasa mesin. Sebaliknya, bahasa tingkat tingggi seperti Pascal, Basic, Fortran
dan Cobol mempunyai perintah-perintah yang handal yang diterjemahkan ke dalam
berbagai instruksi mesin oleh kompiler.

Mengapa mempelajari bahasa assembly?

Berbagai alasan mengapa kita mempelajari bahasa assembly. Salah satu alasan adalah
untuk mempelajari arsitektur komputer dan sistem operasi. Alasan lain adalah karena
kegunaan pemrograman tertentu sulit atau tidak mungkin dikerjakan oleh bahasa tingkat
tinggi. Contoh, kompunikasi langsung dengan sistem operasi komputer mungkin
deperlukan. Program grafik warna kecepatan tinggi mungkin harus ditulis menggunakan
memori minimum. Program khusus mungkin diperlukan sebagai penghubung antara
printer dengan komputer.

Sering juga perlu untuk menghilangkan keterbatasan bahasa tingkat tinggi, diluar
keperluan, menentukan aturan-aturan tentang apa yang dibolehkan dalam program.
Contoh, pascal tidak mengijinkan nilai karakter diberi nilai dalam variabel integerr.
Pemrogram yang berpengalaman akan menemukan cara untuk keluar dari batasan ini,
tapi dalam pelaksanaannya, membuat kode tidak dapat digunakan oleh sistem komputer
lain dan sulit dibaca. Bahasa assembly, sebaliknya, memiliki sangat sedikit batasan atau
aturan. Harga yang harus dibayar untuk keleluasaan itu adalah perlu menangani berbagai
kerumitan dalam pemrograman.

Aplikasi bahasa assembly

Biasanya ktia membuat subrutin dalam bahasa assembly dan memanggilnya dari
program bahasa tingkat tinggi. Keuntungan dapat diperoleh karena ketanya bahasa
tingkat tinggi, dengan menggunakan bahasa tingkat rendah dalam membuat aplikasi.
Subrutin bahasa assembly menangani operasi-operasi yang tidak tersedia dalam bahasa
tingkat tinggi. Misal kita menulis program aplikasi bisnis dalam Cobol untuk IBM-PC.
Kita memerlukan aplikasi untuk mengecek ruang bebas disk, membuat subdirektory,
menulis proteksi file, dan membuat window yang overlap, semuanya dalam satu
program.

Misal kompilator Cobol tidak dapat melakukan semuanya, maka kita dapat mebuat
subrutin bahasa assembly untuk menangani tugas-tugas tersebut.

Bahasa mesin

Sebelum lebih jauh secara rinci membahas bahasa assembly, mari kita lihat dalam
suatu prespektif. Komputer kenyataannya tidak mengerti bahasa assembly, dia hanya
mengikuti bahasa mesin. Bahasa mesin adalah bahasa yang dibangun oleh sejumlah

24
angka yang dapat diinterpretasikan oleh CPU komputer. CPU biasanya mempunyai
program kecil yang ditambahkan langsung ke dalam chip, disebut microcode.
Penerjemah microcode mengubah langsung instruksi-instruksi mesin ke dalam sinyal
perangkat keras.

Dengan bahasa mesin memungkinkan untuk melaksanakan tugas-tugas umum oleh


CPU, seperti pemindahan bilangan atau perhitungan aritmatik. Berikut contoh instruksi
bahasa mesin yang memindahkan angka 5 ke dalam register AL.

25
1011000000000101

Deretan angka diatas ditulis dalam biner, sistem penomoran yang dibangun hanya
oleh angka 1 dan 0. Delapan bit pertama adalah kode operasi (opcode) yang
menunjukannya sebagai isntruksi yang memindahkan angka – 8 bit ke register AL.
Delapan bit kedua adalah operand. Instruksi secara keseluruhan memindahkan angka 5
ke dalam register AL.

Register adalah memori kecepatan tinggi yang berada di dalam CPU. Register
diidentifikasikan oleh nama 2 huruf, seperti AH, AL, atau AX.

Kumpulan instruksi (instruction set) CPU adalah sekumpulan instruksi mesin yang
dapat dieksekusi CPU. Untuk keluarga CPU intel, set instruksi adalah down-ward-
compatible, artinya bahwa instruksi yang bekerja pada prosesor level yang lebih rendah
akan bekerja juga pada prosesor yang lebih tinggi. Contoh instruksi MOV bekerja pada
8088 dan karena itu harus bekerja pula pada 80286. Tetapi terdapat instruksi yang lebih
maju dlam 80286 yang tidak dapat bekerja pada 8088.

Dulu, semua program ditulis dalam bahasa mesin. Hal ini sangat menyulitkan bagi
pemrogram baik dalam membacanya maupun menulisnya. Itulah sebabnya mengapa
dibuat assembler dan kompiler yang akan mengkonversi instruksi yang mudah dibaca,
dibuat dalam editor teks ke dalam bahasa mesin. Contoh instruksi diatas adalah : MOV
AL,5

3.2. Representasi Data

Karena kita akan bersentuhan dengan komputer pada level mesin, kita perlu untuk
memeriksa isi memori dan register. Komputer yang ada saat ini adalah komputer biner
yang sistem bilangannya terdiri angka 1 dan 0 yang kita kenal dengan istilah logic
digital.

Bilangan biner

Komputer menyimpan semua instruksi dan data sebagai rangkaian digit biner, tanpa
perbedaan antara keduanya. Contoh, tiga huruf pertama alfabet akan disimpan dalam
IBM-PC sebagai :

010000010100001000011 = “ABC”

26
Pada saat yang sama, instruksi untuk menjumlahkan dua buah bilangan akan
disimpan di memori sebagai :

0000010000000101

Bit & Byte. Setiap digit dalam angka biner desebut bit. 8 buah bit desebut byte, yang
merupakan unit terkecil penyimpanan pada komputer saat ini. Setiap lokasi dalam
komputer menyimpan 1 byte, atau 8 bit. Tipe penyimpan yang lebih besar adalah word
yang panjangnya 16 bit (2 byte).

27
byte byte

10110101 1011010

word

Setiap sistem penuliasan angka mempunyai basis, yaitu jumlah maksimum nillai pada
suatu digit. Ini disebut radix atau basis.

Sistem Basis / radix Digit yang mungkin

Biner 2 01
Oktal 8 01234567

Desimal 10 0123456789

Heksadesimal 16 0123456789ABCDEF

Dalam sistem bilangan heksadesimal, huruf A sampai F mewakili nilai desimal 10


sampai 15.

Pada saat mengacu pada bilangan biner, oktal atau heksadesimal, sebuah huruf kecil
akan ditambahkan pada akhir setiap bilangan untuk menunjukan basisnya. Contoh
bilangan 45 heksadesimal akan ditulis sebagai 45h, 76 oktal akan ditulis 76o atau 76q,
dan biner 11010011 akan terlihat 11010011b.

Komputer pribadi IBM disebut komputer 16-bit karena instruksinya dapat


mengoperasikan sejumlah 16-bit bilangan. Integer biasanya disimpan dalam memori
sebagai byte, word atau double word. Untuk masing-masingnya mempunyai batasan
bawah dan atasnya, sebagai berikut :

Tipe penyimpan Bit Range (bawah-atas)

Byte 8 0-225
Word 16 0-65,535

28
Double word 32 0-4,294,967,295

Walaupun masing-masing billangan membutuhkan jumlah bit yang berbeda-beda,


pada kenyataannya semua bilangan disimpan di memori sebagai nilai biner karena
arsitektur komputer adalah biner. Setiap bit memori adalah 1 atau 0, tetapi lokasi terkecil
memori yang diberi alamat adalah byte.

Pengubahan bilangan biner ke desimal

Karena berbagai keperluan mungkin kita perlu mengubah bilangan dari biner ke
desimal. Setiap posisi bit dalam bilangan biner adalah pangkat dari 2, seperti gambaran
berikut :

27 26 25 24 23 22 21 20

Nilai 128 64 32 16 8 4 2 1

Untuk mendapatkan nilai desimal dari sebuah bilangan biner, kita harus
menjumlahkan nilai setiap bit yang bernilai 1 dan memperoleh jumlah keseluruhannya.
Misalkan terdapat bilangan biner 00001001 :

29
0 0 0 0 1 0 0 1

Desimal 8 1 =9d

Bilangan heksadesimal

Bilangan biner yang banyak susah untuk dibaca, sehingga bilangan heksadsimal
biasanya sering digunakan untuk menggambarkan memori komputer atau instruksi.
Setiap digit bilangan heksadesimal mewakili 4 bit bilangan biner, dan 2 digit bilangan
heksadesimal mewakili satu byte. Pada contoh berikut terlihat bahwa bilangan biner
000101100000011110010100 digambarkan oleh bilangan heksadesimal 160794 :

0001 0110 0000 0111 1001 0100

1 6 0 7 9 4

Sebuah digit heksadesimal mungkin mempunyai nilai sampai 15 sehingga untuk


angka 10 – 15 menggunakan huruf A – F. Tabel berikut menunjukan bagaimana setiap 4
bit biner diterjemahkan ke dalam desimal dan heksadesimal :

Biner Desimal Heksadesimal

0000 0 0
0001 1 1

0010 2 2

0011 3 3

0100 4 4

0101 5 5

0110 6 6

0111 7 7

1000 8 8

1001 9 9

30
1010 10 A

1011 11 B

1100 12 C

1101 13 D

1110 14 E

1111 15 F

Posisi digit heksadesimal. Setiap posisi digit heksadesimal mewakili bilangan


pangkat dari 16.

163 162 161 160

Nilai 4096 256 16 1

31
Bilangan dapat dikonversi dari heksadesimal ke desimal dengan mengalikan masing-
masing digit dengan nilai posisinya. Misalnya bilangan 3BA4h, hasilnya

3 B A 4

Nilai posisi 4096 256 16 1


Hasil kali 12,288 2,816 160 4 = 15,268d

Pada saat perkalian huruf B diganti 11 dan A dengan 10.

Bilangan bertanda

Bilangan biner mungkin bertanda atau tidak bertanda.

Byte bertanda menggunakan 8 bit seluruhnya untuk nilai angkanya. Contoh,


11111111 = 255. Karena itu, 255 adalah nilai tertinggi yang dapat disimpan dalam byte
tidak bertanda. Nilai terbesar yang dapat disimpan dalam word tidak bertanda adalah
65,535.

Byte bertanda hanya menggunakan 7 bit untuk nilai sedangkan bit paling kiri
digunakan sebagai tanda. Bilangan mungkin positif atau negatif, jika tanda sama dengan
1 maka bilangan negatif sebaliknya jika tanda bernilai 0 maka bilangan positif :

Bit tanda

10001010 (bilangan negatif)

00001010 (bilangan positif)

Ones complement. Untuk menghitung bilangan ones complement dari suatu bilangan
maka balikan seluruh nilai bitnya. Contoh, ones complement dari 11110000b adalah
00001111b.

32
Twos complement. Untuk menyimpan nilai negetif maka digunakan bilangan twos
complement. Twos complement diperoleh dengan menambah satu pada bilangan ones
complement.

Contoh twos complement dari +6 (00000110b), balikan nilai bitnya untuk


mendapatkan ones compelent menjadi 11111001b, untuk memperoleh twos
complementnya ditambah satu menjadi : 11111010b (ini nilai twos complement untuk -
6). Untuk mendapatkan kembali nilai +6 sebagai berikut :

11111010 -6

00000101 ones complement

+ 1 tambah 1

00000110 +6

Nilai maksimum dan minimum. Karena nilai paling kiri pada bilangan bertanda
digunakan untuk tanda bilangan, maka ukuran bilangan akan berkurang, yang digunakan
hanya 7 bit sehingga nilai paling besar yang bisa dicapai adalah +127.

33
Tabel berikut menunjukan nilai maksimum dan minimum untuk byte, word dan double
word bertanda :

Tipe penyimpan Nilai terendah Nilai tertinggi

Byte -127 +127


Word -32,767 +32,767

Double word -2,147,483,647 +2,147,483,647

Penyimpan karakter

Komputer hanya dapat menyimpan bilangan biner, jadi bagaimana menyimpan


karakter seperti “A” dan “$” ? Telah dibuat suatu sistem menterjemahkan karakter ke
dalam bilangan biner yaitu American Standard Code for Information Interchange
(ASCII). Sistem lainnya, Extended Binary Code for Decimal Interchange (EBCDIC),
digunakan oleh mini dan mainframe komputer IBM.

Berikut ini tabel contoh kode ASCII :

Kode ASCII Ctrl Mnemonic Penjelasan

00 NUL Karakter kosong


01 Ctrl – A SOH Awal header

02 Ctrl – B STX Awal teks

03 Ctrl – C ETX Akhir teks

04 Ctrl – D EOT Akhir transmisi

05 Ctrl – E ENQ Pertanyaan (Enquiry)

06 Ctrl – F ACK Pemberitahuan

07 Ctrl – G BEL Bel

08 Ctrl – H BS Backspace

09 Ctrl – I HT Tab horison

0A Ctrl – J LF Line feed

0B Ctrl – K VT Tab vertikal

34
0C Ctrl – L FF Form feed

0D Ctrl – M CR Carriage return

0E Ctrl – N SO Shift out

0F Ctrl – O SI Shift in

10 Ctrl – P DLE Data link escape

11 Ctrl – Q DC1 Device control 1

12 Ctrl – R DC2 Device control 2

13 Ctrl – S DC3 Device control 3

14 Ctrl – T DC4 Device control 4

15 Ctrl – U NAK Pemberitahuan negatif

16 Ctrl – V SYN Synchronous idle

17 Ctrl – W ETB Akhir transmisi blok

18 Ctrl – X CAN Batal

19 Ctrl – Y EM Akhir medium

1A Ctrl – Z SUB Pengurangan

(substitusi)

35
1B Ctrl – [ ESC Escape

1C Ctrl – \ FS Pemisah file

1D Ctrl – ] GS Pemisah grup

1E Ctrl – ^ RS Pemisah rekord

1F Ctrl – -| US Pemisah unit

Standar kode ASCII hanya menggunakan 7-bit kode sedangkan nilai selebihnya yang
mungkin 7Fh. 8-bit lainya adalah pilihan, digunakan oleh IBM -PC untuk memperluas
kumpulan karakter. Nilai 80h – FFh menggambarkan simbol grafik dan karakter Yunani.
Nilai 0-1Fh adalah kode kendali untuk printer, komunikasi dan keluaran layar.

Semua karakter, termasuk bilangan dan huruf, dibuat unik pada kode ASCII.

Contoh, kode untuk karakter string “ABC123” adalah :

Karakter A B C 1 2 3

Kode ASCII 41h 42h 43h 30h 31h 32h

Penyimpanan bilangan. Setiap huruf atau digit memerlukan 1 byte memori. Namun
ketika menyimpan bilangan, kita bisa lebih efisien, contoh, bilangan 123 dapat disimpan
dalam memoori sebagai satu byte yaitu 01111011b.

3.3. Bahasa Assembly – Pengenalan

Insturksi bahasa assembly

Meskipun mungkin untuk membuat program bahasa mesin menggunakan angka,


bahasa assembly membuat pekerjaan lebih mudah. Instruksi bahasa assembly adalah
representasi simbolik instruksi mesin tunggal. Dalam bentuknya yang paling sederhana,
terdiri dari satu mnemonic, kode alfabet singkat yang secara harfiah “membantu
memori” dalam mengingat instruksi CPU. Mnemonic mungkin diikuti oleh operand
berikut contohnaya :

clc

36
inc ax
; hanya sebuah mnemonic
mov ax, bx
; operand tunggal

; dua operand

Setiap instruksi dapat diikuti oleh komentar, yang selalu diawali dengan titik koma
(;).

Operand, operand mungkin berupa register, variabel, lokasi memori atau nilai
immediate. Contoh :

10 (nilai immediate)

count (variabel)
AX (register)
[0200] (lokasi memori)

37
Contoh program

Program bahasa assembly dibangun oleh instruksi dan operand. Instruksi


memerintahkan CPU untuk melaksanakan aksi, sedang variabel adalah lokasi memori
dimana data disimpan. Variabel juga disebut operand memori. Operand langsung adalah
konstanta seperti 5 dan 10. Berikut ini contoh program untuk menjumlahkan 3 bilangan
dan menyimpannya dalam variabel 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

int 20 ; menyimpan ax dalam variabel sum

; 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 (hexa) ke dalam AX, membuatnya sama dengan 15. baris 3
menambahkan 20 ke AX, membuatnya sama dengan 35, dan baris 4 menyalin AX ke
dalam variabel dalam memori yang disebut SUM. Baris terakhir menghentikan program.

Perintah DEBUG untuk menyusun dan test program adalah sebagai berikut :

Perintah Komentar

A 100 Assembly dimulai pada lokasi 100h


Mov ax, 5 Perintah program yang pertama

Add ax, 10

Add ax, 20

Mov [0120] , ax Hasil jumlah pada lokasi 0120h

Int 20 Akhir program

38
(tekan Enter untuk mengakhiri assembly)

R Menampilkan register

T Trace satu instruksi

G Ekseskusi sisa program

Q Keluar dari Debug kembali ke DOS

Setelah isntruksi yang kedua akan diperoleh tampilan hasil sebagai berikut :

1. mov ax, 5 ax : 05

2. add ax, 10 ax : 10

3. add ax, 20 ax : 35

4. mov sum, ax ax : 35 sum : 35

39
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

Gambar 1.1. Program contoh

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 di eksekusi adalah ADD AX, 0020

3.3.1. Elemen Dasar Bahasa Assembly

Gambar 1.2. menunjukan kumpulan karakter dasar assembler. Karakter-karakter


tersebut mungkin digunakan unntuk 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 :

40
?

_ , (koma)

$

:
&
.
%
[]
!
()

<>
~
{}
|
+
/
-
=
/
#
*
^

41
Gambar 1.2. Kumpulan karakter assembly

Variabel, 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 titik desimal, diikuti oleh karakter
radix (d=desimal, h=hexa, q=octal, b=biner). Contoh :

Contoh Radix

11110000b Biner
200 Desimal

300d Desimal

4A6Bh Heksadesimal

2047q Oktal

2047o Oktal

Bilangan real : angka real mengandung digit, titik desimal tunggal, eksponent
(opsional) dan tanda awal (opsional). Sintaknya :

[{+/-}] digit.digit [E{+/-}] digit

Contoh

2.3

42
+ 200.576 E +05
0.243526E –5
- 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 besar. Kata
huruf kecil miring adalah istilah-istilah yang telah 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#?%&’

43
Konsatanta 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 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, oeprand dan


komentar. Pernyataan secara umum dibagi ke dalam dua kelas yaitu instruksi dan
perintah. Instruksi adalah pernyataan yang dapat dieksekusi, dan 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 DB memerintah assembler untuk membuat memori untuk
variabel bernama count dan memberi nilai awal 50.

Count DB 50

44
Isnturksi dieksekusi oleh mikroprosesor pada saat dijalankan. Instruksi dibagi ke
dalam tipe-tipe-tipe umum : 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, variabel, simbol atau kata kunci. Nama mungkin
mengandung salah satu karakter berikut :

Karakter Penjelasan

A … Z, a … z Huruf
0…9 Angka

? Tanda tanya

_ Underscore

@ Tanda @

45
$ Tanda dollar
. Titik

Nama mempunyai batasan sebagai berikut :

- Hanya 31 karakter pertama yang dikenali


- Tidak ada perbedaan antara huruf besar dan huruf kecil
- Karakter pertama tidak boleh angka
- Jika digunakan, tanda (.) hanya bisa digunakan sebagai karakter pertama
- Tidak boleh memilih nama yang sama dengan kata kunci (perintah/direktif)

Variabel dan konstanta. Nama digunakan sebelum perintah alokasi memori


mengidentifikasikan lokasi dimana data disimpan dalam memori. Atau mungkin juga
digunakan untuk mendefinisikan konstanta, sebagai berikut :

Count1 db 50 ; variabel (alokasi memori)

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. Seperti contoh berikut dimana Label1 dan Label2 adalah label yang
mengidentifikasikan lokasi dalam program :

Label1 : mov ax, 0

mov bx, 0


Label2 :

jmp label1

Kata kunci. Kata kunci atau reserved word selalu mempunyai arti yang sebelumnya
telah didefinisikan. Keyword mungkin instruksi atau direktif. Contohnya : MOV, PROC,

46
ADD, AX dan END. Kata kunci tidak dapat digunakan keluar dari konteknya atau
sebagai identifier, contoh penggunaan ADD sebagai label adalah tidak benar :

add : mov ax, 10

3.4. Contoh Program Hello

Kita lihat gambar 1.3. yang menampilkan pesan “Hello, world!” pada layar. Baris 1
mengandung perintah title; semua karakter sisanya pada baris 1 dianggap komentar,
sepreti pada baris 3.

Sebelum menyelesaikan lebih lanjut, kita jelaskan dulu segmen, yaitu bagian-bagian
yang membangun program.

47
Segmen code adalah bagian dimana instruksi program disimpan, segemen data adalah
bagian dimana variabel disimpan. Dan segmen stack dimana stack disimpan. Stack
adalah daftar dalam memori dimana program dijaga dalam variabel sementara, kembali
dari subrutin dan semacamnya.

Direktif dosseg menunjukan segmen standar untuk code, data dan segmen stack.
Perintah model small mengindikasikan bahwa program menggunakan microsoft
assembler memory “small”. Direktif stack menset 100 H (256) byte ruang stack untuk
program.

Title Program Hello world [1]

[2]

; program ini menampilkan pesan “Hello, world” [3]

[4]

dosseg [5]

. model small [6]

. stack 100h [7]

[8]

. data [9]

. hello_message db ‘Hello, world !’, 0dh, 0ah, ‘$’ [10]

[11]

. code [12]

main proc [13]

mov ax, @data [14]

mov ds, ax [15]

[16]

mov ah, 9 [17]

mov dx, offset hello_message [18]

int 21h [19]

[20]

mov ax, 4000h [21]

48
int 21h [22]

main endp [23]

endp main [24]

Gambar 1.3. Program Hello.asm

Direktif .code menandai awal segemen kode. Perintah .data menandai awal segmen
data, dimana variabel dideklarasikan.

Baris 9-10 mengandung segmen data, dimana variabel yang diberinama


hello_message dideklarasikan. Huruf DB adalah direktif define byte yang meminta
assembler untuk mengalokasikan serangkaian byte memori untuk data yang
mengikutinya.

Baris 13 menggunakan perintah proc untuk mendeklarasikan prosedur main


(mungkin juga menggunakan nama lain).

Baris 14-15 menyalin alamat segmen data ke dalam reg DS. Instruksi MOV selalu
mempunyai 2 operand. Tujuan dan sumber.

49
Baris 17-19 menyebabkan string karakter dituliskan ke konsole. Mereka
melakukannya dengan memanggil fungsi DOS yang menampilkan string yang alamatnya
dalam register DX. Nomor fungsi diletakan dalam register AH.

Baris 21-22 adalah perintah untuk berhenti dan kembali ke DOS. Baris 23 adalah
akhir dari prosedur main dan baris 24 baris terakhir yang diassembly.

50
3.5. Komponen Mikrokomputer

Video Display

Kebanyakan PC yang dibuat sejak 1990 mempunya display warna VGA (Video
Graphic Array). Display VGA standar yang mempunyai resolusi 640 (horisontal) kali
480 (vertikal) piksel. Display VGA minimal memiliki 16 warna berbeda secara
bersamaan, dan ada juga sampai 256 warna.

Terdapat juga display Super VGA (800 x 600) dan Ectended-VGA (1024 x 800),
yang dapat meningkatkan pembacaan program yang berbasis grafik.

Display warna yang digunakan oleh PC terdahulu adalah CGA (Color Graphics
Adapter) dan EGA (Enhanced Graphic Adapter). Keduanya memiliki piksel yang lebih
sedikit pada setiap baris dan kolomnya. IBM-PC yang asli mempunyai tampilan
monokrom yang hanya dapat menampilkan karakter tekst ASCII (25 baris dan 80
kolom).

Keyboard

Semenjak IBM-PC dikenalkan, keyboard telah mengalami perkembangan. Model


asalnya mempunyai 10 kunci fungsi, dan kunci panah kursor dibagi dengan kunci untuk
angka. Komputer yang lebih banyak kuncinya dikenalkan bersamaan dengan kompuer
IBM-AT dengan memiliki 12 kunci fungsi. Bahkan yang berikutnya, IBP seri PS/2
memperkenalkan keyboard dengan 12 kunci fungsi seperti top, kunci panah yang
terpisah, home, end, pageup dan pageDown. Akhir-akhir ini fabrik komputer PC
semuanya meniru format yang dimiliki keyboard IBM-PC

Drive disk

IBM-PC asli memiliki dua drive disk yaitu 5.25 inci berkapasitas 360 KB. Kemudian
IBM-AT membawa drive disk 1.2 MB yang dapat juga membaca HD 360 KB.
Kemudian drive disk 3.5 inci dikenalkan oleh komputer IBM seri PS/2, yang dapat
membaca dua format : 720 K dan 1.44 MB.

Unit sistem

Unit sistem adalah “jantung” komputer yang sesungguhnya. Contoh PC 386-


compatible ditunjukan pada gambar 2.1. ini menggunakan prosesor Intel 386,

51
mempunyai RAM 2 MB, 2 Floppy disk drive, 200 MB HD, 2 port parallel, 1 port serial
dan backup tape luar, modem internal dan mouse.

Board sistem (sering juga disebut motherboard) terhampar mendatar pada bagian
bawah unit sistem. Didalamnya terdapat banyak chip mikroprosesor, termasuk CPU,
RAM dan memory ROM, dan berbagai prosesor pendukung. Berikut ini adalah
komponen utama.

52
Prosesor pendukung, satu prosesor adalah chip pengendali interupt yang menangani
permintaan dari perangkat keras untuk mengintrupsi CPU. Chip pengendali DMA
menangani transfer data ke dan dari memori melalui bus data.

External Hard disk


16-bit VGA Serial and tape and
Parallel backup ploppy
video port connector disk Keyboard

controller controller connector

Bus mouse

controller

Internal Intel 80386 DX

2400-baud processor

modem

200-watt

CP
U power

suplay

Intel 80387
math

32-bit coproscessor

memori

53
expansio
n

slot

Half-height

200-MB

HD

2-MB Ram on ROM BIOS

system board

Gambar 2.1. Komputer IBM-386

Rom Bios. Ini disebut firmware (perangkat keras dengan program tambahan) bagian dari
sistem operasi PC. Biasanya ROM harus diganti karena untuk mendukung peripheral
baru.

RAM (Random Access Memory) : tempat meyimpan program dan data pada saat
program dijalankan. Khususnya, RAM disebut RAM dinamis karena isinya akan hilang
jika tidak menerima sinyal baru yang konstan dari CPU.

54
CMOS RAM. Informasi setup sistem disimpan disini, sehingga kita dapat
mengkonfigurasi komputer tanpa harus menggunakan switch mekanik

Slot tambahan. Terdapat beberapa tempat pada motherboard yang dapat digunakan
untuk menambah slot yang diperlukan seperti disk drive controller, tape drive

55
controller, video controller, network controller, I/O port, modem, mouse controller dll.

Power supply. Kotak besi yang menkonversi voltase 110 v AC dari sumber luar ke
dalam komputer.

Parallel port. Kebanyakan printer terhubung dengan komputer melalui port parallel.
Dengan parallel berarti 8 bit data dapat mengalir dari komputer ke printer secara
bersamaan.DOS mendukung 3 port parallel yaitu LPT1, LPT2 dan LPT3.

Serial port. Port serial digunakan untuk menghubungkan mouse, modem, atau
perangkat serial lainnya ke sistem komputer. Dengan tipe port seperti ini, data biner
dikirim satu per satu. DOS mendukung sampai 2 port serial yang disebut COM1 dan
COM2.

Keluarga mikroprosesor Intel

Berikut ini daftar pemroses keluarga Intel dari yang terdahulu :

80x87. Chip co-prosesor matematika dikenalkan sebagai penyerta pada 8086/8088.

Chip ini dapat menyelesaikan penghitungan floating-point dengan baik.

80186. 80186 merupakan pengembangan dari 8088, dengan 8 MHz clock dan instruksi
baru dengan tujuan untuk meningkatkan efesiensi prosesor.

80286. 80286 dikenalkan pertama kali pada komputer IBM-AT. RAM yang bisa diakses
sampai sebesar16 MB. Menggunakan 16-bit data dan mempunya kecepatan clock sampai
12-25 MHz.

80386. pada tahun 1985, Intel memperkenalkan prosesor 386 DX (dikenal sebagai
80386) yang mempunyai 32-register dan 32-bit bus data. Bersamaan dengannya
dikeluarkan juga co-prosesor matematika 80287 dan 80387.

80486. 80486 pada dasarnya sama dengan 80386 dengan tambahan co-prosesor
matematika built instruksi dan cache memori RAM kecepatan tinggi di dalamnya. Cache

56
RAM meningkatkan kinerja komputer dengan mengijinkan CPU untuk mengambil
instruksi dari memori kecepatan tinggi.

Kecocokan. Perlu dicatat bahwa setiap prosesor baru dikenalkan oleh Intel adalah akan
cocok dengan prosesor sebelumnya. Artinya perangkat lunak yang dibuat pada satu
prosesor akan bisa juga digunakan pada komputer yang lebih baru.

3.6. Arsitektur Sistem

CPU (Central Processing Unit)

57
Mikrokomputer menggunakan CPU tunggal, seperti pada gambara 2.2. dalam
kenyataannya terdapat banyak chip yang mendukung PC, yang paling nampak adalah
80x87 co-prosesor matematika, tapi CPU masih menjadi pengatur utamanya. Tugas yang
paling mendasar yang ditangani oleh CPU adalah :

Menemukan dan load instruksi berikutnya

Mengeksekusi instruksi :

Fetch data dari memori/register

Menyimpan data dalam memori/register

Melaksanakan penghitungan dan perbandingan

Memperbaharui penunjuk instruksi (pencabangan)

Bus Data Jalur keluaran

Register Data

Unit Kendali Arithmetic Register

(control unit) Logic Unit Flag

Register Alamat

58
Bus Alamat Jalur keluaran

Gambar 2.2. Rancangan CPU sederhana

CPU dibagi menjadi dua bagian : Arithmeticl Logic Unit (ALU) dan Control Unit
(CU). ALU melaksanakan operasi aritmetik, logic, dan penggeseran, CU mengambil
data dan instruksi dan menerjemahkan kode (decode) alamat untuk ALU.

Seluruh sisi chip adalah pin yang ditancapkan ke dalam soket dalam board sistem,
menghubungkannya ke bagian sistem komputer yang lain. Register berada dalam CPU.
Ketika sesuatu diambil dari memori, alamatnya dihitung oleh unit kendali dan dikirm
melalui bus alamat. Nilai dari memori (baik instruksi atau data) dikirim balik ke CPU
melalui bus data. Clock melakukan sinkronisasi setiap operasi CPU.

Bus data. Bus adalah kabel parallel yang mengirimkan data antara berbagai bagian CPU.
Sinyal kendali dan bit data digunakan pada saat pengambilan word memori dan
menempatkannya dalam register. Bus dikatakan bidireksional jika data dapat ditransfer
dari dua arah.

Register. Berada dalam CPU yaitu area penyimpan kecepatan tinggi, yang langsung
terhubung ke unit kendali dan ALU. Karenanya, penggunaan register untuk eksekusi
lebih cepat daripada menggunakan memori konvensional. Kumpulan instruksi Intel
membutuhkan penggunaan setidaknya satu register untuk semua instruksi.

59
Clock. Setiap operasi yang dilakukan di CPU harus disinkronkan oleh clock. Unit waktu
paling dasar untuk instruksi mesin yang disebut siklus mesin (machine cycle). Instruksi
mesin dalam prosesor Intel umumnya dilaksanakan antara 3 dan 20 clock.

Register

Register adalah lingkungan kerja khusus dalam CPU, dirancang untuk diakses pada
kecepatan tinggi. Register memiliki panjang 16 bit. Pengaksesan 4 register data dibagi
dua bagian yaitu setengah bagian atasnya dan setengah bagian bawah.

Register data AX, BX, CX, DX (16 bit)

AH, AL, BH, BL, CH, CL, DH, DL (8 bit)


Register segemn
CS, DS, SS, ES

Register indeks SI, DI, BP

Register khusus IP, SP

Register flag overflow, direction, interupt, tmp, sign, zero, auxiliary

carry, parity, carry.

Diagram register 8086/8088 ditunjukan pada gambar 2.3.

Register data. Empat register, dinamai register data atau register tujuan umum,
digunakan untuk perhitungan aritmetik dan pemindahan data. Perhitungan setiap register
dapat dialamati sebagai nilai 16-bit atau 8 bit.

Contoh register AX adalah register 16-bit, 8 bit atasnya disebut AH dan 8 bit bawahnya
dinamai AL. Posisi bit selalu diberi nomor dari kanan ke kiri dimulai dari nol.

Bit 15 ………… …………..0

60
16-bit register AX

Register AH Register AL

Bit 7 ……………..0 7 …………..0

Instruksi mungkin menunjuk 16 bit atau 18 bit register data dari daftar berikut :

AX BX CX DX

AH AL BH BL CH CL DH DL

61
Jika kita memindahkan 126Fh ke dalam AX maka AL akan berubah menjadi 6F h.

Tujuan Umum

AH AL

AX

Index

BH BL BP

BX

SP

62
SI

CH CL

CX

DI

Segmen
DH DL

CS

DX

SS

Status dan Kendali

DS
Flag

ES
IP

Gambar 2.3. Flag Intel 8086/8088

Masing-masing register dengan tujuan umum memiliki atribut-atribut khusus.

63
AX (akumulator) : AX disebut register akumulator karena digunakan oleh CPU untuk
operasi aritemtik. Operasi-operasi lain juga sedkit lebih efisien dengan menggunakan
AX.

64
BX (basis). Seperti register tujuan umum lainnya, register BX dapat melaksanakan
operasi aritmetik dan perpindahan data dan BX memiliki kemampuan pengalamatan
khusus. Dia dapat menyimpan alamat memori yang menunjuk pada variabel lain.
Tiga register lain yang memiliki kemampuan ini adalah SI, DI dan BP.

CX (counter). Register CX bekerja sebagai counter untuk instruksi pengulangan atau


looping. Isntruksi-instruksi tersebut secara otomatis mengulang dan mengurangi CX
dan keluar ketika CX sama dengan 0.

DX (data). Register DX mempunyai peranan khusus dalam operasi perkalian dan


pembagian. Pada saat perkalian, contohnya, DX menyimpan 16 bit perkalian.

Register segmen. CPU mengandung 4 register segmen, digunakan sebagai lokasi basis
untuk instruksi program, data dan stack. Register segmen sebagai berikut :

CS (code segment) : register CS menyimpan lokasi basis semua instruksi yang dapat
dieksekusi dalam program.

DS (data segment). Register DS adalah lokasi basis default untuk variabel-variabel


CPU menghitung lokasi variabel-variabel menggunakan nilai segmen dalam DS.

SS (stack segment). Register SS mengandung lokasi basis stack.

ES (extra segment). Register ES adalah lokasi basis tambahan untuk variabel-variabel


memori.

Register index. Register index mengandung offset variabel.

Istilah offset mengacu pada jarak variabel, label atau instruksi dari segmen basisnya.
Register index memprecepat pemrosesan string array dan struktur data lain yang
mengandung banyak elemen. Register-register index adalah :

SI (source index). Register ini mengambil nama dari instruksi epmindahan string,
yang mana string sumber ditunjuk oleh register SI. SI biasanya mengandung nilai
offset dari register DS.

DI (destination index). Register DI bekerja sebagai tujuan instruksi pemindahan


string. Biasanya mengandung offset dari register ES, BP (base pointer). Register BP
megnandung offset ??? dari register SS. ??? registeer BP sering digunakan oleh
subrutin untuk melokasikan variabel-variabel yang dilewatkan pada stack oleh
program pemanggil.

Register khusus : register IP dan SP merupakan register khusus sebagai berikut :

65
IP (instruction pointer). Register IP selalu mengandung offset instruksi berikutnya
yang akan dieksekusi. CP dan IP digabung untuk melaksanakan alamat komplit
instruksi berikutnya yang akan dieksekusi.

SP (stack pointer). Register SP mengandung offset atau jarak dari awal stack ke
puncak stack. Register SS dan SP bersama melakukan alamat lengkap puncak stack.

Register tambahan 80386. prosesor 8038x/80486 mengandung register 32-bit (gb), yang
meningkatkan efisiensi program pada penggunaannya. Pada saat yang sama juga
80386/80486 dapat menggunakan register 16-bit yang sama seperti 8088.

66
Register flag . Register flag adalah register 16-bit khusus dengan posisi bit sendiri dibuat
untuk menunjukan status CPU atau hasil operasi aritmetik. Setiap posisi bit yang relevan
diberi nama, posisi lain tidak didefinisikan.

15 14 13 12 11 10 9 8 7 65 4 3 2 1 0

x x x x ODITSZxAxPxC

O = Overflow S = Sign

D = Directione Z = Zero

I = Interrupt A = Auxiliary Carry

T = Trap P = Parity

X = tidak terdefinisi C = Carry

Kita tidak harus mengingat setiap posisi flag karena terdapat instruksi khusus untuk
menguji dan manipulasi flag. Terdapat dua tipe dasar flag yaitu control flag dan status
flag.

31 ………………………….0

EBP

EAX

ESP

|-------AX -----|

31 ………………………….0 ESI

67
EDI

EBX

|-------BX -----|

31 ………………………….0

CS

ECX Code Stack

SS

|-------CX -----|

DS

31 ………………………….0 ES

Data

EDX

FS

|-------DX -----| GS }

Status dan Kendali

31 ………………………….0

EFLAG

|-----FLAG----|

68
31 ………………………….0

EIP

|------- IP ------|

Gambar 2.4. Register Extended 80386

Flag

Flag Kendali. Sebuah bit mungkin diset dalam flag oleh pemrogram untuk
mengendalikan operasi CPU. Terdapat flag Direction, Interrupt, dan Trap.

Flag Direction mengendalikan petunjuk asumsi yang digunakan oleh instruksi pemroses
string. Nilai flag 1 = up dan 0 = down. Pemrogram mengendalikan flag ini,
menggunakan instruksi STD dan CLD.

Flag Interrupt membuatnya mungkin untuk terjadinya interrupt dari eksternal. Interrupt
ini disebabkan oleh perangkat keras seperti keyboard, disk drive dan timer clock sistem.
Seringkali kita menonaktifkan interrupt pada saat melaksanakan operasi yang krritis
yang tidak dapat diinterrupt. Nilai flag 1 = aktif, dan 0 = tidak aktif. Flag ini
dikendalikan oleh perintah CLI dan STI.

Flag trap menentukan apakah CPU berhenti atau tidak setelah instruksi. Debugger telah
menset flag ini sehingga pemrogram dapat menelusuri setiap instruksi programnya satu
per satu. Nilai flag 1 = trap on dan 0 = trap off; flag dapat diset oleh instruksi INT 3.

Flag status. Bit-bit flag status menggambarkan keluaran operasi aritmetik dan logic
yang dilaksanakan oleh CPU. Terdapat flag Overflow, Sign, Zero, Auxiliary Carry,
Parity dan Carry.

Flag Carry diset ketika hasil operasi aritmetik tidak bertanda lebih besar dari ukuran
operand tujuan. Contoh, jika nilai 200 dan 56 dijumlahkan dan ditempatkan dalam
register 8-bit (seperti AL), hasilnya akan terlalu besar dan tidak muat ; maka flag Carry
akan diset. Nilai flag 1 = ada carry, 0 = tidak ada carry.

Flag Overflow diset pada saat hasil operasi aritmetik bertanda terlalu besar untuk
dimuat ke dalam operand tujuan. Nilai flag 1 = overflow dan 0 = tidak overflow.

69
Flag Sign diset ketika hasil operasi aritmetik dan logic menghasilkan nilai negatif.
Karena bilangan negatif selalu bernilai 1 pada bit posisi tertingginya, flag Sign selalu
merupakan salinan bit tanda operand tujuan. Nilai flag 1 = negatif, 0 = positif.

Flag Zero diset ketika hasil operasi aritmetik dan logic menghasilkan nilai 0. Flag
sering digunakan oleh instruksi jump dan loop, untuk dapat mencabang ke logasi bari
dalam program berdasarkkan perbandingan dua buah nilai. Nilai flag 1 = nol , 0 = bukan
nol.

Flag Auxiliary Carry diset ketika operasi menyebabkan carry dari bitn 3 ke bit 4 (atau
meminjam dari bit 4 ke bit 3) operand. Flag ini jarang digunakan oleh pemrogram, nilai
flag 1 = ada carry dan 0 = tidak ada carry.

Flag Parity menggambarkan jumlah bit dalam hasil operasi yang diset. Jika terdapat
bilangan genap maka Paritynya genap. Jika terdapat bilangan ganjil maka

70
paritinya ganjil. Flag ini digunakan oleh sistem operasi untuk memeriksa integritas
memori atau memeriksa kebenaran transmisi data oleh perangkat lunak komunikasi.

Stack

Stack adalah memori buffer khusus yang digunakan sebagai temporary yang
menyimpan alamat dan data. Stack terletak dalam segmen stack. Setiap lokasi 16-bit
pada stack ditunjuk oleh register SP, yang disebut stack pointer . Stack pointer
menyimpan alamat elemen data terakhir yang ditambahkan (di-push) ke dalam stack.
Nilai terkahir yang dimasukan ke dalam stack adalah nilai yang pertama diambil dari
stack pada saat di pop. Mekanisme ini diistilahkan dengan struktur LIFO (last in first
out), yang terakhir masuk keluar duluan.
Kita lihat stack program yang mengandung satu nilai, 0006, pada bagian sebelah kiri
ilustrasi dibawah ini. SP menunjuk pada nilai yang terakhir ditambahkan.

Sebelum Sesudah

(high memory) (high memory)

0006 0006

SP

00A5

SP

71
(low memory) (low memory)

Push. Operasi PUSH menyalin nilai ke dalam stack. Ketika kita mendorong (push)
nilai ke dalam stack, seperti yang digambarkan oleh bagian kanan ilustrasi, SP dikurangi
nilainya sebelum nilai baru di push. Contoh berikut menggambarkan operasi push :

mov ax, 00A5

push ax

Instruksi tidak mengubah isi AX, tetapi hanya menyalinnya dan memasukannya ke
dalam stack.

72
Sejalan dengan penambahan nilai ke dalam stack maka stack semakin kearah bagian
bawah memori. Misalkan register BX dan CX bernilai 0001 dan 0002. instruksi berikut
menyalin nilainya ke dalam stack :

push bx

push cx

Sekarang nilai 0001 dan 0002 telah dimasukan ke dalam stack, akan terlihat sebagai
berikut :

Sesudah

(high memory)

0006

00A5

0001

SP
0002

(low memory) 73
Pop. Operasi POP mengeluarkan nilai dari stack dan menempatkannya dalam register
atau variabel. Sesudah nilai diambil dari stack, nilai stack pointer ditambah satu untuk
menunjuk pada nilai sebelumnya dalam stack. Misalkan kita akan mengeksekusi
instruksi berikut :

pop ax

Ilustrasi kondisi stack sebelum dan sesudah operasi ini adalah sebagai berikut :

Sebelum Sesudah

(high memory) (high memory)

0006 0006

00A5 00A5

0001 0001 SP

0002 SP (0002) (AX = 0002)

74
Setelah operasi POP dilakukan, register AX mengandung nilai yang berasal dari
puncak stack (0002). Stack pointer pindah ke nilai stack sebelumnya yaitu 0001. Nilai
yang di ambil (0002) tidak lagi ada dalam stack.

Terdapat tiga standar menggunakan stack :

1. Stack membuat daerah penyimpan sementara yang baik untuk register jika kita
ingin memelihara nilainya. Kita dapat menggunakan register dengan bebas dan
mengambil kembali nilainya dari stack setelah selesai operasinya.
2. Ketika subrutin dipanggil, program menyimpan nilai alamat kembali pada stack,
lokasi dimana program harus kembali setelah subrutin selesai.
3. Bahasa tingkat tinggi membuat darerah pada stack dalam subrutin yang disebut
frame stack. Ini berada pada daerah dimana variabel-variabel lokal dibuat pada
saat subrutin aktif.

Siklus Eksekusi Instruksi

Sebuah instruksi level-mesin masih harus diuraikan dalam serangkaian


mikroinstruksi. Instruksi tersebut dieksekusi oleh penerjemah dalam CPU yang disebut
mikroprogam. Kebanyakan mikroprogram disembunyikan, dirahasiakan, oleh fabrik
CPU, karena program tersebut akan memudahkan pesaing utt meniru fungsi chipnya.

75
Ketika CPU mengeksekusi instruksi untuk menambah nilai sebuah bilangan,
contohnya, mikroprogram harus melaksanakan operasi pada level yang lebih rendah :
menghitung alamat operand, menempatkan alamat operand bada bus alamat, menunggu
memori untuk merespon, transfer operand dari bus data ke ALU, dan seterusnya.

Untuk menyederhanakan, tedapat tiga operasi dasar yang dilaksanakan dalam CPU :
fetch, decode, dan execute. Setiap tahap dalam siklus instruksi memerlukan minimal satu
clock sistem, yang disebut siklur clock.

Fetch : Unit kendali mengambil instruksi, menyalinnya dari memori ke dalam CPU.

Decode : Unit kendali menambah nilai (increment) program counter dan


menerjemahkan instruksi. Jika operand lain ditentukan oleh instruksi, unit kendali
menerjemahkan alamat operand tersebut dan mengambilnya. Kemudian mengirim
operand ke dalam ALU.

76
Execute : ALU mengeksekusi operasi dan mengirim operand hasil ke unit kendali,
dimana nantinya dikembalikan ke register dan memori.

3.7 Perangkat Lunak Sistem dan Memori

Arsitektur Memori

Intel 8086 dapat mengakses memori 1,048,576 byte ( 1 MB) menggunakan alamat 20-bit
(00000 - FFFFF). Memori dibagi menjadi RAM dan ROM. RAM mulai pada lokasi
00000 sampai alamat BFFFF. ROM mulai lokasi C0000 sampai FFFFF.

Dibawah DOS, hanya 640 K pertama RAM yang disiapkan untuk program. Memori
sisanya diguankan oleh perangkat keras sistem seperti untuk display video dan
pengendali hard disk, atau oleh ROM BIOS.

Berikut ini peta memori pada Intel 8086 :

Alamat (hex)

00000 Interrupt Vector Table

00400 DOS data area

Software BIOS

DOS kernel, Device Driver, Etc 640 K RAM

Bagian Resident COMMAND.COM

9FFFF Bagian Transient COMMAND.COM

A0000 EGA/VGA Graphics Buffer

77
B0000 MDA Text Buffer

B8000 CGA/EGA/VGA Text Buffer

C0000 Reserved

FFFFF ROM BIOS

Gambar 2.5. Peta 1 MB pertama Memori PC

Inisialisasi DOS

1,024 byte Memori paling bawah (alamat 0000-003FF) mengandung tabel verktor
interrupt. Ini berisi alamat-alamat yang digunakan oleh CPU ketika memroses interrupt
perangkat keras dan perangkat lunak.

Diatasnya terdaapt BIOS, yang didalamnya terdapat rutin-rutin untuk mengelola,


keyboard, konsol dan printer dan clock tiap hari. Rutin-rutin tersebut berasar dari file
sistem tersembunyi setiap kali disk boot memanggil IO.SYS (IBMBIO.COM). Kernel
DOS berisi kumpulan layanan-layanan DOS yang dapat dipanggil dari

78
program aplikasi. Diatas kernel DOS terdapat buffer file dan file driver devaice yang
dapat dipasang (diambail dari CONFIG.SYS), diikuti oleh bagian resident
COMMAND.COM. Kemudian disebut pemroses perintah DOS : ini akan menintrrupt
perintah yang ditulis pada promt DOS dan memanggil dan mengesekusi program yang
disimpan dalam disk.

Video Display

Video display adalah dipetakan di memori. Dari pada mengirim setiap karakter video
melalui port ke video display, lebih efisien untuk memberikan setiap posisi layar pada
alamat memori yang terpisah. Ketika DOS menulis karakter ke layar, dia akan
memanggil subrutin dalam ROM BIOS, yang langsung menulis karakter ke alamat
memori video.

Read-Only Memory (ROM)

Lokasi memori alamat C0000h sampai FFFFFh disediakan untuk khusus penggunaan
ROM, termasuk pengeendali hard disk dan ROM BASIC.

ROM BIOS adalah bagian yang penting pada sistem operasi komputer. Di dalamnya
tertadapat diagnosa sistem, dan perangkat lunak konfigurasi, seperti halnya subrutin
input-output level bawah yang digunakan oleh DOS. BIOS dikodekan dalam chip
mikroprosesor dalam borad sistem, yang dibuat oleh fabrik.

79
80
3.8.Dasar- Dasar Bahasa Asembly

3.8.1. Perintah Definisi Data

Variabel adalah nama simbolik untuk lokasi dalam memori dimana data disimpan.
Dalam bahasa assembly, variabel diidentifikasikan oleh label. Setiap label menunjukan
lokasi awal variabel. Kita katakan bahwa offset label adalah jarak dari awal segmen ke
awal variabel.

Label, tidak menunjukan berapa banyak byte memori yang dialokasikan untuk
bariabel. Contoh, jika kita mendeklarasikan array 4 karakter, lebel aList hanya
mengidentifikasikan offset karakter awal (A)

Disimpan sebagai

A B C D Isi

Deklarasi

AList db ‘ABCD’ 1 2 3 4 Offset

Jadi jika huruf awal pada offset 0, maka selanjutnya pada offset 1, 2 dan seterusnya.
Kita menggunakan memori berdasarkan pada tipe yang didefinisikan sebelumnya :

Deskripsi Byte Atribut

DB Define byte 1 Byte


DW Define word 2 Word

DD Define doubleword 4 Dobleword

DF, DP Define far pointer 6 Far pointer

DQ Define quadword 8 Quadword

DT Define tenbytes 10 Tenbyte

81
Define byte (DB)

Perintah DB mengalokasikan memori untuk satu atau lebih nilai 8-bit. Diagram sintak
berrikut menunjukan bahwa nama adalah pilihan, dan hanya satu initial value yang
diperlukan. Jika diperlukan lebih dari satu maka dipisahkan dengan koma :

[name] DB initialvalue [, initialvalue] …

Initial value dapat berupa satu atau lebih nilai angka 8-bit, konstanta string, ekspresi
konstan atau tanda tanya (?). jika nilai bertanda maka rangenya –128 - + 127, jika tidak
bertanda rengenya 0-255. berikut contohnya :

82
char db ‘A’

signed1 db -128

signed2 db +127

unsigned1 db 0

unsigned2 db 255

Nilai banyak (multiple values), daftar bilangan-bilangan 8-bit mungkin dikelompokan


dibawah satu label, dengan nilai dipisahkan oleh koma. Pada contoh berikut, kita
umpamakan bahwa daftar disimpan pada offset 0000. Ini artinya bawha 10 disimpan
pada offset 0000, 20 pada offset 0001, 30 pada offset 0002, dan 40 pada offset 0003.

List db 10, 20, 30, 40

Karakter dan integer adalah satu dan sama. Variabel berikut mengandung nilai yang
sama dan mungkin diproses dengan cara yang sama :

char db ‘A’

hex db 41h

dec db 65

bin db 01000001b

oct db 101q

Setiap konstanta mungkin menggunakan radix yang berbeda ketika daftar item
didefinisikan, dan angka, karakter dan konstanta string mungkin dicampur secara bebas.
Jika nomor heksadesimal mulai dengan huruf (A-F), maka nol diawal ditambahkan
untuk membedakannya dengan label. Dalam conoh ini, list1 dan list2 mempunyai isi
yang sama :

list1 db 10, 32, 41h, 00100010b

list2 db 0Ah, 20h, ‘A’, 22h

83
Isi variabel mungkin tidak didefinisikan, untuk hal seperti ini menggunakan operator
tanda tanya (?). atau ekspresi bilangan dapat memberi nilai awal sebuah variabel dengan
nilai yang dihitung pada saat diassembly. Contoh :

count db ?

ages db ?,?,?,?,?

rowsize db 10*20

Varibel dapat diberi nilai string dimana variabel merupakan alwam byte awal. Contoh
berikut menunjukan satu string diakhiri oleh byte nol (mengandung 0), dan string lain
dengan panjangnya ditulis pada awal byte :

c_string db “Good afternoon”, 0

84
pascal_string db 14, “Good afternoon”

Perintah DB adalah perintah yang digunakan untuk menyimpan satu atau lebih baris
teks. Variabel tunggal mungkin dilanjutkan untuk banyak baris tanpa perlu membuat
label untuk masing-masing baris. String berikut diakhiri oleh akhir baris dan byte null :

a_long_string db “This is a long string, that”

db “clearly is going to take”

db “several lines to store in an”

db “assembly language program”, 0Dh, 0Ah, 0

Assembler dapat menghitung panjang string secara otomatis. Dengan menggunakan


karakter $ yang menyimpan lokasi sekarang nilai counter. Pada contoh berikut
a_string_len diset awal 16 :

a_string db “This is a string”

a_string_len db $- a_string

Define Word (DW)

Perintah DW membuat tempat penyimpan untuk satu atau lebih word 16-bit. Sintaknya
adalah sebagai berikut

[name] DW initialvalue [, initialvalue] …

Initialvalue mungin berupa nilai bilangan 16-bit dari 0 – 65,535 (FFFFh). Jika
initialvalue bertanda, range yang dapat diterima adalah dari –32,768 (8000h) sampai
+32,767 (7FFFh). Konstanta karakter mungkin disimpan pada bagian bawah word.
Kontanta string yang besar yang mungkin disimpan dalam word panjangnya 2 karakter,

85
seperti ‘AB’. Mungkin juga membiarkan variabel tidak terinisiaslisasi dengan
menggunakan operator (?).

Pembalikan Format Penyimapan (Reversed Storage Format). Assembler membalik


byte dalam nilai word ketiak disimpan dalam memori. Byte paling bawah berada pada
alamat paling bawah. Ketika variabel dipindahkan ke register 16-bit, CPU akan
membalik kembali byte tersebut. Ini ditunjukan pada ilustrasi berikut, dimana 2AB6h
disimpan dalam memori sebagai B6 2A.

Deklarasi data : value1 dw 2AB6h

Penyimpanan : B6 2A

86
Berikut ini tambahan contoh untuk DW. Seperti pada DB, tanda tanya memerintahkan
assembeler untuk tidak menginisialisasi loakasi memori dengan nilai tertentu :

dw 1, 2, 3 ; mendefinisikan 3 word

dw 0,65535 ; bilangan tidak bertanda tertendah dan tertinggi

dw –32768, +32767 ; bilangan bertanda terendah dan tertinggi

dw 256*2 ; ekspresi kontanta

dw 4000h ; notasi heksadesimal

dw 1111000011110000b ; notasi biner

dw 1000h, 4096, ‘AB’, 0 ; notasi campuran

dw ? ; word tunggal tidak diinsialisasi

Pointer. Offset variabel atau subrutin mungkin disimpan dalam variabel lain yang
disebut pointer. Pada contoh berikut, assembler menset P ke offest list. Kemudian PI
mengandung alamat P. Akhirnya, aProc mengandung offset label yang disebut
Clear_screen :

list dw 256, 257, 258, 259

P dw list

P2 dw P

aProc dw clear_screen

Define Doubleword (DD)

Perintah DD membuat tempat penyimpan untuk satu atau lebih doublewords 32-bit.

Sintaknya sebagai berikut :

87
[name] DD initialvalue [, initialvalue] …

Initialvalue dapat berupa nomor biner sampai 0FFFFFFFFh, alamat segmet-offset, 4-


byte bilangan real, atau bilangan real desimal. Byte-byter dalam variabel doubleword
disimpan dengan urutan terbalik, sehingga digit yang paling berarti disimpan pada
alamat paling bawah. Contoh, nilai 12345678h akan disimpan dalam memori sebagai :

Offset : 00 01 02 03

Nilai : 78 56 34 12

Anda dapat mendefinisikan satu atau leibh doubleword. Dalam contoh berikut,
far_pointer1 tidak diinsialisasi. Assembler langsung menginisialisasi far_pointer2
dengan 32-bit alamat segment offset subroutine1 :

88
signed_val dd -2147483648

far_pointer1 dd ?

far_pointer2 dd subroutine1

Operator DUP

Operator DUP hanya tampil sessudah perintah pengalokasian memori (DB, DW, DD,
DQ, DT). Dengan DUP, anda dapat mengulang satu atau lebih nilai ketika
mengalokasian memori. Ini khususnya berguna ketika pengalokasian ruang untuk tabel
atau array. Contoh-contoh berikut menginisialisasi tempat penyimpan dengan nilai
default :

db 20 dup (0) ; 20 byte semuanya sama dengan nol

db 20 dup (?) ; 20 byte tidak diinisialisasi

db 4 dup (‘ABC’) ; 12 byte : “ABCABCABCABC”

db 4096 dup (0) ; 4096-byte , semuanya nol

dw 5 dup (1000h) ; 5 word, masing-masing sama dengan nol

dw 5 dup (?)
; 5 word, tidak diinisialisasi
dd 100h dup(?)
; 256 doublewordk (1024 byte)

Operator DUP mungkin juga bersarang. Contoh pertama yang membuat tempat
penyimpan yang mengandung 000XX000XX000XX000XX. Contoh kedua membuat
tabel word dua dimensi dengan 3 baris dan 4 kolom.

aTable db 4 dup ( 3 dup(0), 2 dup(‘X’))

aMatrix dw 3 dup (4 dup(0))

89
Pemeriksaan tipe. Ketika variabel dibuat dengan menggunakan DB, DW, DD atau
perintah definisi data yang lain, assembler memberinya atribut asal (byte, word,
doubleword) berdasarkan ukurnya. Tipe ini dicek ketika anda merujuk pada variabel
tersebut, dan akan terjadi kesalahan jika tipenya tidak sesuai. Contohnya, anda ingin
memindahkan byte paling rendah varibel 16-bit ke dalam register 8-bit. Instruksi MOV
berikut akan salah karena count bertipe word dan AL adalah byte :

mov al, count ; error : ukuran operand harus cocok

….

count dw 20h

Pemeriksaan tipe seperti itu bagus karena membantu untuk menghindari kesalahan
logika. Jika diperlukan anda dapat menggunakan perintah LABEL untuk membuat nama
baru (dan tipe data) pada alamat yang sama. Sekarang variabel dapat diakses
menggunakan nama juga :

90
mov al, count_low

mov cx, count

count_low label byte

count dw 20h

3.8.2. Instruksi Transfer Data

Instruksi MOV

Karena MOV menyalin data dari satu operand ke operand lain, maka ini disebut instruksi
transfer data. Pada prosesor 8086 dan 80286, operandnya 8 atau 16 bit. Pada 80386 dan
80486, operand 32-bit juga mungkin digunakan. Sintaknya sebagai berikut :

MOV tujuan, sumber

Data benar-benar disalin sehingga operand sumber tidak berubah. Sumber mungkin
berupa nilai, register, atau operand memori. Tujuan mungkin berupa nilai, register atau
operand memori. Tujuan mungkin berupa register atau operand memori.

Operand Register. Pemindahan hanya melibatkan register, ini paling efisien. Satu
register berperan sebagai operand sumber, dan yang lainya, selain CS dan IP berperan
sebagai operand tujuan.

Operand immediate. Nilai langsung (konstanta integer) mungkin dipindahkan ke suatu


register (kecuali register segemen atau IP) dan mungkin dipindahkan ke memori.
Kesalahan umum disebabkan nilai lebih besar daripada operand tujuan.

91
Operand langsung. Variabel mungkin salah satu (tapi tidak keduanya) operand dalam
instruksi MOV. Isi variabel mungkin sumber atau tujuan move.

Contoh MOV dengan semua tiga tipe seperti berikut :

mov al, bl

mov dx, cx

mov bl, 1

mov bx, 8FE2h

mov al, count

mov total, ax

mov total, 1000h

count db 10

total dw 0

92
Operand mempunyai sedikit keterbatasan, yang berdasarkan rancangan fisik
pemroses dan set instruksinya. Berikut ini tidak diperbolehkan :

- CS atau IP sebagai register tujuan


- Memindahkan data immediate ke register segmen
- Memindahkan dari register segmen ke register segmen
- Perbedaan ukuran antara operand sumber dan tujuan
- Nilai immediate sebagai tujuan
- Perpinadahan dari memori ke memori
Contoh pemindahan yang tidak diperbolehkan :

mov ip, ax ; ip sebagai tujuan

mov ds, 1000h ; immediate ke segmen

mov ds, es ; segmen ke segmen

mov al, bx ; ukuran operan tidak sama

mov si, al ; ukuran operan tidak sama

mov word_1, al ; ukuran operan tidak sama

mov 1000h, ax ; immediate sebagai tujuan

mov word_2, word_1 ; memori ke memori

word_1 dw 1000h

word_2 dw 0

Offset

Anda dapat menambahkan offset pada operand memori. Dengan ini maka anda dapat
mengakses nilai data yang tidak mempunyai label. Misalkan kita punya daftar nomor 8-
bit yang disebut array. Kemudian array+1 adalah nama yang mengacu pada offset 1 byte
lebih dari array. Keduanya, array dan array+1 mempunyai offset yang dihitung oleh
assembler sebagai offset fixed dari permulaan segemen data. Alamat-alamat tersebut
digunakan untuk mengakses memori pada offset yang diberikan, seperti contoh berikut :

93
. data

array db 10, 20, 30, 40, 50

. code

mov al, array ; isi = 10

mov dl, array+1 ; isi = 20

mov dh, array+4 ; isi = 50

Ukuran atribut kedua operand harus sesuai. Dalam contoh berikut, int_1 hanya dapat
dipasangkan dengan register 16-bit. Juga, byte_1 hanya dapat dipasangkan dengan
register 8-bit :

94
. data

int_1 dw 1000h

byte_1 db 10h

. code

mov ax, int_1

mov int_1, si

mov al, byte_1

mov byte_1, dl

Operator PTR. Biasanya kita menggunakan operator PTR untuk mengetahui tipe
operand. Nama PTR tidak benar kalau dimaksudkan penggunaan pointer – ini bernar-
benar mengidentifikasikan atribut operand memori. Pada contoh berikut, WORD PTR
mengidentifikasikan count sebagai variabel berukuran word, dimana BYTE PTR
mengidentifikasikan var2 sebagai operand 8-bit.

mov word ptr count, 10

mov byte ptr var2, 5

Perintah XCHG

Perintah XCHG menukarkan isi dari dua register atau antara register dengan variabel.
Sintaknya sebagai berikut :

XCHG op1, op2

Dua operand mungkin register atau operand memori, selama satu operandnya register.

XCHG adalah cara yang efisien untuk menukarkan dua operand 8-bit atau 16-bit
karena tidak memerlukan register ketiga untuk menyimpan nilai sementara. Khususnya
dalam aplikasi pengurutan, instruksi ini mempunyai keuntungan karena kecepatannya.

95
Satu atau kedua operand mungkin register, atau register mungkin dikombinasikan denan
operand memori. Dua operand memori tidak boleh digunakan secara bersamaan. Contoh
berikut adalah contoh yang benar :

xchg ax, bx

xchg ah, al

xchg var1, bx

Operasi stack

Stack adalah buffer memori khusus yug digunakan untuk program aplikasi dan DOS.
Dua register berperan dalam stack : register SS (stack segment) mengandung lokasi basis
stack; register SP (stack pointer) mengandung alamat puncak stack, dimana nilai terakhir
dimasukan.

Beberapa istilah yang terdapat pada stack : operasi PUSH adalah meletakan nilai baru
pada stack dan mengurangi nilai stack pointer; stack bergerak kearah bawah

96
dalam memori setiap nilai baru dimasukan. Operai POP mengeluarkan data dari stack
dengan menyalin words kedalam register atau operand memori dan menambah nilai
stack pointer. Setiap inputan stack panjangnya 2 byte, jadi hanya operand 16-bit yang
mungkin dimasukan atau dikeluarkan.

DOS membagi stack dengan program aplikasi, jadi ruang memori yang cukup harus
disiapkan untuk menyediakan keduanya. Biasanya kita menggunakan 256 byte,
menggunakan perintah .STACK.

Instruksi PUSH. Instruksi PUSH mengurangi register SP dan menyalin isi register atau
operand memori 16-bit kedalam stack pada lokasi yang ditunjuk oleh SP. Hanya pada
prosesor 80286 atau yang lebih tinggi anda dapat memasukan nilai immediate. Berikut
ini contoh penggunaanya :

push ax

push memval

push 1000h

Instruksi PUSH bisa digunakan untuk menyimpan nilai register sementara, untuk
suatu saat diambil kembali.

Instruksi POP. Instruksi POP menyalin isi stack yang ditunjukan oleh SP ke dalam
register 16-bit atau variabel, dan menambah SP. Dua register, CS dan IP, tidak boleh
digunakan sebagai operand. Contoh POP seperti terlihat dibawah ini.

pop cx

pop memval

Menyiman dan mengambil kembali nilai register. Berbagai cara bisa dilakukan jika
sebuah register akan digunakan ulang. Pada contoh berikut, pemanggilan DOS (int 21h)
untuk menampilkan string pada layar. DX dan AX diasumsikan mempunyai nilai penting
yang harus disimpan kembali sesudah tampilan. Karena stack berstruktur LIFO (last in
first out) maka register yang terakhir disimpan pertama kali :

97
push ax

push dx

mov ah, 9

mov dx offset message

int 21h

pop dx

pop ax

message db “Ini adalah pesan.$”

98
PUSHF dan POPF. Instruksi PSUHF memasukan register flag ke dalam stack,
menjaganya agar tidak terjadi perubahan. Pada lain waktu, instruksi POPF dapat
digunakan untuk mengembalikan nilai flag. Contoh berikut, kita menyimpan flag
sebelum memanggil subrutin yang mungkin mengubah flag.

3.8.3. Instruksi Aritmetik

Hampir semua program komputer dapat melaksanaklan operasi aritmetik. Set intruksi
Intel mempunyai instruksi untuk aritmetik integer, menggunakan operand 8-bit dan 16-
bit. Operasi floating-point ditangani dalam salah satu dari ketiga cara berikut : 1. Chip
koprosesor matematika khusus (8087, 80287, 80387). 2. Rutin perangkat lunak yang
berfungsi sama dengan koprosesor, atau 3. Perangkat lunak yang mengkonversi nilai
floating-point ke integer, menghitung, dan kemudian mengkonversi bilangan kembali ke
floating-point.

Instruksi INC dan DEC

Instruksi INC dan DEC menambah 1 atau mengurang 1 nilai dari suatu operand,
secara berurutan. Sintaknya sebagai berikut :

INC tujuan

DEC tujuan

Tujuan mungkin register 8-bit atau 16-bit atau operand memori. INC dan DEC lebih
cepat dari instruksi ADD dan SUB. Semua status flag dipengaruhi kecuali flag Carry.
Contohnya sebagai berikut :

inc al

dec bx

inc membyte

dec byte ptr membyte

dec memword

99
inc word ptr memword

Instruksi ADD

Instruksi ADD menjumlahkan operand sumber 8 atau 16-bit ke operand tujuan pada
ukuran yang sama. Sintaknya sebagai berikut :

ADD tujuan, sumber

Sumber tidak diubah oleh operasi. Ukuran operand harus sesuai dan hanya satu
operand memori yang digunakan. Register segment tidak boleh jadi tujuan. Semua status
flag dipengaruhi. Contoh sebagai berikut :

add al, 1

add cl, al

100
add bx, 1000h

add var1, ax

add dx, var1

add var1, 10

Instruksi SUB

Instruksi SUB mengurangkan operad sumber dari operand tujuan. Sintak SUB
sebagai berikut :

SUB tujuan, sumber

Ukuran kedua operand harus sesuai, dan hanya boleh satu operand memori. Register
segment tidak boleh jadi operand tujuan. Pada level bit, yang terjadi adalah operand
source dinegasikan kemudian ditambahkan ke tujuan. Contoh, 4-1 adalah 4+(-1).
Mengingat kembali bahwa notasi twos komplemen digunakan untuk menegasikan
bilangan, jadi –1 disimban sebagai 11111111b :

0 0 0 0 0 1 0 0 (4)

+ 1 1 1 1 1 1 1 1 (-1)

0 0 0 0 0 0 1 1 (3)

Penjumlahan ini menghasilkan carry pada bit yang paling tinggi (menset carry flag),
tetapi carry sendiri diabaikan ketika bekerja dengan bilangan bertanda.

Contoh SUB digunakan denganb berbagai tipe operand seperti berikut :

sub al, 1

sub cl, al

sub bx, 1000h

101
sub var1, ax

sub dx, var1

sub var1, 10

Flag yang dipengaruhi oleh ADD dan SUB

Jika ADD atau SUB menghasilkan nilai nol, maka flag zero di set; jika hasil negatif
maka flag tanda di set. Pada contoh beirkut, baris 2 menghasilkan nilai nol dan baris 4
menghasilkan nilai –1 (FFFFh) .

mov ax, 10

sub ax, 10

mov bx, 1

sub bx, 2

Flag zero diset ketika hasil operasi aritmetik sama dengan nol. Catatan bahwa

INC dan DEC mempengaruhi flag zero tapi tidak mempengaruhi flag carry :

102
mov bl, 4Fh

add bl, 0B1h

mov ax, 0FFFFh

inc ax

Keputusan kapan operand bertanda atau tidak bertanda seluruhnya diserahkan kepada
pemrogram. CPU memperbaharui flag Carry dan overflow untuk menangani dua
kemungkinan. Untuk alasan ini, kita perlu membahas dua tipe operasi secara terpisah.

Operasi tidak bertanda (unsigned). Untuk aritmetika tidak bertanda, kita hanya peduli
pada flag carry. Jika hasil operasi penjumlahan terlalu besar untuk operand tujuan, maka
flag carry diset. Contoh, penjumlahan 0FFh + 1 seharusnya sama dengan 100h, tapi
hanya dua digit paling bawah (00) yang pas untuk AL. maka operasi menset flag carry :

mov ax, 00FFh

; AX = 0000, CF = 1
add al, 1

Dalam kontek ini, ADD adalah operasi 8-bit karena AL yang digunakan. Jika kita
ingin mendapatkan jawaban yang benar maka kita harus menambah 1 AX, membuatnya
menjadi operasi 16-bit.

mov ax, 00FFh

; AX = 0100, CF = 0
add ax, 1

Situasai yang sama juga terjadi ketika kita mengurangkan operand yang lebih besar
(2) kepada yang lebih kecil (1). Flag carry memberitahu kita hasilnya tidak berguna.

mov ax, 5501h

; AX = 55FF, CF = 1
add ax, 2

103
Operasi bertanda. Flag overflow diset ketika operasi penjumlahan atau pengurangan
menghasilakan bilangan bertanda diluar range.

Contoh 1 :

mov al, + 126 01111110

add al, 2 + 00000010

10000000 AL = -128 ?, OF =1

Contoh 2 :

mov al, -128 10000000

sub al, 2 - 00000010

01111110 AL = + 126?, OF = 1

104
3.8.4. Mode Pengalamatan

Kumpulan instruksi Intel menyediakan cara yang bervariasi untuk menemukan lokasi
memori – cara-cara ini disebut mode pengalamatan. Dengan cara ini dapat memudahkan
pemrosesan list dan untuk mengacu struktur data yang komplek. Juga, kompile bahasa
tingkat tinggi memerlukannya untuk membuat instruksi mesin yang lebih sedikit ketika
set instruksi CPU menggunakan cara yang baik dalam pengacuan data.

Terdapat lima tipe mode pengalamatan, ditunujukan dalam tabel mode pengalamatan
dibawah. Dalam tabel, dispalecement berupa angka atau offset variabel. Effective
address operand mengacu pada offset (jarak) data dari awal segment. BX dan BP adalah
register basis, dan SI dan DI adalah register index. Setiap contoh berikut mengacu pada
isi memori pada alamat efektif.

Mode pengalamatan

Mode Contoh Keterangan

Direct Op1 Alamat efektif adalah


bytelist displacement

[200]

Register Indirect [bx] EA adalah isi basis atau

[si] index

[di]

Based or Indexed list [bx] EA adalah penjumlahan

[si+list] register basis atau index

[bp+4] dengan displacement

list [di]

[bp-2]

105
Base-indexed [bx + si] EA adalah penjumlahan

[bx][di] register basis dan register

[bp-di] index

Base-indexed with [bx+si+2] EA adalah penjumlahan

displacement list[bx+si] register basis, register

list [bx][si] index dan dispalcement

Operand register

Operand register mungkin berupa register 8 atau 16 bit. Secara umum, mode
pengalamatan register adalah paling efisien karena register adalah bagian dari CPU

106
dan tidak diperlukan pengaksesan memori. Beberap contoh menggunakan instruksi

MOV sebagai berikut :

mov ax, bx

mov cl, al

mov si, ax

Operand Immediate

Operand immediate adalah ekspresi konstan, seperti angka, karakter atau ekspresi
aritemetik. Assembler harus menentukan nilai operand immediate pada waktu
asssembly. Nilainya disisiplak langsung kedalam instruksi mesin. Contoh operand
immediate ditunjukan sebagai berikut. Contoh terkahir, (2+3)/5, adalah ekspresi yang
dievaluasi apda saat assembly.

Contoh Ukruan (bit)

10 8
‘A’ 8

‘AB’ 16

65535 16

(2+3)/5 8

Operand direct

Operand direct mengacu pada isi memori pada offset variabel. Assembler menjaga
nilai offset setiap label, membuatnya memungkinkan untuk menghitung alamat efektif
operand direct. Pada contoh ini, isi memori pada lokasi count dipindah ke AL :

mov al, count


count db 20

107
; AL = 20

Oprator OFFSET. Ketika diperlukan pemindahan offset label ke dalam register atau
variabel, maka digunakan operator OFFSET. Karena assembler mengetahuai offset
settiap label sebagai program yang sedang diassembly, maka mudah untuk
menggantikan nilai offset kedalam isntruksi. Misalkan offset variabelaWord dalam
contoh berikut adalah 0200h; instruksi MOV akan memindahkan 200h ke dalam BX
langsung :

aWord dw 1234

mov bx, offset aWord

Operand tidak langsung

Jika offset variabel ditempatkan dalam register basis atau index, maka register
menjadi pointer ke label. Untuk variabel yang mengandung element tunggal, maka

108
dia akan mempunyai nilai yang kecil, tetapi untuk daftar item, pointer mungkin akan
ditambah untuk menunjuk setiap elemen.

Contoh, jika kita membuat string dalam memori pada lokasi 0200h dan menset BX ke
offset string, kita dapat memproses elemen dalam string dengan menjumlahkan offsetnya
dengan BX. F terakhir berada pada offset 5 dalam contoh berikut :

CODE :

aString db “ABCDEFG”


; BX = 0200
mov bx, offset aString

add bx, 5 ; BX = 0205


mov dl, [bx] ; DL = ‘F’

Ilustrasi

0200

A B C D E F G … … …

aString [bx]

Default segmen. Jika BX, SI atau DI digunakan, alamat efektif adalah default offset
dari register DS (data segment). BP, disisi lain, merupakan offset dari register

SS (Stack segment). Umpamanya segment stack dan segment data berada pada lokasi
yang berbeda, dua pernyataan berikut akan menimbulkan efek yang berbeda :

mov dl, [si]

109
mov dl, [bp]

Based dan Indexed Operand

Operannd basis dan indeks pada dasarnya sama : register ditambahkan pada
displacement untuk mendapatkan alamat efektif. Register yang dipakai harus SI, DI, BX
atau BP. Displacement adalah angka atau label yang offsetnya diketahui pada waktu
assembly. Notasi mungkin dalam bentuk yang sama :

Register ditambahkan ke offset :

mov dx, array[bx]

mov dx, [di+array]

mov dx, [array+si]

Register ditambahkan ke konstanta :

mov ax, [bp+2]

mov dl, [di-2]

mov dx, 2[si]

110
Contoh. Jika kita membuat array bernilai byte yang disimpan dal memori logaksi
0200h dan menset BX dengan 5, maka BX akan menunjuk bialngan pada offset 5 ke
dalam array. Contoh berikut ini sebagai ilustrasi :

Code :

array db 2,16,4,22,13,19,42,64,44,88

mov bx, 5

mov al, array[bx]

ilustrasi :

02 16 04 22 13 19 42 … … …

array [BX] (BX = 0005)

Base-Indexed Operand

; menunjuk pada array (0150) ;


Alamat efektifmemilih baris kedua operand
dibangun oleh; memilih kolom ke tiga penggabungan
register basis
; mengambil nilai pada alamat efektif 0157
dengan register
index. Misalkan BX = 2002h dan SI =
6; instruksi berikut akan menghitung
alamat efektif 208h :

mov al, [bx +si]

111
Teknik ini sering berguna untuk array dua dimensi, dimana BX dapat menunjuk
offset baris dan SI offset kolom. Contoh berikut, alamat efektif yang dibangun oleh
[bx+si] adalah 0157 :

CODE :

array db 10, 20, 30, 40, 50

db 60, 70, 80, 90, A0


db B0, C0, D0, E0, F0

….

mov bx, offset array


add bx, 5 mov si, 2

mov al, [bx + si]

Ilustrasi
0150

10 20 30 40 50 60 70 80 90 … … …

112
[BX] [SI]

Dua buah register basis atau dua buah register index tidak dapat digabungkan, jadi
contoh berikut akan salah :

mov dl, [bp-bx] ; salah : dua register basis

mov ax, [si-di] ; salah : dua register index

Base-Indexed dengan displacement

Alamat efektif operand dibangun dengan menggabungkan register basis, register


index dan displacement. Contohnya sebagai berikut :

mov dx, array [bx] [si]

mov ax, [bx + si + array]

add dl, [bx + si + 3]

sub cx, array [bp+si]

Dengan menggunakan array dua dimensi kita tidak harus lagi menset BX ke awal
array. Kita hanya menset BX pada offset baris kedua, relatif terhadap awal tabel. Ini
akan menyebabkan kode lebih sederhana :

CODE :

array db 10, 20, 30, 40, 50

db 60, 70, 80, 90, A0

113
db B0, C0, D0, E0, F0

….

mov bx, 5 ; memilih baris kedua

mov si, 2 ; memilih kolom ke tiga

mov al, array[bx + si] ; mengambil nilai pada alamat efektif 0157

Ilustrasi

0150 0155 0157

10 20 30 40 50 60 70 80 90 … … …

[BX] [SI]

114
Penjumlahan serangkaian bilangan

Contoh program berikut menunjukan bagaimana bermacam-macam mode


pengalamatan bisa digunakan ketika mengakses elemen sebuah array. Array berada pada
offset 150, dan hasil penjumlahan akan disimpan pada offset 153. Program berikut
mungkin diassemble dan dijanlankan dalam Debug.

A 150

db 10, 20, 30, 0

A 100

mov bx, 150

mov si, 2

mov al, [bx]

add al, [bx+1]

add al, [bx + si]

mov [153], al

int 20

d 150, 153

115
3.8.5. Struktur Program

Gambar 3.1. menunjukan program HELLO.ASM. Perintah untuk mengassembly dan


link program ini ditunjukan oleh turbo assembler dan microsoft assembler sebagai
berikut :

Turbo Assembler MASM

tasm hello; masm hello;

tlink hello;
link hello;

Segment. Program yang jalan di DOS dibagi kedalam tiga segmen utama, masing-
masingnya memiliki nilai tipe yang berbeda : segmen Code (ditunjukan oleh CS)
mengandung kode program, segmen Data (ditunjukan oleh DS) mengandung variabel,
segmen stack (ditunjukan oleh SS) mengandung stack program.

Setiap segmen ditunjukan oleh register segmen. Sebuah segmen mungkin hanya 1
paragraf (10h byte) dan paling besar 64 K bytes. Setiap segmen mengandung instruksi
atau data yang memiliki offset relatif terhadap register segmen (CS, DS, SS, atau ES).
Offset adalah jarak objek dari permulaan segmennya.

116
Title Program Hello world [1]

[2]

; program ini menampilkan pesan “Hello, world” [3]

[4]

dosseg [5]

. model small [6]

. stack 100h [7]

[8]

. data [9]

. hello_message db ‘Hello, world !’, 0dh, 0ah, ‘$’ [10]

[11]

. code [12]

main proc [13]

mov ax, @data [14]

mov ds, ax [15]

[16]

mov ah, 9 [17]

mov dx, offset hello_message [18]

int 21h [19]

[20]

mov ax, 4000h [21]

int 21h [22]

main endp [23]

endp main [24]

Gambar 3.1. Contoh program Hello

Segmen code. Segmen code adalah dimana instruksi mesin program berada. Register
CS mengandung alamat segmennya, dan IP menunjuk instruksi pertama yang akan

117
dieksekusi. Segmen data baisanya mengandung variabel program. Catatan bahwa tidak
ada register yang menunjukan segmen ini, karena itu pada setiap program EXE
dimasukan baris program berikut, untuk menset DS sebagai permulaan segmen data :

mov ax, @data

mov ds, ax

Segmen stack. Asegmen stack mengaikuti .MODEL, dan biasanya kita menyediakan 256
byte ruang stack. Register SS mengandung alamat segmen ini, dan SP mengacu pada
alamat berikutnya setalah akhir stack. Stack akan bertambah kearah bawah pada saat
suatu nilai dimasukan ke dalam stack. Jika SP mencapai 0000, maka stack berarti penuh.

Perintah. Perintah TITLE mendefinisikan judul prgram sampai 128 karakter. Perintah
DOSSEG memberitahu assembler untuk menempatkan segmen program dalam urutan
standar yang digunakan bahasa tingkat tinggi.

118
3.8.5.1.Model memori

Perintah .MODEL memilih standar model memori untuk program bahasa assembly.
Model memory mungkin sebagai blueprint standar atau konfigurasi, yang menentukan
bagaimana segmen dihubungkan bersama. Setiap model memori memiliki sekumpulan
batasan yang berbeda sebagai maksimum ruang yang tersedia untuk kode dan data.

Secara umum, pemilihan model memori berarti membuat pilihan antara kecepatan
eksekusi optimal dan fleksibilitas ukuran program. Model memori yang membatasi
semua data ke segmen tunggal 64 K, contohnya, menjamin bahwa semua alamat data
akan dekat, yaitu, 16-bit nilai. Data mungkin dapat diakses lebih cepat, karena alamat
16-bit mungkin diload dengan satu instruksi mesin. Disisi lain, model memori yang
mengijinkan kode untuk diperluas sampai 64 K berakibat bahwa beberapa subrutin akan
berada pada segmen yang berbeda. Ini berarti bahwa alamat 32-bit harus diload kedalam
CS dan register IP ketika subrutin dipanggil. Hal ini membutuhkan dua instruksi mesin.

Berbagai macam memori model didefinisikan oleh jumlah byte yang digunkan untuk
kode (instruksi) dan data (variabel). Tabel berikut menunjukan rangkuman perbedaan
antara berbagai tipe model :

Model Penjelasan

Tiny Kode dan data digabung harus <= 64 K


Small Kode <= 64 K, data <= 64 K

Medium Data <= 64 K, kode ukuran sembarang

Compact Kode <=64 K, data ukuran sembarang

Large Keduanya lebih besar dari 64 K

Huge Sama seperti model LARGE hanya array boleh lebih dari 64 K

Semua model keculai model Tiny menghasilkan program EXE. Model Tiny
menghasilkan program COM.

Peta file program Hello :

Start Stop Length Name Class

00000H 00010H 00011H _TEXT CODE

00020H 0002FH 00010H _DATA DATA

00030H 0012FH 00100H STACK STACK


119
Diagram segmen :

Misalkan program diload pada alamat absolut 20000 :

Segmen Alamat Absolut Nilai Register Segmen

Code 20000 2000

(20h byte)

120
Data 20020 2002

(10h byte)

Stack 20030 2003

(100h byte)

Gambar 3.2. Struktur segmen Hello.exe

Program yang dapat dieksekusi (Executable program). Untuk mendapatkan gambaran


yang lebih baik tentang program yang dapat dieksekusi setelah diisikan oleh DOS ke
dalam memori, lihatlah gambar 3.2. yaitu prgram HELLO.ASM, yang diassemble dan
dilink ke bentuk HELLO.EXE. Linker dapat menghasilkan file MAP, yang dengan baik
menunjukan offset dan ukuran segmen program. Dalam contoh ini, segmen kode adalah
11h bytee, segemen datanya 10h byte, dan panjang stacknya 100h byte.

121
122
pop ds

pop dx

pop cx

pop bx

pop ax

jmp keluar

cek_pass2:

inc si

inc di

dec cx

jz cek_pass3

jmp cek_pass1

cek_pass3:

push cs

pop ds

mov ah,9

mov dx,offset benar

int 21h

pop di

pop si

pop es

123
pop ds

pop dx

pop cx

pop bx

pop ax

push ds

push es

push ax

push cx

mov ax,0

mov es,ax

push cs

pop ds

mov si,offset ofs2f

mov di,2fh*4

mov cx,4

cli

rep

movsb

124
sti

push cs

pop es

mov ah,49h

int 21h

pop cx

pop ax

pop es

pop ds

mov ax,4c00h

int 21h

start:

mov ah,9

mov dx,offset nama

int 21h

mov ax,352fh

int 21h

mov ofs2f,bx

mov seg2f,es

mov ax,252fh

mov dx,offset resident

int 21h

mov ah,9

mov dx,offset sukses

int 21h

125
mov dx,offset start

int 27h

nama :

db 13,10

db ' PASS DOS version 1.0 ',13,10

db ' Created by INFINITY ',13,10

db ' (c) Juni 2002 by STT TELKOM ',13,10

db 13,10,'$'

sukses:

db 13,10

db ' *****Installed***** ',13,10

db 13,10,'$'

code ends

end mulai

126
127
DAFTAR PUSTAKA

Irvine, Kip. [1993], Assembly Language for The IBM-PC, MacMillan, United State
of America.

User’s Guide, Turbo Assembler 3.00.

128

Anda mungkin juga menyukai