0% menganggap dokumen ini bermanfaat (0 suara)
68 tayangan18 halaman

Program Assembly Transfer Data Z-80

Laporan ini mendeskripsikan percobaan transfer data menggunakan mikroprosesor Z-80. Percobaan pertama mentransfer data 8-bit ke register, sedangkan percobaan kedua mentransfer data 16-bit ke pasangan register. Kedua percobaan melibatkan penulisan program assembly, penerjemahan ke bahasa mesin, pengisian dan pengeksekusian program pada mikrokomputer uPro-1.

Diunggah oleh

muhammad fahmi
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
68 tayangan18 halaman

Program Assembly Transfer Data Z-80

Laporan ini mendeskripsikan percobaan transfer data menggunakan mikroprosesor Z-80. Percobaan pertama mentransfer data 8-bit ke register, sedangkan percobaan kedua mentransfer data 16-bit ke pasangan register. Kedua percobaan melibatkan penulisan program assembly, penerjemahan ke bahasa mesin, pengisian dan pengeksekusian program pada mikrokomputer uPro-1.

Diunggah oleh

muhammad fahmi
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd

LAPORAN PRAK.

SISTEM MIKROPROSSESOR
PERCOBAAN TRANSFER DATA

NAMA : M. Fahmi Bayundraharja

NIM : 1177070062

KELAS : TE-5B

HARI, TANGGAL : Jum’at, 4 Oktober 2019

TEKNIK ELEKTRO

FAKULTAS SAINS DAN TEKNOLOGI

UIN SUNAN GUNUNG DJATI BANDUNG

2019
I. Tujuan
1. Membiasakan pemakai dengan fungsi intruksi transfer data.
2. Latihan mengeset nilai inisialisasi data.
3. Latihan menulis program, mengisi dan menjalankan

II. Teori Dasar

Mikroprosesor Z-80 merupakan penyempurnaan mikroprosesor 8080 ataupun 8085


buatan Intel. Salah satu bagian terpenting dari arsitektur Z-80 adalah register-register yang
pembagiannya dapat diilustrasikan sebagai berikut:

Gambar pembagian register Z-80

Register pada Z-80 dapat dikelompokkan menjadi 4, yaitu: register A


(accumulator), register F (flag status), register serbaguna dan register khusus (special
purpose register). Register serbaguna terdiri dari 12 register 8-bit yang terbagi menjadi 2
bagian, yaitu register serbaguna utama: register B, C, D, E, H, L dan register serbaguna
pengganti (alternate): B’, C’, D’, E’, H’, L’. Register pengganti, baik register serbaguna
maupun register lainnya, digunakan untuk mengamankan isi (sementara) register-register
utama pasangannya. Pasangan register B dan C, D dan E, H dan L, serta pasangan
register penggantinya dapat membentuk register 16-bit.
Register A atau disebut akumulator merupakan penyimpan utama (primer) pada
Z-80. Transfer data antara CPU dengan piranti I/O yang tercepat dan tersingkat
terselenggara melalui register ini. Apabila akumulator telah selesai menyelenggarakan
operasi hitung dan nalar, status dari hasil perhitungan akan dicatat di register F. Register
bendera terdiri dari 8-bit, 2 bit tidak digunakan, sehingga hanya 6 kondisi yang dicatat
(lihat gambar 1). Bendera-bendera yang terdapat pada Z-80 adalah sebagai berikut:

 Bendera tanda (S, Sign): bernilai 1 apabila angka yang berada pada akumulator
bernilai negatif, dan sebaliknya.
 Bendera nol (Z, Zero) bendera ini bernilai 1 apabila semua bit dalam akumulator
bernilai nol, dan sebaliknya.
 Bendera pindahan bit 3 (Ac, Auxiliary Carry): bendera ini akan memberi tanda
adanya perpindahan atau pinjaman pada proses penjumlahan atau pengurangan (pada
4 bit terendah).
 Bendera P/V (Parity/Overflow) paritas akan diset bernilai 1 apabila hasil operasi nalar
bernilai genap dan bendera overflow hanya digunakan sebagai tanda penggunaan
operasi two’s complement dan menunjukkan adanya bawaan dari bit-6 ke bit-7.
 Bendera pengurangan (N): Bila terjadi operasi pengurangan, bendera akan bernilai 1
dan sebaliknya.
 Bendera pindahan (C, Carry) bendera ini menunjukkan terjadinya pindahan bit MSB
