• Tidak ada hasil yang ditemukan

BAB I PENDAHULUAN 1.1 LATAR BELAKANG

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAB I PENDAHULUAN 1.1 LATAR BELAKANG"

Copied!
39
0
0

Teks penuh

(1)

1 BAB I PENDAHULUAN

1.1 LATAR BELAKANG

Mengingat betapa pentingnya perkembangan teknologi sekarang ini yang mana semua pada berlomba-lomba menciptakan dan mengkonversi pekerjaan rumit yang kemudian dikemas dalam sebuah komen atau perintah sederhana untuk dapat mengeksekusi suatu program. Guna membantu pekerjaan dan memangkas biaya supaya di dapatkan efisiensi waktu dan biaya dalam prakteknya.

1.2 RUMUSAN MASALAH

Adapun yang dibahas dalam makalah ini adalah: 1. Devinisi Bahasa Assembly

2. Macam – macam Syntax pada Assembly 3. Penerapan Bahasa Assembly

1.3 TUJUAN

Makalah ini dibuat dengan tujuan untuk menambah pengetahuan, pengertian dasar serta memberikan bekal yang cukup kepada para pembaca khusunya Mahasiswa/I Teknik Elektro untuk lebih memahami mengenai kegunaan Microprocessor, dalam hal pembahasan kali ini lebih menuju penerapan Bahasa Assembly.

(2)

2 BAB II

2.1 Bahasa Assembly

Bahasa rakitan atau lebih umum dikenal sebagai Assembly adalah bahasa pemrograman tingkat rendah yang digunakan dalam pemrograman komputer, mikroprosesor, pengendali mikro, dan perangkat lainnya yang dapat diprogram. Bahasa rakitan mengimplementasikan representasi atas kode mesin dalam bentuk simbol-simbol yang secara relatif lebih dapat dipahami oleh manusia. Berbeda halnya dengan bahasa-bahasa tingkat tinggi yang berlaku umum, bahasa rakitan biasanya mendukung secara spesifik untuk suatu ataupun beberapa jenis arsitektur komputer tertentu. Dengan demikian, portabilitas bahasa rakitan tidak dapat menandingi bahasa-bahasa lainnya yang merupakan bahasa pemrograman tingkat tinggi. Namun, bahasa rakitan

memungkinkan programmer memanfaatkan secara penuh kemampuan suatu perangkat keras tertentu yang biasanya tidak dapat ataupun terbatas bila dibuat dengan menggunakan bahasa pemrograman tingkat tinggi.

1. Assembly Directive (yaitu merupakan kode yang menjadi arahan bagi assembler/compiler untuk menata program)

DAFTAR ASSEMBLY DIRECTIVE Assembly Directive Keterangan

EQU Pendefinisian konstanta

DB Pendefinisian data dengan ukuran satuan 1 byte DW Pendefinisian data dengan ukuran satuan 1 word DBIT Pendefinisian data dengan ukuran satuan 1 bit DS Pemesanan tempat penyimpanan data di RAM ORG Inisialisasi alamat mulai program

END Penanda akhir program

CSEG Penanda penempatan di code segment XSEG Penanda penempatan di external data segment DSEG Penanda penempatan di internal direct data segment ISEG Penanda penempatan di internal indirect data segment BSEG Penanda penempatan di bit data segment

CODE Penanda mulai pendefinisian program XDATA Pendefinisian external data

DATA Pendefinisian internal direct data IDATA Pendefinisian internal indirect data

BIT Pendefinisian data bit

(3)

3

2.2 Macam – macam Syntax

Instruksi/Syntax (yaitu kode yang harus dieksekusi oleh CPU mikrokontroler dengan melakukan operasi tertentu sesuai dengan daftar yang sudah tertanam dalam CPU).

DAFTAR INSTRUKSI

Instruksi Keterangan Singkatan

ACALL Absolute Call

ADD Add

ADDC Add with Carry AJMP Absolute Jump

ANL AND Logic

CJNE Compare and Jump if Not Equal

CLR Clear

CPL Complement

DA Decimal Adjust

DEC Decrement

DIV Divide

DJNZ Decrement and Jump if Not Zero

INC Increment

JB Jump if Bit Set

JBC Jump if Bit Set and Clear Bit

JC Jump if Carry Set JMP Jump to Address

(4)

4

JNB Jump if Not Bit Set JNC Jump if Carry Not Set

JNZ Jump if Accumulator Not Zero JZ Jump if Accumulator Zero LCALL Long Call

LJMP Long Jump

MOV Move from Memory

MOVC Move from Code Memory MOVX Move from Extended Memory

MUL Multiply

NOP No Operation

ORL OR Logic

POP Pop Value From Stack PUSH Push Value Onto Stack RET Return From Subroutine RETI Return From Interrupt

RL Rotate Left

RLC Rotate Left through Carry

RR Rotate Right

RRC Rotate Right through Carry

SETB Set Bit

(5)

5

1. Acall (absolute call)

Instruksi acall digunakan untuk memanggil sub rutin program Contoh :

Start:

Acall tunda ; panggil procedure penundaan waktu ….

Tunda: ; label tunda

Mov r7,#0ffh ; isikan register 7 dengan data 0ffh(255

2. Add (add immediate data)

Instruksi ini akan menambah 8 bit data langsung ke dalam Isi akumulator dan menyimpan hasilnya pada akumulator. Contoh : Add a, #data

Add a, #@r1 ; add indirect address Add a, r6 ; add register

Add a, 30h ; add memori

3. Addc (add carry plus immediate data to accumulator)

Instruksi ini akan menambahkan isi carry flag (0 atau 1) ke dalam isi akumulator. Data langsung 8 bit ditambahkan ke akumulator

Contoh: Addc a,#012h

Addc a, @r1 ; add carry plues indirect address SUBB Subtract With Borrow

SWAP Swap Nibbles

XCH Exchange Bytes

XCHD Exchange Digits

(6)

6