dari suatu register. Bendera akan diset 1 apabila terjadi pemindahan.

Register PC (16 bit) berisi alamat perintah selanjutnya pada memori yang akan
dilaksanakan oleh CPU. Register SP atau register penunjuk tumpukan menyediakan
alamat untuk kembali setelah CPU melaksanakan operasi percabangan. Penunjuk
tumpukan ini bekerja berdasarkan prinsip LIFO (Last In First Out) yaitu data yang paling
akhir masuk dalam tumpukan merupakan data yang paling awal dikeluarkan dari
tumpukan. Register IX dan IY digunakan untuk menyediakan alamat awal 16-bit pada
mode pengalamatan berindeks. Register R digunakan apabila mikroprosesor
menggunakan memori dinamis. Register alamat interupsi (I) digunakan apabila CPU
akan memasuki subroutine interupsi.
Dalam melaksanakan transfer data pada Z-80, selain bahasa assembly, juga
digunakan instruksi dalam bahasa mesin yang dinotasikan dalam bilangan heksadesimal
dan terdiri dari 2 bagian: OPCODE menunjukkan kode operasi yang diinginkan dan
OPERAND atau alamat OPERAND menunjukkan nilai bilangan atau isi suatu memori.

Contoh: LD A, 12 ----- 3E 12 (bahasa mesin)


3E: OPCODE; 12: OPERAND

Contoh transfer data atau pengiriman/pemasukan data yang dapat dilaksanakan


pada Z-80
 Dari register ke register
Perpindahan data dari register ke register lainnya, dapat berlangsung antar
register serbaguna atau dengan akumulator. Besar data yang dipindahkan bisa
berupa data 8-bit maupun 16-bit.
Contoh: LD A, B :perpindahan data dari register B ke register A (8-
bit).
LD BC, HL :perpindahan data 16-bit dari pasangan
register HL ke pasangan register BC (register B dan H mewakili byte orde tinggi).
Untuk mentransfer data dari register ke register lainnya dapat juga menggunakan
perintah EXX, EX AF, AF’ , PUSH, POP. Perintah EXX digunakan untuk
menukar isi register dengan isi register penggantinya, misalnya isi register B
dengan register B’. Perintah EX AF, AF’ digunakan untuk menukar isi pasangan
register AF dengan A’F’) perintah PUSH berarti menempatkan data atau isi suatu
register ke tumpukan, sedangkan POP mengeluarkan data atau isi paling atas
tumpukan ke register.

III. Langkah Kerja


Percobaan 1
Tulislah program dalam bahasa assembly untuk mengeset isi register-register
sebagai berikut : A=O, B=1, C=2, D=3, E=4, H=5, L=6 (gunakan instruksi LD 8 bit
untuk mentransfer satu byte data setiap kali).

Langkah 1
Tulislah program dalam bahasa assembly. Instruksi terakhir RST 38H akan
mengembalikan control uPro-1 pada program monitor setelah menjalankan seluruh
program.
Langkah 2
Dengan menggunakan tabel instruksi LD 8 bit terjemahkan program ke dalam
bahasa mesin dengan 1800H pada sebagian alamat awal. Tuliskan address yang sesuai
untuk tiap-tiap instruksi.
Langkah 3
Siapkan mikrokomputer uPro-1,masukkan program dengan menekan tombol-
tombol pada keyboard. Periksa program yang tersimpan dalam memori. Set PC
(program counter) pada awal alamat yaitu alamat 1800H dan jalankan programnya.
Langkah 4
Tekan tombol REG dan periksalah apakah isi-isi tiap register sudah benar, bila
masih ada kesalahan kembalikan pada langkah 1 dan periksalah lagi.

Address Memori Bahasa Mesin Bahasa Assembly


1800h 3E00 LD A,0
…. …. ….
…. …. ….
…. FF RST 38H

Percobaan 2
Tulislah program dimana bahasa assembly untuk mengeset isi register sebagai
berikut : B=12, C=34, D=56, E=78, H=9, L=A (gunakan instruksi LD 16 bit untuk
mentransfer 1 byte data setiap kali).
Langkah 1
Sama dengan percobaan 1 ( Tulislah program dalam bahasa assembly ).
Langkah 2
Dengan menggunakan table intruksi LD 16-bit, terjemahkan program ke bahasa
mesin dengan alamat awal pada 1820H.
Langkah 3
Masukkan program ( sama dengan percobaan 1). Set PC pada 1820H dan jalankan
programnya.
Langkah 4
Periksa isi masing-masing register seperti percobaan 1.
Catatan: suatu data 16-bit terdiri dari 2 byte data. Byte berorde tinggi berada pada
alamat memori yang lebih tinggi, sedangkan byte berorde rendah berada pada alamat
memori yang lebih rendah. Misalnya, data 16-bit 1234H disimpan pada alamat 1820-
1821H dengan cara sebagai berikut:

Address Memori Bahasa Mesin Bahasa Assembly


1820H 013412 LD BC,1234H
1823H …. ….
…. …. ….
…. FF RST 38H

IV. Hasil Percobaan


Percobaan 1 Transfer Data 8-bit.

Address Memori Bahasa Mesin Bahasa Assembly


1800h 3E00 LD A,0
1802h 0601 LD B,1
1804h 0E02 LD C,2
1806h 1603 LD D,3
1808h IE04 LD E,4
180Ah 2605 LD H,5
180Ch 2E06 LD L,6

Percobaan 2 Transfer Data 16-bit.

Address Memori Bahasa Mesin Bahasa Assembly


1820H 013412 LD BC,1234H
1823H 117856 LD DE,5678H
1826H 210A09 LD HL,090A

V. Pembahasan

Praktikum mikroprosesordengan materi pemindahan data dengan


menggunakan mikroprofesor z80. Praktikum ini bertujuan agar membiasakan
pemakai dengan fungsi intruksi transfer data, latihan mengeset nilai inisialisasi data,
latihan menulis program, mengisi dan menjalankan.

Percobaan pertama adalah melakukan pemindahan data dari memori ke


register. Untuk menjalankan program tersebut perlu adanya masukan yang berupa
rumus variable terprogram agar tercipta keluaran yang dikehendaki. Langkah
awal adalah memastikan kondisi register. Selanjutnya tekan ADDR pada alamt
1800H kemudian menuliskanbahasa mesin alamat tersebut sesuai pustaka data
mikroprossessor. Pada alamat 1800H dapat disetting dengan menekan DATA
3E+00. Sesuai pustaka data, 3E berfungsi untuk memanggil register A sedangkan
00merupakan data yang dimasukkan ke register A, Sehingga dengan kata lain LD
A,00H berarti bahwa data 00 masuk ke register A. Prinsip tersebut juga berlaku untuk
register yang lain dalam hal pemindahan data, seperti register B dengan bahasa
rakitan LD B,01 dimana register B diisi dengan data 01 H. Register Cdengan bahasa
rakitan LD C,02 dimana register C diisi dengan data 02 H. Register D dengan
bahasa rakitan LD D,03H dimana register D diisi dengan data 03H. LD E,04H
dimana register E diisi dengan data 04H. LD H,05H dimana register H diisi dengan
data 05H. LD L,06H dimana register L diisi dengan data 06H. Ketika semua
progam telah dimasukankembali ke alamat 1800H kemudiantekan tombol PC
lalu GOuntuk menjalankan [Link] data direg A, Reg B, Reg C ,Reg
D,Reg E, Reg H, Reg L. Dan didapatkanhasil reg A= 00, regB=01, regC=02, regD=
03, reg E=04, reg H= 05, reg L= 06. Jika hasil ini sesuai dengan program yang
diinputkan keperangkat z80 dan percobaan pemindahan data, makapraktikum pertama
berhasil

Percobaan kedua adalah mengatur isi register B, C, D, E, H, dan L