4. Ajmp (absolute jump)

Ajmp adalah perintah jump mutlak. Jump dalam 2 kb dimulai dari alamat yang mengikuti perintah ajmp. Ini mentransfer kendali program ke lokasi dimana alamat dikalkulasi dengan cara yang sama dengan perintah acall. Konter program ditambahkan dua kali dimana perintah ajmp adalah perintah 2-byte. Konter program di-load dengan a10 – a0 11 bits, untuk membentuk alamat tujuan 16-bit.

5. Anl (logical and memori ke akumulator)

Instruksi ini mengand-kan isi alamat data dengan isi akumulator

Contoh : Anl a,#0001000b ;data acumulator akan dikalikan dengan 00010000 biner Anl a, 57h,#01h; logical and immediate data ke memori

6. Cjne (compare indirect address to immediate data)

Instruksi ini akan membandingkan data langsung dengan lokasi memori yang dialamati oleh register r atau akumulator a. Apabila tidak sama maka instruksi akan menuju ke alamat kode. Format : Cjne r,#data,alamat kode

Contoh:

Cjne r7,#001h,command0 Mov a,stepcontrol

Ajmp command1

7. Clr (clear accumulator)

Instruksi clr akan mereset data akumulator menjadi 00h. Format : Clr a

8. Cpl (complement accumulator)

Instruksi cpl akan mengkomplemen isi akumulator Contoh : Cpl a

(7)

7

9. Da (decimal adjust accumulator)

Instruksi da akan mengatur isi akumulator ke padanan bcd, steleah penambahan dua angka bcd.

10. Dec (decrement indirect address)

Instruksi dec akan mengurangi isi lokasi memori yang ditujukan oleh register r dengan 1, dan hasilnya disimpan pada lokasi tersebut.

Contoh: Dec 40h

Dec r7 ; decrement register

11. Div (divide accumulator by b)

Instruksi div akan membagi isi akumulator dengan isi register b. Akumulator berisi hasil bagi, register b berisi sisa pembagian.

Contoh : Mov b,#1h Div ab

12. Djnz (decrement register and jump id not zero)

Instruksi djnz akan mengurangi nilai register dengan 1 dan jika hasilnya sudah 0 maka instruksi selanjutnya akan dieksekusi. Jika belum 0 akan menuju ke alamat kode.

Format : Djnz rr,alamat kode

13. Inc (increment indirect address)

Instruksi inci akan menambahkan isi memori dengan 1 dan menyimpannya pada alamat tersebut.

Contoh: Inc a

Inc r7 ; increment register

14. Jb (jump if bit is set)

Instruksi ini akan membaca data

Per satu bit, jika data tersebut adalah 1 maka akan menuju ke alamat kode dan jika 0 tidak akan menuju ke alamat kode.

(8)

8

Format : Jb alamat bit,alamat kode

15. Jbc (jump if bit set and clear bit)

Bit jbc, perintah rel menguji yang terspesifikasikan secara bit. Jika bit di-set, maka jump dilakukan ke alamat relatif dan yang terspesifikasi secara bit di dalam perintah dibersihkan. Segmen program berikut menguji bit yang kurang signifikan (lsb: Least significant byte), dan jika diketemukan bahwa ia telah di-set, program melompat ke read lokasi. Perintah tersebut juga membersihkan lsb dari akumulator.

16. Jc (jump if carry is set)

Instruksi jc akan menguji isi carry flag. Jika berisi 1, eksekusi menuju ke alamat kode, jika berisi 0, instruksi selanjutnya yang akan dieksekusi.

17. Jmp (jump to sum of accumulator and data pointer)

Instruksi jmp untuk memerintahkan loncat kesuato alamat kode tertentu. Format : Jmp alamat kode.

Contoh : Loop: …

Rl a ; geser data akumulator ke kiri

Acall long_delay ; panggil procedure penundaan waktu Jmp loop ; loncat ke procedure loop

18. Jnb (jump if bit is not set)

Instruksi jnb akan membaca data per satu bit, jika data tersebut adalah 0 maka akan menuju ke alamat kode dan jika 1 tidak akan menuju ke alamat kode.

(9)

9

19. Jnc (jump if carry not set)

Perintah jnc menguji bit carry, dan jika tidak di-set, maka sebuah lompatan akan dilakukan ke alamat relatif yang telah ditentukan. Sebagai contoh, perintah berikut akan menyebabkan loop tanpa henti, karena carry dibersihkan oleh perintah clr c dan jnc akan selalu menyebabkan lompatan ke lokasi yang sama yang berlabel „loop‟.

20. Jnz ( jump if accumulator not zero )

Jnz adalah mnemonik untuk instruksi jump if not zero (lompat jika tidak nol). Dalam hal ini suatu lompatan akan terjadi bilamana bendera nol dalam keadaan “clear”, dan tidak akan terjadi lompatan bilamana bendera nol tersebut dalam keadaan set. Andaikan bahwa jnz 7800h disimpan pada lokasi 2100h. Jika z=0, instruksi berikutnya akan berasal dari lokasi 7800h: Dan bilamana z=1, program akan turun ke instruksi urutan berikutnya pada lokasi 2101h.

21. Jz ( jump if accumulator is zero )

Perintah ini menguji konten-konten akumulator. Jika bukan nol, maka lompatan dilakukan ke alamat relatif yang ditentukan dalam perintah.

22. Lcall ( long call )

Lcall memungkinkan panggilan ke subrutin yang berlokasi dimanapun dalam memori program 64k. Operasi lcall berjalan seperti berikut:

(i) menambahkan ke dalam konter program sebanyak 3, karena perintahnya adalah perintah 3-byte.

(ii) menambahkan penunjuk stack sebanyak 1.

(iii) menyimpan byte yang lebih rendah dari konter program ke dalam stack. (iv) menambahkan penunjuk stack.

(v) menyimpan byte yang lebih tinggi dari program ke dalam stack. (vi) me-load konter program dengan alamat tujuan 16-bit.