dengan menggunakan instruksi LD 16 bit untuk memindahkan dua byte data
setiap kali. Percobaan dilakukan dengan menulis program lalu menerjemahkan
program ke dalam Bahasa mesin dengan alamat awal 1820H lalu memasukkan
program ke mikroprofessor dan mengakhirinya dengan data [Link] Bahasa
rakitan LD B,C, 1234H dituliskan dalam Bahasa mesin 01 34 12 dengan
memasukkan data pada alamat 1820H adalah 01 (kode untuk LD B,C), data pada
alamat 1821H adalah 34 (isi register C), dan data padaalamat 1822H adalah 12 (isi
register C). Untuk Bahasa rakitan LD D,E, 5678H dituliskan dalam Bahasa mesin
11 78 56 dengan memasukkan data pada alamat 1823H adalah 11 (kode untuk
LD D,E), data pada alamat 1824H adalah 78 (isi register E), dan data pada
alamat 1825H adalah 56 (isi register D). Untuk Bahasa rakitan LD H,L,
090AH dituliskan dalam Bahasa mesin 21 0A 09 dengan memasukkan data
pada alamat 1826H adalah 21 (kode untuk LD H,L), data pada alamat 1827H adalah
0A (isi register L), dan data pada alamat 1828H adalah 09 (isi register H). Jadi, dapat
dianalisa dari program di atas bahwa pengisian dua register sekaligus dengan
Bahasa rakitan misalnya LD B,C maksudnya adalah data pada alamat pertama
berisi kode untuk Bahasa rakitan tersebut, data pada alamat kedua akan mengisi
register C, dan data pada alamat ketiga akan mengisi register B, dan seterusnya.

Pertanyaan

1. Tuliskan dasar-dasar pemograman Assembly beserta kode, fungsi, dan Penjelasan!


2. Apa hubungan bahasa assembly dengan bahasa mesin ? Tulis beserta contohnya!

Jawaban

1. 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.

Perintah - perintah dasar Assembly.


1. ADD ( ADD Binary Number )
Format ADD Operand1, Operand2
Fungsi Menambahkan Operand1 dengan Operand2, hasilnya akan disimpan di dalam
Operand1
Kalimat Matematika Operand1 = Operand1 + Operand2
Contoh MOV EAX, 00000001h ; Lihat perintah MOV

ADD EAX, 00000002h ; EAX = 00000001h + 00000002h = 00000003h

2. AND ( Logical AND )


Format AND Operand1, Operand2
Fungsi Melakukan Operasi Logika AND pada Operand1 dan Operand2, hasilnya akan
disimpan di Operand1
Kalimat Matematika Operand1 = Operand1 AND Operand2
Contoh MOV EAX, 00001111b ; Lihat perintah MOV
AND EAX, 11110000b ; EAX = 00001111b AND 11110000b = 00000000b
3. CALL ( CALL A Procedure )
Format CALL LokasiProcedure
Fungsi Memanggil sebuah Procedure.
Kalimat Matematika -
Contoh CALL 12345678 ; Memanggil Procedure yang berada pada Offset 12345678

4. CDQ ( Convert Doubleword To Quadword )


Format CDQ
Fungsi Merubah nilai 32-bit dalam EAX menjadi 64-bit dalam EDX : EAX dengan cara
mengosongkan isi EDX
Kalimat Matematika -
Contoh MOV EAX, 12345678h ; EAX = 12345678h

CDQ ; EDX : EAX = 00000000 : 12345678h

5. CMP ( Compare )
Format CMP Operand1, Operand2
Fungsi Membandingkan Operand1 dengan Operand2, setelah perintah ini, biasanya akan
diikuti dengan sebuah Condtional Jump yang akan menentukan jalur program berikutnya.
Kalimat Matematika -
Contoh MOV ECX, 0Ah ; EAX = 0Ah

MOV EAX, 0Bh ; EBX = 0Bh

CMP EAX, ECX ; Pembandingan EAX dengan ECX.

JE 12345678 ; Jika sama, lompat ke Offset 12345678. Jika tidak, lanjutkan ke bawah

6. DEC ( Decrement )
Format DEC Operand
Fungsi Mengurangi nilai Operand dengan 1
Kalimat Matematika Operand1 = Operand1 - 1
Contoh MOV EAX, 0Ah ; EAX = 0000000Ah

DEC EAX ; EAX = 0000000Ah - 00000001h = 00000009h

7. DIV ( Unsigned Division )


Format DIV Operand
Fungsi Membagi nilai yang ada di Register EAX dengan Operand2
Kalimat Matematika EAX = EAX DIV Operand
Contoh MOV EAX, 0Ah ; EAX = 0000000Ah

MOV EBX, 05h ; EBX = 00000005h

DIV EBX ; EAX = 0000000Ah DIV 00000005h = 00000002h

8. IDIV ( Signed - Integer - Division )


Format IDIV Operand
Fungsi Membagi nilai yang ada di Register EDX : EAX dengan Operand2, hasilnya akan
disimpan di EAX sedang sisanya disimpan di EDX
Kalimat Matematika EDX : EAX = EDX : EAX IDIV Operand
Contoh MOV EDX, 00h ; EDX = 00000000h

MOV EAX, 0Fh ; EAX = 0000000Fh

MOV EBX, 05h ; EBX = 00000005h

IDIV EBX ; EDX : EAX = 00000000 : 0000000Fh IDIV 00000005h

; EAX = 00000003h ( hasil ) EDX = 00000000h ( sisa )

9. IMUL ( Signed - Integer - Multiplication )


Format IMUL Operand
Fungsi Pada program 32 bit, IMUL ini digunakan untuk mengalikan antara nilai yang
tersimpan di dalam Register EDX : EAX dengan Operand. Hasilnya akan disimpan di
dalam EAX
Kalimat Matematika EAX = EDX : EAX IMUL Operand
Contoh MOV EDX, 00h ; EDX = 00000000h

MOV EAX, 05h ; EAX = 00000005h

MOV EBX, 0Ah ; EBX = 0000000Ah

IMUL EBX ; EAX = 00000000 : 00000005 IMUL 0000000A = 00000032h


10. Conditional Jump

Conditional Jump adalah perintah dalam Assembler yang digunakan untuk menentukan
alur program berikutnya. Conditional Jump ini sebelumnya didahului oleh perintah CMP
( perhatikan contoh di penjelasan no. 5).

Ada berbagai macam Conditional Jump, di sini aku hanya membahas beberapa
Conditional Jump yang sering aku temui ketika mengKrak, untuk perintah - perintah
Conditional Jump lainnya, bisa kamu perdalam lagi di buku - buku yang membahas
Assembly. Untuk semua penjelasan Conditional Jump di bawah ini, aku akan pake
beberapa perintah yang ada sebelum perintah Conditional Jump tersebut dieksekusi.

MOV EAX, 01h ; EAX = 00000001h

MOV EBX, 02h ; EBX = 00000002h

CMP EAX, EBX ; Membandingkan antara EAX dengan EBX


Format Conditional Jump
Fungsi
JA LokasiTujuan ( Jump If Above ) Lompat ke LokasiTujuan jika EAX lebih besar dari
EBX
JAE LokasiTujuan ( Jump If Above or Equal ) Lompat ke LokasiTujuan jika EAX lebih
besar atau sama dengan EBX
JNA LokasiTujuan ( Jump If Not Above ) Lompat ke LokasiTujuan jika EAX tidak lebih
besar dari EBX
JNAE LokasiTujuan ( Jump If Not Above or Equal ) Lompat ke LokasiTujuan jika EAX
tidak lebih besar atau sama dengan EBX
JB LokasiTujuan ( Jump If Below ) Lompat ke LokasiTujuan jika EAX lebih kecil dari
EBX
JBE LokasiTujuan ( Jump If Below or Equal ) Fungsinya sama dengan perintah JNA
JNB LokasiTujuan ( Jump If Not Below ) Fungsinya sama dengan perintah JAE
JNBE LokasiTujuan ( Jump If Not Below or Equal ) Fungsinya sama dengan perintah JA
JE LokasiTujuan ( Jump If Equal ) Lompat ke LokasiTujuan jika EAX sama dengan EBX
JNE LokasiTujuan ( Jump If Not Equal ) Lompat ke LokasiTujuan jika EAX tidak sama
dengan EBX
JG LokasiTujuan ( Jump If Greater ) Lompat ke LokasiTujuan jika EAX lebih besar dari
EBX
JGE LokasiTujuan ( Jump If Greater or Equal ) Lompat ke LokasiTujuan jika EAX lebih
besar atau sama dengan EBX
JNG LokasiTujuan ( Jump If Not Greater ) Lompat ke LokasiTujuan jika EAX tidak lebih
besar dari EBX
JNGE LokasiTujuan ( Jump If Not Greater or Equal ) Lompat ke LokasiTujuan jika EAX
tidak lebih besar atau sama dengan EBX
JL LokasiTujuan ( Jump If Less Than ) Fungsinya sama dengan perintah JNGE
JLE LokasiTujuan ( Jump If Less or Equal ) Fungsinya sama dengan perintah JNG
JNL LokasiTujuan ( Jump If Not Less Than ) Fungsinya sama dengan perintah JGE
JNLE LokasiTujuan ( Jump If Not Less or Equal ) Fungsinya sama dengan perintah JG
JZ LokasiTujuan ( Jump If Zero ) Fungsinya sama dengan JE
JNZ LokasiTujuan ( Jump If Not Zero ) Fungsinya sama dengan JNE