Sebagai contoh, jika penunjuk stack dimulai pada 54h, maka perintah lcall 0400h di lokasi 0100h dalam memori program akan menghasilkan nilai sp, pc dan stack,.

(10)

10

23. Ljmp ( long jump )

Long jump memungkinkan lompatan tak bersyarat kemana saja dalam lingkup ruang memori program 64k. Lcall adalah perintah 3-byte. Alamat tujuan 16-bit ditentukan secara langsung dalam perintah tersebut. Alamat tujuan ini di-load ke dalam konter program oleh perintah ljmp. Sebagai contoh, untuk melompat ke lokasi 0200h, kita dapat menulis “ljmp 0200h”.

24. Mov ( move from memory )

Instruksi ini untuk memindahkan isi akumulator/register atau data dari nilai luar atau alamat lain. Contoh : Mov a,#40h Mov @ro,a Mov a, p3 Mov c, p1.0 Mov dptr, #20h

Movc a, @a+dptr ; pindahkan code memory offset dari data pointer ke a

Movx @dptr, a ; pindahkan akumulator ke memoeri eksterlah yang dialamati oleh ; data pointer

25. Movc ( move from codec memory )

Fungsi : Mengisikan (move) byte kode (code) atau byte konstanta (constant). Instruksi movc akan mengisi accumulator dengan byte kode atau konstanta dari program memory. Alamat byte tersebut adalah hasil penjumlahan unsigned 8 bit pada accumulator dan 16 bit register basis yang dapat berupa data pointer atau program counter. Instruksi ini tidak mempengaruhi flag apapun juga.

26. Movx (move accumulator to external memory addressed by data pointer)

Instruksi pop akan memindahkan isi akumulator ke memori data eksternal yang alamatnya ditunjukkan oleh isi data pointer.

Contoh: Movx @dptr,a Movx @r0,a

(11)

11

27. Mul ( multiply )

Fungsi : Perkalian (multiply). Mul ab akan mengalikan unsigned 8 bit integer pada accumulator dan register b. Byte rendah (low order) dari hasil perkalian akan disimpan dalam accumulator sedangkan byte tinggi (high order) akan disimpan dalam register b. Jika hasil perkalian lebih besar dari 255 (0ffh), overflow flag akan bernilai „1‟. Jika hasil perkalian lebih kecil atau sama dengan 255, overflow flag akan bernilai „0‟. Carry flag akan selalu

Dikosongkan.

28. Nop ( no operation )

Fungsi : Tidak ada (no) operasi. Eksekusi program akan dilanjutkan ke instruksi berikutnya. Selain pc, instruksi ini tidak mempengaruhi register atau flag apapun juga.

29. Orl (logical or immediate data to accumulator)

Instruksi orl sebagai instruksi gerbang logika or yang akan menjumlahkan accumulator terhadap nilai yang ditentukan.

Format : Orl a,#data Contoh : Orl a,#0001000b

Ini berarti data acumulator akan dijumlahkan dengan 00010000 biner Jika a bernilai 11100001 maka hasilnya adalah 11110001

30. Pop (pop stack to memory)

Instruksi pop akan menempatkan byte yang ditunjukkan oleh stack pointer ke suatu alamat data.

Contoh: Pop psw Pop 03h

31. Push (push memory onto stack)

Instruksi ini akan menaikkan stack pointer kemudian menyimpan isinya ke suatu alamat data pada lokasi yang ditunuk oleh stack pointer.

(12)

12

32. Ret (return from subroutine)

Intruksi untuk kembali dari suatu subrutin program ke alamat terakhir subrutin tersebut di panggil.

33. Reti ( return from interrupt )

Fungsi : Kembali (return) dari interrupt. Reti akan mengambil nilai byte tinggi dan rendah dari pc dari stack dan mengembalikan kondisi logika interrupt agar dapat menerima interrupt Lain dengan prioritas yang sama dengan prioritas interrupt yang baru saja diproses. Stack pointer akan dikurangi dengan 2. Instruksi ini tidak mempengaruhi flag apapun juga. Nilai psw tidak akan dikembalikan secara otomatis ke kondisi sebelum interrupt. Eksekusi program akan dilanjutkan pada alamat yang diambil tersebut. Umumnya alamat tersebut adalah alamat setelah lokasi dimana terjadi interrupt. Jika interrupt dengan prioritas sama atau lebih rendah tertunda saat reti dieksekusi, maka satu instruksi lagi akan dieksekusi sebelum interrupt yang tertunda tersebut diproses.

34. Rl (rotate accumulator left)

Instruksi rl akan memutar setiap bit dalam akumulator satu posisi ke kiri.

Contoh : Rl a

Rlc a ; rotasi akumulator dan carry flag ke kiri Rr a ; rotasi akumulator ke kanan

35. Rlc ( rotate left through carry )

Fungsi : Memutar (rotate) accumulator ke kiri (left) melalui carry flag. Kedelapan bit accumulator dan carry flag akan diputar satu bit ke kiri secara bersama-sama. Bit 7 akan dirotasi ke carry flag, nilai carry flag akan berpindah ke posisi bit 0. Instruksi ini tidak mempengaruhi flag lain.

(13)

13

36. Rr ( rotate right )

Fungsi : Memutar (rotate) accumulator ke kanan (right). Kedelapan bit accumulator akan diputar satu bit ke kanan. Bit 0 akan dirotasi ke posisi bit 7. Instruksi ini tidak mempengaruhi flag apapun juga.

37. Rrc ( rotate right through carry )

Fungsi : Memutar (rotate) accumulator ke kanan (right) melalui carry flag. Kedelapan bit accumulator dan carry flag akan diputar satu bit ke kanan secara bersama-sama. Bit 0 akan dirotasi ke carry flag, nilai carry flag akan berpindah ke posisi bit 7. Instruksi ini tidak mempengaruhi flag lain.

38. Setb (set carry flag)

Instruksi setb akan menset carry flag Contoh : Setb c

39. Sjmp (short jump)

Sebuah short jump mentransfer kendali ke alamat tujuan dalam 127 bytes yang mengikuti dan 128 yang mengawali perintah sjmp. Alamat tujuannya ditentukan sebagai sebuat alamat relative 8-bit. Ini adalah jump tidak bersyarat. Perintah sjmp menambahkan konter program sebanyak 2 dan menambahkan alamat relatif ke dalamnya untuk mendapatkan alamat tujuan. Alamat relatif tersebut ditentukan dalam perintah sebagai „sjmp rel‟.

40. Subb ( subtract with borrow )

Fungsi : Pengurangan (subtract) dengan peminjaman (borrow). Subb mengurangi variabel yang tertera pada operand kedua dan carry flag sekaligus dari accumulator dan menyimpan hasilnya pada accumulator. Subb akan memberi nilai „1‟ pada carry flag jika peminjaman ke bit 7 dibutuhkan dan mengosongkan c jika tidak dibutuhkan peminjaman. Jika c bernilai „1‟ sebelum mengeksekusi subb, hal ini menandakan bahwa terjadi peminjaman pada proses pengurangan sebelumnya, sehingga carry flag dan source byte akan dikurangkan dari accumulator secara bersama-sama. Ac akan bernilai „1‟ jika peminjaman ke bit 3 dibutuhkan dan mengosongkan ac

(14)

14

jika tidak dibutuhkan peminjaman. Ov akan bernilai „1‟ jika ada peminjaman ke bit 6 namun tidak ke bit 7 atau ada peminjaman ke bit 7 namun tidak ke bit 6. Saat mengurangi signed integer, ov menandakan adanya angka negative sebagai hasil dari pengurangan angka negatif dari angka positif atau adanya angka positif sebagai hasil dari pengurangan angka positif dari

Angka negative. Addressing mode yang dapat digunakan adalah: Register, direct, register Indirect, atau immediate data.

41. Swap ( swap nibbles )

Fungsi : Menukar (swap) upper nibble dan lower nibble dalam accumulator. Swap a akan menukar nibble (4 bit) tinggi dan nibble rendah dalam accumulator. Operasi ini dapat dianggap sebagai rotasi 4 bit dengan rr atau rl. Instruksi ini tidak mempengaruhi flag apapun juga.

42. Xch ( exchange bytes )

Fungsi : Menukar (exchange) accumulator dengan variabel byte. Xch akan mengisi accumulator dengan variabel yang tertera pada operand kedua dan pada saat yang sama juga akan mengisikan nilai accumulator ke dalam variabel tersebut. Addressing mode yang dapat digunakan adalah: Register, direct, atau register indirect.

43. Xchd ( exchange digits )

Fungsi : Menukar (exchange) digit. Xchd menukar nibble rendah dari accumulator, yang umumnya mewakili angka heksadesimal atau bcd, dengan nibble rendah dari internal data memory yang diakses secara indirect. Nibble tinggi kedua register tidak akan terpengaruh. Instruksi ini tidak mempengaruhi flag apapun juga.

44. Xrl ( exclusive or logic )

Fungsi : Logika exclusive or untuk variabel byte xrl akan melakukan operasi bitwise logika exclusive or antara kedua variabel yang dinyatakan. Hasilnya akan disimpan pada destination byte. Instruksi ini tidak mempengaruhi flag apapun juga. Kedua operand mampu menggunakan enam kombinasi addressing mode. Saat destination byte adalah accumulator, source byte dapat berupa register, direct, register indirect, atau immediate data. Saat destination byte berupa direct address, source byte dapat berupa accumulator atau immediate data.

(15)

15 BAB III

PENERAPAN BAHASA ASSEMBLY

3.1 Variabel

Variabel adalah suatu lokasi di memori . Bagi programmer akan lebih mudah memiliki suatu nilai yang disimpan pada variabel dengan nama “var1” dari pada alamat 5A73:235B, khususnya kalau kita punya 10 atau lebih variabel. Dalam emu8086, compiler mendukung dua tipe variabel : BYTE dan WORD

Syntax deklarasi variabel: name DB value

name DW value

DB-kepengurusan dari Define Byte. DW-kepanjangan dari Define Word

name – kombinasi dari alphanumerik , diawali dengan huruf . Mungkin juga tidak bernama (maka hanya punya alamat saja).

value – berupa nilai numeric yang didukung oleh system nilai (hexadecimal, binary, atau decimal), atau simbol “?” untuk variabel yang tidak diinisialisasikan.

Seperti pada instruksi MOV yaitu digunakan untuk mengutip nilai dari source kedestination. Contoh lain instruksi MOV

ORG 100h

MOV AL, var1 MOV BX, var2 RET ; program berhenti. VAR1 DB 7

(16)

16

Tulis kode diatas pada editor emu8086 dan tekan F5 untuk compile dan memuatkan keemulator , hasilnya seharusnya :

Seperti yang terlihat seperti contoh ini, kecuali variable diganti dengan lokasi actual di memori. Saat compiler membuat kode mesin, hal tersebut secara otomatis mengganti semua nama variable dengan offsets. Default nua segmen di loaded di register DS ( jika file .COM nilai yang di loaded pada register DS di set sama dengan nilai pada register CS - code segment ) . Dalam baris pertama pada memori adalah sebuah offset , baris kedua adalah suatu nilai

hexadecimal, baris ketiga adalah nilai d e cimal, dan yang terakhir adalah nilai karakter ASCI I . Kompiler ti dan case sensitive, jadi " VAR1 " and " var1 " mengacu pada variable