11. JMP LokasiTujuan ( Unconditional Jump )


Format JMP LokasiTujuan
Fungsi Perintah JMP ini berbeda dengan perintah - perintah Conditional Jump karena ia
tidak memerlukan hasil perbandingan sebelum perintah ini dieksekusi.
Kalimat Matematika -
Contoh JMP 12345678 ; Lompat ke Offset 12345678

12. LEA ( Load Effective Address )


Format LEA Operand1, LokasiMemory
Fungsi Untuk mengambil Offset dari LokasiMemory dan menyimpannya di dalam
Operand1
Kalimat Matematika -
Contoh LEA EAX,

13. MOV ( Move Data )


Format MOV Operand1, Operand2
Fungsi Menyalin isi dari Operand2 kedalam Operand1
Kalimat Matematika Operand1 = Operand2
Contoh MOV EAX, 0Ah ; EAX = 0000000Ah

14. MUL ( Multiplication )


Format MUL Operand
Fungsi Mengalikan isi EAX dengan Operand, hasilnya akan disimapn di dalam EDX :
EAX
Kalimat Matematika EDX : EAX = EAX * Operand
Contoh MOV EAX, 0Ah ; EAX = 0000000Ah

MUL EAX, 05h ; EDX : EAX = 0000000Ah * 00000005h = 00000000 : 00000032h

15. NOP ( No Operation )


Format NOP
Fungsi Seperti namanya, NOP tidak melakukan Operasi apa - apa, walaupun begitu
perintah ini memiliki peran yang cukup penting dalam Kraking. Seperti yang diketahui,
salah satu teknik mengKrak sebuah Sistem Proteksi adalah Patching, dalam Patching ini,
Kraker harus merubah perintah yang ada di dalam Sistem Proteksi tersebut agar dapat
mengKraknya.

Contoh sederhananya yaitu ketika ada sebuah Conditional Jump yang akan menentukan
apakah S/N yang kita masukan valid atau tidak, salah satu cara yang mungkin untuk
mengKraknya adalah dengan me-NOP-kan perintah Conditional Jump tersebut. Untuk
lebih jealasnya, liat contoh di bawah.
Kalimat Matematika -
Contoh MOV EAX, 12345678 ; Offset 12345678 berisi S/N palsu

MOV EBX, 87654321 ; Offset 87654321 berisi S/N yang asli.

CMP EAX, EBX ; Bandingkan EAX dengan EBX

JNE 12344321 ; Jika tidak sama, lompat ke Offset 12344321

Offset berikutnya menyatakan bahwa S/N yang dimasukan adalah S/N yang valid.

Offset 12344321 menyatakan bahwa S/N yang kita masukan adalah S/N yang salah..

Listing di atas menunjukkan dengan jelas bagaimana S/N kita dibandingkan, jika kau
ingin dengan sembarang S/N dapat dianggap sukses maka kita bisa me-NOP-kan
Conditional Jump di atas sehingga listing perintah di atas menjadi :

MOV EAX, 12345678 ; Offset 12345678 berisi S/N palsu

MOV EBX, 87654321 ; Offset 87654321 berisi S/N yang asli.

CMP EAX, EBX ; Bandingkan EAX dengan EBX

NOP ; Tidak melakukan pencabangan sehingga S/N apa saja yang dimasukan akan
dianggap valid.

16. OR ( Logical OR )
Format OR Operand1, Operand2
Fungsi Melakukan Operasi Logika OR terhadap Operand1 dan Operand2, hasilanya akan
disimpan di dalam Operand1
Kalimat Matematika Operand1 = Operand1 OR Operand2
Contoh OR EAX, EBX

17. POP ( POP from Stack )


Format POP Operand
Fungsi Mengambil isi dari Stack dan menyimpannya di dalam Operand
Kalimat Matematika -
Contoh POP EAX

18. PUSH ( PUSH onto Stack )


Format PUSH Operand
Fungsi Memasukan nilai dari Operand ke dalam Stack
Kalimat Matematika -
Contoh PUSH EAX

19. RET ( Return from Procedure )


Format RET
Fungsi Kembali ke Rutin pemanggil Procedure yang sedang berlangsung.
Kalimat Matematika -
Contoh 1234 : 00000001 CALL 00001000 ;Memanggil Procedure yang ada di Offset
00001000

1234 : 00000002 ;Perintah Selanjutnya