yang sama. Offset dari VAR1 adalah 0108h , dan alamat lengkapnya adalah 0B56:0108 . Offset dari var2 adalah 0109h , alamat lengkapnya adalah 0B56:0109 , Variabel ini adalah bertipe WORD sehingga perlu 2 BYTES. Hal tersebut diasumsikan bahwa low byte (byte rendah) disimpan pada alamat yang rendah ( lower address),sehingga 34h ber ada sebelum 12h. Kita dapat melihat bahwa ada suatu instruksi lainnya setelah instruksi RET, Ini terjadi karena disassembler tidak tahu dimana data dimulai , dia hanya memproses nilai dalam memori dan memahami sebagai inst r uk si 8086 yang sah (kita akan pelajari nanti).Kita juga bahkan dapat menulis program yang sama menggunakan hanya direktive DB:

ORG 100h ; hanya suatu directive utk ; membuat file .com sederhana . DB 0A0h

DB 08h DB 01h DB 8Bh

(17)

17 DB 1Eh DB 09h DB 01h DB 0C3h DB 7 DB 34h DB 12h

Tulis program diatas dalam editor emu8086, dan tekan F5 untuk compile dan memuat dalam emulator. Hasilnya seharusnya sama dengan kode disassembled, dan berfungsi sama! Seperti yang kita duga , compiler (yang mengatakan pada compier bagaimana menangani surce code). Derective tersebut mengatakan pada compiler bahwa file executable akan di mulai

 Percobaan dua org 100h JMP MULAI KM DB 0ECH

nama1 DB 'M', 'u', 'h', 'a','m', 'a','d' spasi DB ' '

nama2 DB 'M', 'a', 's', 'r', 'u', 'f', 'u' ,'n' spasi1 DB , ,

nama3 DB 'E', 'L', 'E', 'K','T', 'R','O' spasi2 DB , ,

nama4 DB 'U', 'B', 'H', 'A', 'R', 'A' spasi3 DB , , nama5 DB '1', '4', '0', '4', '1', '0', '4', '4' mulai: MOV AX, 0B803H MOV SS, AX MOV BP, 0 MOV CL, nama1[0] MOV CH, KM MOV (BP), CX MOV BP, 2 MOV CL, nama1[1] MOV CH, KM MOV (BP), CX MOV BP, 4 MOV CL, nama1[2] MOV CH, KM MOV (BP), CX MOV BP, 6 MOV CL, nama1[3] MOV CH, KM MOV (BP), CX MOV BP, 8 MOV CL, nama1[4] MOV CH, KM

(18)

18 MOV (BP), CX MOV BP, 10 MOV CL, nama1[5] MOV CH, KM MOV (BP), CX MOV BP, 12 MOV CL, nama1[6] MOV CH, KM MOV (BP), CX MOV BP, 14 MOV CL, spasi MOV CH, 00 MOV (BP), CX MOV BP, 16 MOV CL, nama2[0] MOV CH, KM MOV (BP), CX MOV BP, 18 MOV CL, nama2[1] MOV CH, KM MOV (BP), CX MOV BP, 20 MOV CL, nama2[2] MOV CH, KM MOV (BP), CX MOV BP, 22 MOV CL, nama2[3] MOV CH, KM MOV (BP), CX MOV BP, 24 MOV CL, nama2[4] MOV CH, KM MOV (BP), CX MOV BP, 26 MOV CL, nama2[5] MOV CH, KM MOV (BP), CX MOV BP, 28 MOV CL, nama2[6] MOV CH, KM MOV (BP), CX MOV BP, 30 MOV CL, nama2[7] MOV CH, KM MOV (BP), CX MOV BP, 32 MOV CL, spasi MOV CH, 01 MOV (BP), CX MOV BP, 34 MOV CL, nama3[0] MOV CH, KM MOV (BP), CX MOV BP, 36 MOV CL, nama3[1]

(19)

19 MOV CH, KM MOV (BP), CX MOV BP, 38 MOV CL, nama3[2] MOV CH, KM MOV (BP), CX MOV BP, 40 MOV CL, nama3[3] MOV CH, KM MOV (BP), CX MOV BP, 42 MOV CL, nama3[4] MOV CH, KM MOV (BP), CX MOV BP, 44 MOV CL, nama3[5] MOV CH, KM MOV (BP), CX MOV BP, 46 MOV CL, nama3[6] MOV CH, KM MOV (BP), CX MOV BP, 48 MOV CL, spasi MOV CH, 02 MOV (BP), CX MOV BP, 50 MOV CL, nama4[0] MOV CH, KM MOV (BP), CX MOV BP, 52 MOV CL, nama4[1] MOV CH, KM MOV (BP), CX MOV BP, 54 MOV CL, nama4[2] MOV CH, KM MOV (BP), CX MOV BP, 56 MOV CL, nama4[3] MOV CH, KM MOV (BP), CX MOV BP, 58 MOV CL, nama4[4] MOV CH, KM MOV (BP), CX MOV BP, 60 MOV CL, nama4[5] MOV CH, KM MOV (BP), CX MOV BP, 62 MOV CL, spasi MOV CH, 03 MOV (BP), CX MOV BP, 64

(20)

20 MOV CL, nama5[0] MOV CH, KM MOV (BP), CX MOV BP, 66 MOV CL, nama5[1] MOV CH, KM MOV (BP), CX MOV BP, 68 MOV CL, nama5[2] MOV CH, KM MOV (BP), CX MOV BP, 70 MOV CL, nama5[3] MOV CH, KM MOV (BP), CX MOV BP, 72 MOV CL, nama5[4] MOV CH, KM MOV (BP), CX MOV BP, 74 MOV CL, nama5[5] MOV CH, KM MOV (BP), CX MOV BP, 76 MOV CL, nama5[6] MOV CH, KM MOV (BP), CX MOV BP, 78 MOV CL, nama5[7] MOV CH, KM MOV (BP), CX ret

(21)

21 3.2 LOOPING

Syntax Assembly

Mendeklarasikan variabel (berlaku pada memori) :

1. db : untuk mendeklarasikan variabel yang berisi data 8 bit.

2. dw : untuk mendeklarasikan variabel yang berisi data 16 bit. b. Konstanta (berlaku pada compiler) : equ.

c. Format instruksi : opcode [operan1] [operan2]. Contoh penulisan syntax : ORG 100H JMP START VAR1 DB ? VAR2 DW ? START:

MOV instruction a. Immediate :

(22)

22

Untuk menganalisis file tersebut berjenis .com atau tidak pada analisa emulator untuk nilai IP bernilai 100 karena berasal dari ORG 100H.

b. Register :

MOV AX, BX, MOV AL, DL c. Langsung :

MOV VAR1, AL MOV AL, VAR1 d. Tidak langsung :

MOV BX, OFFSET, VAR1 MOV [BX], AL

Untuk memindahkan dari memori ke memori yang digunakan adalah instruksi “MOVS”.

Looping Contoh : ORG 100H MOV CX, 5

LABEL1:

PRINTN “LOOP” LOOP LABEL1 RET

Looping akan mengurangi (decrement) register CX hingga nilainya sama dengan nol. Dan di akhir loooping harus diberikan statement LOOP “nama looping”.

I. Latihan

ORG 100H ;program dimulai dari alamat 100 JMP Start

Kotaktidur db 205 Kotaktegak db 186 COL DB ?

SEG_SCREEN DW 0B800H

NAMA DB 'C','U','P','U','N','Z' ; membuat variabel nama Start: ;bingkai atas MOV AX, 0B800H MOV ES, AX MOV BX, 0 MOV DH, 07H

(23)

23 MOV DL, Kotaktidur MOV CX, 160 Ulang: MOV ES:[BX], DX INC BX LOOP Ulang

;bingkai vertical kiri MOV AX, 0B800H MOV ES, AX MOV BX, 1*160 MOV DH, 07H MOV DL, Kotaktegak MOV CX, 23 Ulang1: MOV ES:[BX], DX ADD BX, 160 LOOP Ulang1

;bingkai vertical kanan MOV AX, 0B800H MOV ES, AX MOV BX, 2*159 MOV DH, 07H MOV DL, Kotaktegak MOV CX, 23 Ulang2: MOV ES:[BX], DX ADD BX , 160 LOOP Ulang2 ;bingkai bawah MOV AX, 0B800H MOV ES, AX MOV BX, 24*160 MOV DH, 07H MOV DL, Kotaktidur MOV CX, 160 Ulang3:

(24)

24 MOV ES:[BX], DX INC BX LOOP Ulang3 ;menuliskan nama MOV AX,SEG_SCREEN MOV SS,AX MOV BP,1680 MOV CL,NAMA MOV CH,76H MOV [BP],CX MOV AX,SEG_SCREEN MOV SS,AX MOV BP,1682 MOV CL,NAMA+1 MOV CH,75H MOV [BP],CX MOV AX,SEG_SCREEN MOV SS,AX MOV BP,1684 MOV CL,NAMA+2 MOV CH,73H MOV [BP],CX MOV AX,SEG_SCREEN MOV SS,AX MOV BP,1686 MOV CL,NAMA+3 MOV CH,78H MOV [BP],CX MOV AX,SEG_SCREEN MOV SS,AX MOV BP,1688 MOV CL,NAMA+4 MOV CH,79H MOV [BP],CX MOV AX,SEG_SCREEN MOV SS,AX MOV BP,1690 MOV CL,NAMA+5 MOV CH,71H MOV [BP],CX MOV DI,0 MOV CX,25*80 MOV AX,0720H MOV DH,1

(25)

25

MOV DL,0 MOV CX,80

RET

(26)

26 3.3 OPERASI ARITMATIKA

OPERASI PENAMBAHAN

ADD

Untuk menambah dalam bahasa assembler digunakan perintah ADD dan ADC serta INC. Perintah ADD digunakan dengan syntax :

ADD Tujuan,Asal

Perintah ADD ini akan menambahkan nilai pada Tujuan dan Asal. Hasil yang didapat akan ditaruh pada Tujuan, dalam bahasa pascal sama dengan instruksi Tujuan:=Tujuan + Asal. Sebagai contohnya :

MOV AH,15h ; AH:=15h MOV AL,4 ; AL:=4

(27)

27

Perlu anda perhatikan bahwa pada perintah ADD ini antara Tujuan dan Asal harus mempunyai daya tampung yang sama, misalnya register AH(8 bit) dan AL(8 bit), AX(16 bit) dan BX(16 bit).

Mungkin ada yang bertanya-tanya, apa yang akan terjadi bila Tujuan tempat hasil penjumlahan disimpan tidak mencukupi seperti pertambahan 1234h dengan F221h.

1234 h Biner --> 0001 0010 0011 0100 F221 h Biner --> 1111 0010 0010 0001 --- + --- +

10455 h 1 0000 0100 0101 0101

Pada pertambahan diatas dapat dilihat bahwa pertambahan bilangan 1234 dengan F221 akan menghasilkan nilai 10455. Supaya lebih jelas dapat anda lihat pada pertambahan binernya dihasilkan bit ke 17, padahal register terdiri atas 16 bit saja. Operasi pertambahan yang demikian akan menjadikan carry flag menjadi satu, Contoh :

MOV AX,1234h ; NIlai AX:=1234h dan carry=0 MOV BX,0F221h ; Nilai BX:=F221h dan carry=0 ADD AX,BX ; Nilai AX menjadi 0455h dan carry=1

Pada Tugas ini dibentuk game dengan frame kotak , dan dibuat random (seperti menata batu)

org 100h jmp mulai a dw ? b dw ? mulai: ;cetak border mov ax,0b800h mov bl,001h mov ss,ax mov bp,0 mov cx,8 ulang: mov [bp],bl add bp,2 loop ulang mov bp,14

(28)

28 mov cx,9 ulang1: mov [bp],bl add bp,160 loop ulang1 mov bp,9*160+14 mov cx,8 ulang2: mov [bp],bl add bp,-2 loop ulang2 mov bp,9*160 mov cx,9 ulang3: mov [bp],bl add bp,-160 loop ulang3 ;nilai acak inf: mov ax,0 mov al,00h int 1ah mov ax,dx xor dx,dx mov bx,5 div bx mov al,dl mov bl,2 mul bl mov ah,0 add al,2 mov a,ax add a,160