1234 : 00001000 RET ;Alur program akan kembali ke Offset 00000002

20. SUB ( Subtract Binary Values )


Format SUB Operand1, Operand2
Fungsi Mengurangkan nilai dari Operand1 dengan Operand2. Hasilnya kemudian
disimpan di dalam Operand1
Kalimat Matematika Operand1 = Operand1 - Operand2
Contoh MOV EAX, 0Ah ;EAX = 0Ah ( = 10 decimal )

MOV EBX, 01h ;EBX = 01h ( = 01 decimal )

SUB EAX, EBX ;EAX = EAX - EBX = 0Ah - 01h = 09h

21. TEST ( Test Bits )


Format TEST Operand1, Operand2
Fungsi Memeriksa apakah Operand1 sama dengan Operand2 ???
Kalimat Matematika -
Contoh MOV EAX, 0Ah ;EAX = 0Ah ( = 10 decimal )

MOV EBX, 01h ;EBX = 01h ( = 01 decimal )


TEST EAX, EBX ;Apakah EAX = EBX ???

JE 12344321 ;Jika sama, lompat.

22. XOR ( Exclusive OR )


Format XOR Operand1, Operand2
Fungsi Melakukan operasi logika Exlusive OR antara Operand1 dengan Operand2.
Perintah XOR ini juga sering dipakai untuk me-nol-kan suatu register dengan cara XOR
Operand1, Operand1
Kalimat Matematika -
Contoh XOR EAX, EAX ;Berfungsi untuk me-nol-kan nilai EAX ( EAX = 0 )
2. Hubungan Serta Perbedaan Bahasa Assembly dengan Bahasa Mesin
Bahasa Mesin

Setiap jenis CPU memiliki bahasa mesin-nya masing-masing. Instruksi bahasa mesin
dinyatakan dalam bilangan numeric (Binari) yang tersimpan sebagai byte dimemori.
Masing-masing instruksi memiliki kode numerik yang unik yang disebut sebagai
“operation code” atau “opcode”. Setiap perintah diawali dengan suatu opcode dan dapat
diikuti oleh data.

Bahasa Assembly

Karena Bahasa Mesin sangat rumit untuk diprogram secara langsung (karena berupa
bilangan numeric), sehingga dibuat suatu symbol pelambang (mnemonic) untuk mewakili
masing-masing instruksi tersebut yang lebih mudah diingat dan dibaca oleh manusia
(bayangkan apakah anda lebih mudah mengingat nama teman anda atau nomor telepon
rumahnya?).

ApaituAssembler?

bahasa Assembly menggunakan mnemonic sebagai penganti bagi instruksi bahasa


Mesin, sehingga program yang ditulis dalam bahasa Assembly tidak dapat secara
langsung dieksekusi oleh CPU. Dalam hal ini Assembler berperan untuk menterjemahkan
mnemonic tersebut menjadi bahasa Mesin yang dapat dieksekusi oleh CPU. Untuk
melakukan assembler dapat menggunakan program [Link] maupu berbagai
aplikasi compiler seperti TASM, MASM, NASM, FASM maupun emulator8086.

Apa itu disassembler ?

Jika proses Assembler menterjemahkan program yang ditulis dengan bahasa Assembly
menjadi bahasa mesin, maka proses disassembler adalah mengembalikan suatu binary
program menjadi (mnemonic) bahasa Assembly. Tujuan dari disassembler adalah untuk
keperluaan reversed engineering, dimana kita mempelajari maupun memperbaiki suatu
software tanpa memiliki source code, misalnya untuk mempelajari teknik penyerangan
suatu program malware untuk dibuat anti malwarenya, ataupun memeriksa kemungkinan
suatu program terdapat payload.

Mengapa belajar Assembly

Assembly biasanya digunakan untuk kegiatan penting tertentu. Mengapa? Karena lebih
mudah memprogram dengan menggunakan bahasa tingkat tinggi dari pada menggunakan
assembly. Pemakaian assembly akan mengakibatkan program sulit untuk dialihkan ke
platform yang berbeda (ingat bahwa masing-masing CPU memiliki bahasa Mesin yang
berbeda), dan berikut ini adalah alasan mengapa anda mempelajari bahasa Assembly :

1. Program yang ditulis dengan assembly akan lebih cepat dan lebih kecil dibandingkan
dengan kode yang dihasilkan dengan menggunakan compiler.