;perulangan program utama mov ax,0b800h mov b,7 turun: mov bl,0b1h mov ss,ax mov bp,a mov cx,2 kubus: mov [bp],bl add bp,2 loop kubus add a,160

(29)

29 mov bl,0b1h mov ss,ax mov bp,a mov cx,2 kubus1: mov [bp],bl add bp,2 loop kubus1 add a,-160 mov bl,' ' mov ss,ax mov bp,a mov cx,2 kubus2: mov [bp],bl add bp,2 loop kubus2 add a,2*160 mov bl,0b1h mov ss,ax mov bp,a mov cx,2 kubus3: mov [bp],bl add bp,2 loop kubus3 add a,-160 add b,-1 mov cx,b loop turun loop inf ret

(30)

30 3.4 . PENGERTIAN INTERRUPT

Interupsi adalah suatu permintaan khusus kepada mikroposesor untuk melakukan sesuatu. Bila terjadi interupsi, maka komputer akan menghentikan dahulu apa yang sedang dikerjakannya dan melakukan apa yang diminta oleh yang menginterupsi.

Pada IBM PC dan kompatibelnya disediakan 256 buah interupsi yang diberi nomor 0 sampai 255. Nomor interupsi 0 sampai 1Fh disediakan oleh ROM BIOS, yaitu suatu IC didalam komputer yang mengatur operasi dasar komputer. Jadi bila terjadi interupsi dengan nomor 0-1Fh, maka secara default komputer akan beralih menuju ROM BIOS dan melaksanakan program yang terdapat disana. Program yang melayani suatu interupsi dinamakan Interrupt Handler.

(31)

31

Setiap interrupt akan mengeksekusi interrupt handlernya masing-masing berdasarkan nomornya. Sedangkan alamat dari masing- masing interupt handler tercatat di memori dalam bentuk array yang besar elemennya masing-masing 4 byte. Keempat byte ini dibagi lagi yaitu 2 byte pertama berisi kode offset sedangkan 2 byte berikutnya berisi kode segmen dari alamat interupt handler yang bersangkutan. Jadi besarnya array itu adalah 256 elemen dengan ukuran elemen masing-masing 4 byte. Total keseluruhan memori yang dipakai adalah sebesar 1024 byte (256 x 4 = 1024) atau 1 KB dan disimpan dalam lokasi memori absolut 0000h sampai 3FFh. Array sebesar 1 KB ini disebut Interupt Vector Table (Table Vektor Interupsi). Nilai-nilai yang terkandung pada Interupt Vector Table ini tidak akan sama di satu komputer dengan yang lainnya. Interupt yang berjumlah 256 buah ini dibagi lagi ke dalam 2 macam yaitu:

- Interupt 00h - 1Fh (0 - 31) adalah interrupt BIOS dan standar di semua komputer baik yang menggunakan sistem operasi DOS atau bukan. Lokasi Interupt Vector Table-nya ada di alamat absolut 0000h-007Fh.

- Interupt 20h - FFh (32 - 255) adalah interrupt DOS. Interrupt ini hanya ada pada komputer yang menggunakan sistem operasi DOS dan Interupt Handler-nya di- load ke memori oleh DOS pada saat DOS digunakan. Lokasi Interupt Vector Table- nya ada di alamat absolut 07Fh-3FFh.

+---+ | Nomor Nama Nomor Nama |

| Interupt Interupt Interupt Interupt |

+---+ | *00h Divide By Zero 10h Video Service | | *01h Single Step 11h Equipment Check | | *02h Non MaskableInt(NMI) 12h Memory Size | | *03h Break point 13h Disk Service |

| 04h Arithmatic Overflow 14h Communication (RS-232)| | 05h Print Screen 15h Cassette Service |

| 06h Reserved 16h Keyboard Service | | 07h Reserved 17h Printer Service | | 08h Clock Tick(Timer) 18h ROM Basic | | 09h Keyboard 19h Bootstrap Loader |

| 0Ah I/O Channel Action 1Ah BIOS time & date | | 0Bh COM 1 (serial 1) 1Bh Control Break | | 0Ch COM 2 (serial 2) 1Ch Timer Tick | | 0Dh Fixed Disk 1Dh Video Initialization | | 0Eh Diskette 1Eh Disk Parameters | | 0Fh LPT 1 (Parallel 1) 1Fh Graphics Char | +---+ Gambar 3.1. BIOS Interrupt

(32)

32

* Interrupt ini telah dipastikan kegunaannya oleh sistem untuk keperluan yang khusus , tidak boleh dirubah oleh pemrogram seperti yang lainnya.

- DEVIDE BY ZERO : Jika terjadi pembagian dengan nol maka proses akan segera dihentikan. - SINGLE STEP : Untuk melaksanakan / mengeksekusi intruksi satu persatu.

- NMI : Pelayanan terhadap NMI (Non Maskable Interrupt) yaitu interupsi yang tak dapat dicegah.

- BREAK POINT : Jika suatu program menyebabkan overflow flag menjadi 1 maka interrupt ini akan melayani pencegahannya dan memberi tanda error.

+---+ | Nomor Nama Interrupt |

| Interrupt |

+---+ | 20h Terminate Program | | 21h DOS Function Services | | 22h Terminate Code | | 23h Ctrl-Break Code | | 24h Critical Error Handler | | 25h Absolute Disk Read | | 26h Absolute Disk Write |

| 27h Terminate But Stay Resident | +---+ Gambar 3.2. DOS Interrupt

Didalam pemrograman dengan bahasa assembler kita akan banyak sekali menggunakan interupsi untuk menyelesaikan suatu tugas.

V.

mov ah,2 mov dl,'a' int 21h ret

Jika kita ingin mengganti hurufnya tinggal ganti hurufnya, vontoh hurf K mov ah,2

mov dl,'k' int 21h ret

(33)

33

Interrupt 10H/Service 02H

Dengan syarat input: DH = baris

DL = Kolom

BH = Nomor Halaman (0..7)

Kolom kolom kolom kolom kolom kolom

baris 20 20 K mov dh,10 mov dl,20 mov bh, 0 mov ah,2 int 10h mov ah,2 mov dl,'k' int 21h ret

(34)

34

Layar dimodifikasi dengan menggunakan interupt Semisal kita menggunakan teks mode dengan 40x25

mov ah,0 int 10h mov dh,10 mov dl,20 mov bh, 0 mov ah,2 int 10h mov ah,2 mov dl,'k' int 21h ret

Sekarang kita mengatur ukuran lainnya mov ah,3 int 10h mov dh,10 mov dl,20 mov bh, 0 mov ah,2 int 10h mov ah,2 mov dl,'k' int 21h ret

(35)

35

Cara menulis nama ORG 100H

JMP Mulai

kal db 0B2H ,"Muhamad Masrufun",0B2H,10,13 db 9,"Teknik Elektro",'$' mulai: mov ah,3 int 10H mov dh,10 mov dl,20 mov bh, 0 mov ah, 2 int 10h mov ah,2 mov dl,'K' int 21h mov dh, 13 mov dl, 0-(38/2) mov bh, 0 mov ah, 2 int 10h

mov dx,offset kal mov ah,9 int 21H ret

(36)

36 Output

Apakah itu ganji ataukah itu genap?

Menggunakan Interupt 16 atau jika ingin langsung menggunakan evo( tidak ada tulisan yang dipantulkan) maka bisa menggunakan yang lain, kita akan mencoba untuk interupt 16

; You may customize this and other start-up templates;

; The location of this template is c:\emu8086\inc\0_com_template.txt org 100h

JMP mulai

input db 10,13,"Masukkan Nilai antara 0 hingga 9 :",'$' hGanjil db 10,13,"Nilai Ganjil$"

hGenap db 10,13,"Nilai Genap$"

mulai:

MOV DX, offset input MOV AH,9

INT 21H baca: MOV AH,1 INT 16h

(37)

37

JZ baca

mov ah,2

mov dl,al;menyimpan data yang kita inginkan int 21h

xor ah,ah ; membuat ah menjadi nol mov cl,2;pembagian

div cl ; dibagi ax dengan cl cmp ah,1 ;jika ah 1

JZ tGanjil;maka jum zero tampil ganjil

mov dx,offset hGenap ;jika tidak ganjil int 21h

tGanjil :

mov dx,offset hGanjil mov ah,9

int 21H jmp mulai ret

(38)

38 BAB IV PENUTUP

4.1 KESIMPULAN :

 Syntax org 100h sangat penting di input supaya program bisa di load di memory

 MOV AX, 0B803H adalah syntax untuk menempatkan kalimat atau koordinat

 MOV SS, AX adalah syntax untuk menampilkan seluruh karakter nama yang di input

 MOV CL, nama1(0) Syntax untuk memanggil alamat yang akan ditampilkan

 MOV (BP), CX adalah Syntax untuk menampilkan karakter huruf yang sudah di input di atasnya

4.2 SARAN

 Sebelum belajar Bahasa Assembly pahami dulu syntax nya

 Sering melakukan praktek langsung untuk memahami secara mendalam

 Lakukan manipulasi – manipulasi dan buatlah ide – ide baru untuk menciptakan program  Diperlukan ketelitian setiap command agar tidak terjadi kesalahan dalam execute nya

(39)

39 DAFTAR PUSTAKA http://ilmukomputer.org/2006/09/27/pemrograman-bahasa-assembly/ http://www.gatewan.com/2014/08/pemrograman-traffic-light-menggunakan-bhs-assembly-dan-mesin.html http://guruinformatika.blogspot.co.id/2015/01/belajar-bahasa-dasar-dasar-assembly.html http://yesy-afrillia.blogspot.co.id/2012/09/v-behaviorurldefaultvmlo_9.html http://tid3ustj.blogspot.co.id/2012/10/daftar-instruksi-bahasa-assembly.html https://www.academia.edu/6195379/Pengenalan_Syntax_Assembly_AT http://ichiblogger.blogspot.co.id/2011/01/nama-anis-ulinazah-n.html

Gambar

Gambar 3.2. DOS Interrupt

Referensi

Dokumen terkait

Suku bunga efektif adalah suku bunga yang secara tepat mendiskontokan estimasi penerimaan atau pembayaran kas di masa datang (mencakup seluruh komisi dan bentuk

This paper declare that The Cuckoo’s Calling by Robert Galbraith is really detective story. Within this work paper, the writer uses descriptive research and intrinsic

(3) kedisiplinan belajar santri berpengaruh terhadap tingkat keberhasilan menghafal al- Qur’an santri pondok pesantren Al-Aziz Lasem Rembang, hal ini terbukti

Pemodelan penyelesaian permasalahan penjadwalan ujian Program Studi S1 Sistem Mayor-Minor IPB menggunakan ASP efektif dan efisien untuk data per fakultas dengan mata

Pendekatan dapat diartikan sebagai metode ilmiah yang memberikan tekanan utama pada penjelasan konsep dasar yang kemudian dipergunakan sebagai sarana

Audit, Bonus Audit, Pengalaman Audit, Kualitas Audit. Persaingan dalam bisnis jasa akuntan publik yang semakin ketat, keinginan menghimpun klien sebanyak mungkin dan harapan agar

Perbandingan distribusi severitas antara yang menggunakan KDE dengan yang menggunakan suatu model distribusi tertentu dilakukan untuk melihat secara visual, manakah dari

61 Dari pernyataan-pernyataan di atas, dapat dilihat bahwa dilema yang Jepang alami pada saat pengambilan keputusan untuk berkomitmen pada Protokol Kyoto adalah karena