2. Assembly memungkinkan akses langsung ke fasilitas system hardware yang mungkin


tidak dapat dilakukan dengan menggunakan bahasa tingkat tinggi (membaca/menulis data
langsung ke sector, memformat harddisk).

3. Mempelajari assembly akan membantu pengertian yang lebih mendalam bagaimana


computer bekerja.

4. Mempelajari pemrograman assembly akan membantu pengertian yang lebih baik


tentang bagaimana compiler dan bahasa tingkat tinggi seperti C bekerja.

5. Dengan mengerti bahasa Assembly kamu dapat melakukan proses disassembly untuk
menganalisa program tertentu.

CONTOH KODE ASSEMBLY SEDERHANA

mov ax, 26
- memindah angka 26 ke register AX
mov bx, 3
- memindah angka 3 ke register BX
mov ax, 3
mov bx, 5
add ax, bx - memindah angka 3 ke register AX, lalu memindahkan angka 5 ke register
BX, lalu menambahkan AX dan BX, sehingga hasilnya adalah 8. Angka 8 tersimpan di
register AX.
mov ax, 10
mov bx, 15
add ax, bx - memindah angka 10 ke register AX, lalu memindah angka 15 ke register BX,
lalu menambahkan AX dan BX, sehingga hasilnya adalab 25. Angka 25 tersebut
tersimpan di register AX.
mov ax, 8
add ax, 3 - memindah angka 8 ke register AX, lalu menambahkannya dengan angka 3.
mov ax, 0
cmp ax, 0
je fungsi1 - memindah 0 ke register AX, lalu mambandingkan AX dengan 0. Jika sama,
maka kode akan pergi ke fungsi fungsi1.
mov ax, 5
add ax, 3
cmp ax, 8
je fungsi1 - memindahkan 5 ke register AX, lalu menambahkannya dengan 3 (hasilnya 8
dan hasilnya ada di register AX). Lalu AX dibandingkan dengan angka 8. Jika sama,
maka kode akan pergi ke fungsi1.
mov dx, 0
mov ax, 6
mov bx, 4
div bx - memindahkan 0 ke DX, 6 ke AX dan 4 ke BX. Kemudian AX dibagi dengan BX
(6 dibagi 4). Hasilnya disimpan di register AX dan sisanya disimpan di register DX.
Sekarang, AX bernilai 1 dan DX bernilai 2.
mov dx, 0
mov ax, 25
mov bx, 8
div bx - memindahkan 0 ke DX, 25 ke AX dan 8 ke BX. Kemudian AX dibagi dengan
BX (25 dibagi 8). Hasilnya akan disimpan di register AX dan sisanya akan disimpan di
register DX. Dalam hal ini, register AX bernilai 3 dan DX bernilai 1.
mov ax, 1
mov bx, 0
and ax, bx - memindahkan 1 ke register AX dan 0 ke register BX. Lalu AX diberi
operator DAN dengan BX (AX ^ BX). Dalam hal ini, hasilnya adalah 0. Angka 0 ini
disimpan di register AX.
mov ax, 0
or ax, 1 - memindahkan 0 ke register AX, lalu register AX diberi operator ATAU dengan
BX (AX v BX). Dalam hal ini, hasilnya adalah 1. Angka 1 ini disimpan di register AX.
mov al, 3
mov bl, 4
mul bl - memindahkan 3 ke register AL dan 4 ke BL. Lalu AL dikali BL, dan hasil ya
disimpan di register AL.
mov al, 20
mov bl, 4
mul bl- memindahkan 20 ke register AL dan 4 ke register BL. Lalu AL dikalikan BL, dan
hasilnya disimpan di register AL.

VI. Kesimpulan
1. Pada percobaan 1 terdapat fungsi bahasa pemanggil untuk memasukkan data
kesuatu register sesuai prinsip pemindahan data.
2. Pada percobaandilakukan pengeset-anisi register-register dengan menggunakan
bahasa mesin LD 16 bit sesuai yang diinginkan.
3. Dari hasil pengamatan pada percobaan pemindahan data, kebanyakan
menggunakan perintah LD. Perintah LD ini mencakup pemindahan untuk data 8
bit serta 16 bit, serta tempat asal data dan tujuan data bisa bermacam-macam. Jadi
perintah LD ini sangat cocok untuk digunakan dalam operasi pemindahan data.

Anda mungkin juga menyukai