desty rodiah (09071002034)

40
PRAKTIKUM BAHASA RAKITAN DISUSUN OLEH DESTY RODIAH (09071002034) JURUSAN TEKNIK INFORMATIKA FAKULTAS ILMU KOMPUTER UNIVERSITAS SRIWIJAYA

Upload: drnech

Post on 18-Jun-2015

582 views

Category:

Documents


6 download

DESCRIPTION

Resume praktikum Bahasa rakitan

TRANSCRIPT

Page 1: DESTY RODIAH (09071002034)

PRAKTIKUM BAHASA RAKITAN

DISUSUN OLEH

DESTY RODIAH

(09071002034)

JURUSAN TEKNIK INFORMATIKA

FAKULTAS ILMU KOMPUTER

UNIVERSITAS SRIWIJAYA

2009

Page 2: DESTY RODIAH (09071002034)

SISTEM BILANGAN

Pada pemrograman bahasa assembly terdapat beberapa jenis sistem bilangan yang

digunakan dan memiliki beberapa criteria di dalam setiap jenis bilangan tersebut :

– Sistem bilangan Biner :basis 2 (0-1)

– Sistem bilangan Oktal : basis 8 (0-7)

– sistem bilangan Desimal : basis 10(0-9)

– Sistem bilangan HeksaDesimal : basis (0-F)

– Sistem bilangan BCD (Binary Coded Decimal)

1. Sistem bilangan Desimal

Bilangan ini mempunyai simbol : 0,1,2…9 Dasar bilangan desimal adalah:

10.Bilangan ini merupakan bilangan yang paling terkenal karena digunakan di kehidupan

sehari hari.

Contoh :

Posisi 4 3 2 1

Nama ribuan ratusan Puluhan satuan

Nilai 103 102 101 100

Contoh= (1234) =(1234)10

2. Sistem bilangan Biner

Bilangan ini mempunyai dua simbol yaitu 0 dan 1, Dasar dari bilangan biner

adalah 2.

Sebenarnya semua bilangan yang masuk ke computer baik dalam bentuk

octal ,decimal,heksadesimal, maupun BCD( Binary Coded Decimal) akan di terjemahkan

ke dalam bilangan biner.Karena didalam computer hanya dapat membaca bilangan biner

Berikut ini table bilangan decimal dan bilangan biner

BILANGAN BILANGAN BINER

Page 3: DESTY RODIAH (09071002034)

DESIMAL

0 0

1 1

2 10

3 11

14 1110

DST

Cara mengubah bilangan biner ke bilangan decimal

Contoh :

Mengubah nilai (1100110)2 = (102)10

Posisi 7 6 5 4 3 2 1

Nilai 26 25 24 23 22 21 20

Contoh: 1 1 0 0 1 1 0

Nilai Desimalnya: ( 64 + 32 + 4 + 2) = (102)10

3. Sistem bilangan Oktal

Bilangan ini mempunyai simbol yaitu 0 s/d 7.Dasar bilangan oktal adalah 8.Satu

bilangan octal dapat dikonversikan kedalam bentuk decimal dengan mengalikan suku ke-

N dengan 8 N.

Cara mengubah bilangan octal ke bilangan decimal

Contoh :

Mengubah nilai (673)8 = (443)10

Posisi 4 3 2 1

Nilai 83 82 81 80

Contoh= (673)8 = (443)10

4. Sistem bilanngan Heksadesimal

Page 4: DESTY RODIAH (09071002034)

Bilangan ini mempunyai simbol : 0 s/d 9 dilanjutkan A s/d F.Dasar bilangan

heksadesimal adalah: 16. Dalam pemrograman assembler, jenis bilangan ini boleh

dikatakan yang paling banyak digunakan. Hal ini dikarenakan mudahnya pengkonversian

bilangan ini dengan bilangan yang lain, terutama dengan bilangan biner dan desimal.

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

0 1 2 3 4 5 6 7 8 9 A B C D E F

Contoh :

Mengubah nilai (F31)16 = (3901)10

Posisi 4 3 2 1

Nilai 163 162 161 160

Contoh= (F31)16 =(3901)10

5. Sistem bilangan BCD (Binary Coded Decimal)

BCD adalah bilangan biner yang sangat mudah diterjemahkan ke desimal, BCD

menggunakan minimum 4 bit biner untuk setiap digit decimal. 4 bit akan menghasilkan

16 kombinasi tetapi BCD hanya menggunakan 10 kombinasi seperti pada tabel berikut

ini:

DESIMAL BINER OKTAL HEKSA B C D

0 00000 00 00 0000 0000

1 00001 01 01 0000 0001

2 00010 02 02 0000 0010

3 00011 03 03 0000 0011

4 00100 04 04 0000 0100

5 00101 05 05 0000 0101

6 00110 06 06 0000 0110

7 00111 07 07 0000 0111

8 01000 10 08 0000 100

9 01001 11 09 0000 1001

10 01010 12 0A 0001 0000

Page 5: DESTY RODIAH (09071002034)

11 01011 13 0B 0001 0001

12 01100 14 0C 0001 0010

13 01101 15 0D 0001 0011

14 01110 16 0E 0001 0100

15 01111 17 0F 0001 0101

16 10000 20 10 0001 0110

KONVERSI SISTEM BILANGAN

Page 6: DESTY RODIAH (09071002034)

1. Konversi Bilangan biner ke Desimal

Untuk bilangan bulat

Setiap bilangan dikalikan dengan faktor 2

Contoh:

(N)10 = (110011)2

= (1 x 25 + 1 x 24 + 0x 23 + 0 x 22 + 1 x 21 + 1 x 20)

= (32 + 16 + 0 + 0 + 2 + 1)

(N)10 = (51)10

Untuk bilangan pecahan

Untuk bilangan pecahan caranya sama hanya nilai setiap bit biner dikalikan

dengan faktor setengah bilangan biner

Contoh :

(N)10 = (0,11001)2

= (1 x 2-1 + 1 x 2-2 + 0 x 2-3 + 0 x 2-4 + 1 x 2-5

= (0,5 + 0,25 + 0 + 0 + 0,03125)

(N)10 = (0,78125)10

2. Konversi Bilangan desimal ke biner

Untuk bilangan bulat

Bilangan tersebut dibagi 2, sisanya menyatakan bit biner. Sisa pertama adalah

Least Significant bit (LSB)

Contoh:

(N)2 = (128)10 = (10000000)2

167 : 2= 64 sisa 0 LSB

64 : 2= 32 sisa 0

32 : 2= 16 sisa 0

16 : 2= 8 sisa 0

8 : 2= 4 sisa 0

4 : 2= 2 sisa 0

2 : 2= 1 sisa 0

Page 7: DESTY RODIAH (09071002034)

1 : 2= 0 sisa 1 MSB

Untuk bilangan pecahan

Bilangan tersebut dikali 2, kemudian hasilnya diperoleh dengan membaca kolom

pindahan (carry) dari atas ke bawah

Contoh:

(N)2 = (0,57)10 = (0,10010001)2 + e (harga e < 2-8)

0,57 x 2= 1,14 pindahan 1 2-1 MSB

0,14 x 2= 0,28 pindahan 0 2-2

0,28 x 2= 0,56 pindahan 0 2-3

0,56 x 2= 1,12 pindahan 1 2-4

0,12 x 2= 0,24 pindahan 0 2-5

0,24 x 2= 0,48 pindahan 0 2-6

0,48 x 2= 0,96 pindahan 0 2-7

0,96 x 2= 1,92 pindahan 1 2-8 LSB

3. Konversi Bilangan biner ke octal

Cara konversinya: atur bit-bit integer bilangan biner menjadi kelompok-kelompok

dimana setiap kelompok terdiri dari tiga bit. Dimulai dari bit integer paling kanan dan

untuk bit pecahan sama dikelompokkan tetapi dimulai dari bit paling kiri.

Nyatakan bil.biner (110011001)2 jadi oktal

Biner : 110 011 001

Oktal : 6 3 1

Jadi : (110011001)2= (631)8

4. Konversi Bil. biner ke heksadesimal

Kelompokkan bit biner dimana masing terdiri dari 4 bit dimulai dari yang paling

kanan (bulat) dimulai dari kiri (pecahan)

Contoh :

Nyatakan bil.biner (111001111)2 jadi Heksadesimal

Biner : 1110 0111

Page 8: DESTY RODIAH (09071002034)

Heksa : E 7

Jadi : (111001111)2 = (E7)16

5. Konversi Bilangan desimal ke octal

Untuk bilangan bulat

Bilangan tersebut dibagi 8, kemudian dilakukan perulangan samapai hasilnya 0

Contoh:

(N)8 = (221)10= (335)8

221 : 8= 27 sisa 5 LSB

27 : 8= 3 sisa 3

3 : 8= 0 sisa 3 MSB

Untuk bilangan pecahan

Bilangan tersebut dikali 8, kemudian hasilnya diperoleh dengan membaca kolom

pindahan (carry) dari atas ke bawah

Contoh:

(N)8 = (0,15625)10= (0,12)8

0,15625 x 8= 1,25000 pindahan 1 8-1 MSB

0,25000 x 8= 2,00000 pindahan 2 8-2 LSB

6. Konversi Bilangan desimal ke Heksadesimal

Untuk bilangan bulat

Mengubah bilangan desimal ke bilangan heksa dilakukan pembagian berulang-

ulang dengan bil. Dasar 16

Contoh:

(N)16 = (3901)10= (F3D)16

3901 : 16 = 243 sisa (13)10 = (D)16 160 LSB

243 : 16 = 15 sisa (3)10 = (3)16 161

15 : 16 = 0 sisa (15)10 = (F)16 162 MSB

Untuk bilangan pecahan

Page 9: DESTY RODIAH (09071002034)

Bilangan tersebut dikali 16, kemudian hasilnya diperoleh dengan membaca kolom

pindahan (carry) dari atas ke bawah

Contoh:

(N)16 = (0,78125)10= (0,C8)16

0,78125 x 16 = 12,5 pindahan (12)10=(C )16 16-1 MSB

0,5 x 16 = 8 pindahan (8)10=(8 )16 16-2 LSB

REGISTER

Page 10: DESTY RODIAH (09071002034)

Register merupakan sebagian memori dari mikroprosesor yang dapat diakses

dengan kecepatan yang sangat tinggi.Perbedaan antara register dan memori adalah

register untuk menyimpan sementara dan memori untuk menyimpan secara permanent.

JENIS-JENIS REGISTER

Register yang digunakan oleh mikroprosesor dibagi menjadi 5 bagian dengan

tugasnya yang berbeda-beda pula, yaitu :

1. Segmen Register.

2. Pointer dan Index Register

3. General Purpose Register

4. Index Pointer Register

5. Flags Register

1. Segmen Register

Segmen register digunakan untuk menunjukkan alamat dari suatu segment

CS (Code Segment) untuk menunjukkan tempat dari segmen yang sedang

aktif

DS (Data Segment) untuk menunjukkan tempat segmen dimana data-data

pada program disimpan

ES (Extra Segment) untuk menunjukkan suatu alamat di memory

SS (Stack Segment) menunjukkan letak dari segmen yang digunakan oleh

stack

2. Pointer dan Index Register

Sebagai ponter terhadap suatu lokasi memori terdiri dari SP,BP,SI,DI.SI

dan Di mencatat suatu alamat di memori tempat. Register SP(Stack Pointer) yang

berpasangan dengan register segment SS(SS:SP) digunakan untuk mununjukkan

alamat dari stack, sedangkan register BP(Base Pointer)yang berpasangan dengan

register SS(SS:BP) mencatat suatu alamat di memory tempat data

3. General Purpose Register

Page 11: DESTY RODIAH (09071002034)

Register yang termasuk dalam kelompok ini adalah register AX,BX,CX

dan DX yang masing-masing terdiri atas 16 bit.

AX : aritmatika terutama dalam operasi pembagian dan pengurangan

BX : aritmatika biasanya digunakan untuk menunjukkan suatu alamat offset

dari suatu segmen.

CX : digunakan secara khusus pada operasi looping dimana register ini

menentukan berapa banyaknya looping yang akan terjadi.

DX : aritmatika khusus untuk menampung bagian perkalian dan pembagian

4. Index Pointer Register

Sebagai lokasi memori dari tempat instruksi yang akan

dieksekusi .Register ini berpasangan dengan CS

5. Flags Register

OF <OverFlow Flag>

Jika terjadi OverFlow pada operasi aritmatika, bit ini akan bernilai 1.

SF <Sign Flag>

Jika digunakan bilangan bertanda bit ini akan bernilai 1

ZF <Zero Flag>

Jika hasil operasi menghasilkan nol, bit ini akan bernilai 1.

CF <Carry Flag>

Jika terjadi borrow pada operasi pengurangan atau carry pada penjumlahan,

bit ini akan bernilai 1.

PF <Parity Flag>

Digunakan untuk menunjukkan paritas bilangan. Bit ini akan bernilai 1 bila

bilangan yang dihasilkan merupakan bilangan genap.

DF <Direction Flag>. Digunakan pada operasi string untuk menunjukkan

arah proses.

IF <Interrupt Enable Flag>

CPU akan mengabaikan interupsi yang terjadi jika bit ini 0.

TF <Trap Flag>

Page 12: DESTY RODIAH (09071002034)

Digunakan terutama untuk Debugging, dengan operasi step by step.

AF <Auxiliary Flag>

Digunakan oleh operasi BCD, seperti pada perintah AAA.

NT <Nested Task>

Digunakan pada prosesor 80286 dan 80386 untuk menjaga jalannya

interupsi yang terjadi secara beruntun.

IOPL <I/O Protection level>

Flag ini terdiri atas 2 bit dan digunakan pada prosesor 80286 dan 80386

untuk mode proteksi.

PE <Protection Enable>

Digunakan untuk mengaktifkan mode proteksi. flag ini akan bernilai 1 pada

mode proteksi dan 0 pada mode real.

MP <Monitor Coprosesor>

Digunakan bersama flag TS untuk menangani terjadinya intruksi WAIT.

EM <Emulate Coprosesor>

Flag ini digunakan untuk mensimulasikan coprosesor 80287 atau 80387.

TS <Task Switched>

Flag ini tersedia pada 80286 keatas.

ET <Extension Type>

Flag ini digunakan untuk menentukan jenis coprosesor 80287 atau 80387.

RF <Resume Flag>

Register ini hanya terdapat pada prosesor 80386 keatas.

VF <Virtual 8086 Mode>

Bila flag ini bernilai 1 pada saat mode proteksi, mikroprosesor akan

memungkinkan dijalankannya aplikasi mode real pada mode proteksi.

Register ini hanya terdapat pada 80386 keatas.

Perintah –Perintah Debug

r : untuk melihat register

Page 13: DESTY RODIAH (09071002034)

d (display) : untuk menampilkan isi dari register

a : untuk menampilkan alamat

t (trace) : untuk menjalankan program step by step,

g (go) : untuk menjalankan program sekaligus tanpa step by step

e (examine) : untuk mengganti isi

mnemonic : syntax atau kode yang melakukan aksi

operand : operasi yang akan diproses

komentar : sebagai keterangan. tetapi tidak bisa digunakan di debug. br bisa

digunakan di turbo assembler

Transfer Data

IMMEDIATE

Transfer segera mentransfer data tanpa embel-embel, langsung transfer ke register

yang dituju

contoh : MOV AX,5 : misal AX = 0000, maka AX sekarang : 0005

REGISTER

Transfer antar register

contoh : MOV AX,0090

: MOV DS,AX

: sama artinya dengan memasukkan 0090 ke register DS

DIRECT

Transfer langsung untuk mentransfer data namun berputar –putar dlu

Page 14: DESTY RODIAH (09071002034)

contoh : MOV AX, [0400] : [0400] adalah alamat data. yang akan ditransfer adalah

isi yang ada di dalam alamat memory

INDIRECT

transfer tidak langsung pada saat ingin memasukkan data kedalam sebuah alamat

memory

untuk : MOV AX,[0400]

: MOV [0500],AX

: intinya adalah memindahkan data pada alamat [0400] ke alamat [0500].

karena tidak dapat di transfer secara langsung, maka data dititipkan dulu ke register AX

Contoh 1:

Mencopy data awal 0120 ke 0130 pada data segment 0080

MOV AX,0080 ; meindahkan alamat 0080 ke register AXMOV DS,AX ; memindahkan AX ke DSMOV SI,0120 ; menginisialisasikan alamat 0120 pada data segmen 0080

dengan SIMOV DI,0130 ; menginisialisasikan alamat 0130 pada data segmen 0080

dengan DIMOV AX,[SI]  ;mengcopy isi data di SI ke AX,dimana SI adalah alamat

0120,jadi sekarang SI = AXMOV [DI],AX ; memindahkan isi data AX ke DI,jadi sekarang SI = AX = DI INT 20 ; penghentian

Data Awal :

Setelah dieksekusi :

Page 15: DESTY RODIAH (09071002034)

Contoh 2   :

Tukarkan semua data segmen pada alamat 0120 dengan 0130,dengan data segmen nya

0080

MOV AX,0080 ; meindahkan alamat 0080 ke register AXMOV DS,AX ; memindahkan AX ke DSMOV SI,0120 ; menginisialisasikan alamat 0120 pada data segmen 0080

dengan SIMOV DI,0130 ; menginisialisasikan alamat 0130 pada data segmen 0080

dengan DIMOV AX,[SI] ; mengcopy isi data di SI ke AX,dimana SI adalah alamat

0120,jadi sekarang SI = AXMOV BX,[DI] ; mengcopy isi data di DI ke BX,dimana DI adalah alamat

0130,jadi sekarang DI = BXMOV [SI],BX ; menukarkan data dari BX ke SI, dimana BX adalah data DIMOV [DI],AX ; menukarkan data dari AX ke DI, dimana AX adalah data SIINT 20 ; penghentian

data awal :

data setelah dieksekusi

Page 16: DESTY RODIAH (09071002034)

Contoh 3 :

Program menampilkan huruf a

.model small

.codeorg 100hproses: mov ah,02h ;service awal

mov dl,61h ;menampilkan hruf A, dl, memang untuk karakterint 21h ;untuk tampilin ke layarint 20h ;untuk stop

end proses

Contoh 4 :

Program menampilkan huruf ACE

.model small

.codeorg 100hproses: mov ah,02h ;untuk menampilkan 1 karakter

Page 17: DESTY RODIAH (09071002034)

mov cx,0003 ;melakukan pengulanagan sampai 3 kalimov dl,61h ; menginisialisasikan huruf A,yang disimpan dalam DL

ulang: int 21h ; menampilkan huruf Aadd dl,2h ; menambahkan data dl dengan 2,sebelumnya DL adalah

61,61h untuk A,jika ditambah dengan 2 maka 61+2 = 63,dimana 63 itu adalah huruf c,dan begitu juga dengan E,data yang sebelumnya adalah 63 jika ditamnah 2 maka menjadi 65,65h untuk karakter E

dec cx ; mengurangi CX sehingga menjadi 0 dan melakukan perngulangan sebanyak 3 kali

jnz ulang ;lompatan ke ulang,dan akan berhenti jika CX = 0;int 20h ;untuk stop

end proses

Page 18: DESTY RODIAH (09071002034)

ARITMATIKA

Aritmatika itu berfungsi untuk memanipulasi bit

Beberapa Instruksi aritmaika :

1. ADD

2. SUB

3. CMP

4. ADC

5. SBB

6. INC

7. DEC

8. MUL

9. DIV

1. ADD

Untuk menambah dalam bahasa assembler digunakan perintah ADD dan

AD serta INC. Perintah ADD digunakan dengan syntax :

ADD Tujuan,Asal

Sebagai contohnya :

MOV AH,15h

2. SUB

Untuk Operasi pengurangan dapat digunakan perintah SUB dengan syntax:

SUB Tujuan,Asal

Perintah SUB akan mengurangkan nilai pada Tujuan dengan Asal. Hasil yang

didapat akan ditaruh pada Tujuan, dalam bahasa pascal sama dengan instruksi

Tujuan:=Tujuan-Asal.

3. CMP

Perintah CMP(Compare) digunakan untuk membandingkan 2 buah

operand,dengan syntax:

CMP Operand1,Operand2

Page 19: DESTY RODIAH (09071002034)

4. ADC

Perintah ADC digunakan dengan cara yang sama pada perintah ADD, yaitu :

ADC Tujuan,Asal

Perbedaannya pada perintah ADC ini Tujuan tempat menampung hasil

pertambahan Tujuan dan Asal ditambah lagi dengan carry flag

(Tujuan:=Tujuan+Asal+Carry)

5. SBB

Seperti pada operasi penambahan, maka pada operasi pengurangan dengan

bilangan yang besar(lebih dari 16 bit), bisa anda gunakan perintah SUB disertai

dengan SBB(Substract With Carry). Perintah SBB digunakan dengan syntax:

SBB Tujuan,Asal

6. INC

Perintah INC(Increment) digunakan khusus untuk pertambahan dengan 1.

Perintah INC hanya menggunakan 1 byte memory, sedangkan perintah ADD dan

ADC menggunakan 3 byte. Oleh sebab itu bila anda ingin melakukan operasi

pertambahan dengan 1 gunakanlah perintah INC. Syntax pemakainya adalah :

INC Tujuan

7. DEC

Perintah DEC(Decrement) digunakan khusus untuk pengurangan dengan

1. Perintah DEC hanya menggunakan 1 byte memory, sedangkan perintah SUB

dan SBB menggunakan 3 byte. Oleh sebab itu bila anda ingin melakukan operasi

pengurangan dengan 1 gunakanlah perintah DEC. Syntax pemakaian perintah dec

ini adalah:

DEC Tujuan

Page 20: DESTY RODIAH (09071002034)

8. MUL

Sumber disini dapat berupa suatu register 8 bit(Mis:BL,BH,..), register 16

bit(Mis: BX,DX,..) atau suatu varibel. Ada 2 kemungkinan yang akan terjadi pada

perintah MUL ini sesuai dengan jenis perkalian 8 bit atau 16 bit.

9. DIV

Operasi pada pembagian pada dasarnya sama dengan perkalian. Untuk

operasi pembagian digunakan perintah DIV dengan syntax:

DIV Sumber

Contoh 1 :

Program menukar data dari alamat di ax 0080 dari 0120 ke 0130

mov ax,0080 ; meindahkan alamat 0080 ke register AXmov dx,ax ; memindahkan AX ke DSmov si,0120 ; menginisialisasikan alamat 0120 pada data segmen 0080 dengan SImov di,0130 ; menginisialisasikan alamat 0130 pada data segmen 0080 dengan DImov cx,0007 ; melakukan pengulangan sampai 7 kalimov ax,[si] ; mengcopy isi data di SI ke AX,dimana SI adalah alamat 0120,jadi

sekarang SI = AXmov [di],ax ; mengcopy isi data di DI ke BX,dimana DI adalah alamat 0130,jadi

sekarang DI = BXinc si ; penambahan untuk SI agar berpindah ke data segmen selanjutnyainc di ; penambahan untuk DI agar berpindah ke data segmen selanjutnyadec cx ; pengurangan cx dari 0007 sampai dengan 0000jnz 010b ; melakukan lompatan ke alamat 010b dan akan berhenti jika dec = 0int 20 ; penghentian

Data awal :

Page 21: DESTY RODIAH (09071002034)

Contoh 2 :program menukar data dari alamat ds 0900

0110-011f si

0140-014f di

mov ax,0900 ; meindahkan alamat 0090 ke register AXmov ds,ax ; memindahkan AX ke DSmov si,0110 ; menginisialisasikan alamat 0110 pada data segmen 0090 dengan SImov di,0140 ; menginisialisasikan alamat 0140 pada data segmen 0090 dengan DImov cx,0010 ; melakukan pengulangan sampai 7 kalimov al,[si] ; memindahkan isi SI ke AL jadi AL= SImov bl,[di] ; memindahkan isi DI ke BL jadi BL= DImov [si],bl ; menukarkan isi BL ke SI mov [di],al ; menukarkan isi AL ke DIinc si ; penambahan untuk SI agar berpindah ke data segmen selanjutnyainc di ; penambahan untuk DI agar berpindah ke data segmen selanjutnyadec cx ; pengurangan cx dari 0010 sampai dengan 0000jnz 010e ; lompatan ke alamat 010e dan akan berhenti jika dec = 0int 20 ; penghentian

Data Awal :

data setelah di eksekusi

Page 22: DESTY RODIAH (09071002034)

Contoh 3   :

Buatlah program untuk menjumlahkan data pada alamat memori 0120-012F dengan data

pada alamata memori 0130-013F dan hasilnya disimpan di alamat 0150-015F

MOV AX,0800 ; meindahkan alamat 0080 ke register AXMOV DS,AX ; memindahkan AX ke DSMOV SI,0120 ; menginisialisasikan alamat 0120 pada data segmen 0080

dengan SIMOV DI,0130 ; menginisialisasikan alamat 0130 pada data segmen 0080

dengan DIMOV BX,0150 ; menginisialisasikan alamat 0150 untuk menyimpan hasilMOV CX,000F ; melakukan pengulangan sampai 16 kaliMOV AX,[SI] ; memindahkan nilai SI ke AXADD AX,[DI] ; menambahkan ax dengan di dan disimpan di ax,ax=ax+diMOV [BX],AX ; memindahkan ax ke BXINC SI ; penambahan untuk SI agar berpindah ke data segmen

selanjutnyaINC DI ; penambahan untuk SI agar berpindah ke data segmen

selanjutnyaINC BX ; penambahan untuk SI agar berpindah ke data segmen

selanjutnyaDEC CX ; pengurangan cx dari 000F sampai dengan 0000JNZ 010E ; lompatan ke alamat 010e dan akan berhenti jika dec = 0INT 20 ; penghentian

Data setelah dieksekusi

Page 23: DESTY RODIAH (09071002034)

MANIPULASI BIT

Ada empat instruksi geser pada mikroprosesor 8088 / 8086 dan dua type dasar dapat

dijalankan pada operasi geser yaitu geser logika dan geser aritmatika. Selain itu, masing-

masing operasi dapat dijalankan ke kanan atau ke kiri. Perintah geser adalah

AND = kedua syarat harus bernilai benar

OR = salah satu syarat terpenuhi maka bernilai benar

XOR = kalau persyaratan berbeda maka benar,jika nilai sama maka salah

NOT

SHL = geser ke kiri

SHR = geser ke kanan

ROL = putar ke kiri

ROR = putar ke kanan

Contoh 1 :

Program ini untuk mencetak angka 02 dengan inputan nya 01

.model small

.codeorg 100hproses:

mov ah,02h ;servicemov bl,01h ;inputan pertama kali adalah 1rol bl,1 ;pemutarmov dl,bl ;nilai bl sekarang 02,untuk menampilkan masukkan ke

dl,dl merupakan pencetak karakteradd dl,30h ; untuk 30h asci nya 0,di tambah dengan add untuk

mengubah menjadi heksa ke asci,maka 30 + 02 = 32 int 21hmov ah,4c ;untuk enterint 20h

end proses

Contoh 2 :

Program menampilkan bilangan genap 246:

Page 24: DESTY RODIAH (09071002034)

.model small

.codeorg 100hproses: mov ah,02h ; menyiapkan service

mov bl,02h ; inputan pertama kali adalah 2mov dl,bl ; nilai bl sekarang 02,untuk menampilkan masukkan ke dl,dl

merupakan pencetak karakteradd dl,30h ; mengubah menjadi bilangan ascii 30 +2 menjadi 32 ,32

merupakan bilagan ascii untuk angka 2int 21h ; menampilkan angka 2shl bl,01h ; menggeser ke kiri sehingga nilai menjadi 4mov dl,bl ;memindahkan ke dl untuk mencetak karakteradd dl,30h ; mengubah menjadi bilangan ascii 30 +4 menjadi 34 ,34

merupakan bilagan ascii untuk angka 4int 21h ; menampilkan angka 4add dl,02h ; menambahkan ascii 34 menjadi 36 yaitu ascii untuk angka 6int 21h ; menampilkan angka 6mov ah,4ch ; untuk enterint 21h ;menampilkan angkaint 20h ; stop

end proses

Contoh 3:Program menampilkan bilangan ganjil 135.model small.codeorg 100hproses :

mov ah,02h ;menyiapkan servicemov bl,01h ; inputean bertama kali adalah 1mov dl,bl ; memindahkan ke dl untuk mencetak karakteradd dl,30h ; menambahkan 30 dengan 1 menjadi 31,dimana 31

adalah bilangan asci untuk angka 1

Page 25: DESTY RODIAH (09071002034)

int 21h ; mencetak angka 1mov dl,bl ; memindahkan ke dl untuk mencetak karakteradd dl,32h ; menambahkan angka dengan 2 menjadi 33,dimana 33

adalah asci untuk angka 3int 21h ;mencetak angka 3mov dl,bl ; memindahkan ke dl untuk mencetak karakteradd dl,34h ; menambahkan angka dengan 4 menjadi 35,dimana 35

adalah asci untuk angka 5int 21h ; mencetak angka 5int 20h ;stop

end proses

Page 26: DESTY RODIAH (09071002034)

CONDITIONAL INSTRUCTION

Pada conditional instruction ini hampir sama dengan conditional pada bahasa

bahasa lainnya seperti bahasa C++.

Contoh nya :

read temperature

turn heater on

turn heater off

Instruksi lompat /pengkondisian ada dua jenis

1. lompat tak bersyarat

2. lompat bersyarat

1. lompat tak bersyarat

Contoh dari instruksi yang tak bersyarat adalah jump/loop,jika dibagian atas

program terdapat jump/loop maka akan langsung lompat ke tempat tujuan.

Mnemonic Arti Format operasi Flag effect

JMP Lompat tak

bersyarat

JMP Operand Lompat ke alamat

tertentu oleh operand

none

Perintah JMP(Jump), sudah pernah kita gunakan, dimana perintah ini digunakan

untuk melompati daerah data program. Perintah JMP digunakan dengan syntax:

JMP Tujuan

Perintah JMP ini dikategorikan sebagai Unconditional Jump, karena perintah ini

tidak menyeleksi keadaan apapun untuk melakukan suatu lompatan.Setiap ditemui

perintah ini maka lompatan pasti dilakukan.

2. lompatan bersyarat

Page 27: DESTY RODIAH (09071002034)

Contoh lompatan bersyarat adalah jnz,JE(jump equel),jb akan memlompat jika

kondisi memenuhi syarat dec CX = jika nilai sCX adalah 0 maka akan lompat JNZ.JE

dan JB akan dipakai jika diatas nya ada CMP ax,bx =berarti apakah nilai ax= bx,jika nilai

sama akan lompat ke alamat yang telah ditentukan

Instruksi ini dapat dilihat pada tabel dibawah yang menjelaskan masalah ad atau

tidak adanya syarat status tertentu

Mnemonic Arti Format Operasi Flag effect

Jcc Lompat

bersyarat

Jcc operand Jika syarat cc benar

maka lompat ke

alamat ditentukan.

Jika tidak instruksi

selanjutnya

dilanjutkan

Page 28: DESTY RODIAH (09071002034)

STACK DAN SUBROUTINE

Kita mendapatkan bahwa biasanya perlu menyimpan isi register tertentu atau

beberapa program utama lain nialai ini disimpan dengan mendorong ke dalam stack.

Secara khusus data ini dapat dihubungkan dengan reg atau lokasi memori yang digunakan

oleh subroutine. Dengan cara ini isi aslinya digabungkan dalam memori stack segment.

Untuk kembali ke program utama ini dilakukan penarikan nilai yang disimpan dari stack

kembali ke lokasi aslinya. Ini dapat dilihat pada gambar. Instruksi untuk menyimpan

parameter pada stack adalah PUSH dan digunakan untuk mengembalikan lagi

menggukan POP ini dapat dilihat pada tabel :

Untuk menyimpan register PUSH XX

PUSH YY

PUSH ZZ

Boby subroutine :

POP ZZ

Untuk mengembalikan register dan POP YY

Parameter dari stack POP XX

Kembali ke program utama RET

Didalam stack terdapat 4 buah istruksi :

1. PUSH berarti sampai

2. POP berarti maju

3. PUSHF

4. POPF

1. POP

Ini instruksi transfer terakhir nilai yang tersimpan pada tumpukan kepada takdir

operator, ia kemudian meningkat oleh SP 2 yang mendaftar.

Page 29: DESTY RODIAH (09071002034)

Peningkatan ini disebabkan oleh kenyataan bahwa susunan tumbuh dari

memorysegment alamat tertinggi ke terendah, dan hanya bekerja sama dengan susunan

kata-kata, 2 byte, dengan meningkatkan sothen oleh dua SP yang mendaftar, pada

kenyataannya dua sedang subtracted fromthe real ukuran stack.

2. POPF

Perintah POPF digunakan untuk mengambil nilai pada stack dan disimpan

pada flags register.

3. PUSH

Push instruksi menurun oleh dua nilai SP dan kemudian transfer isi sumber

operator ke alamat yang baru dihasilkan di dimodifikasi mendaftar baru-baru ini. The

penurunan pada alamat karena saat menambahkan nilai-nilai ke stack, ini satu tumbuh

lebih besar dari pada alamat segmen yang lebih kecil, oleh karena itu subtracting 2 dari

SP mendaftar apa yang kami lakukan adalah untuk meningkatkan ukuran stack oleh dua

byte, yang merupakan satu-satunya jumlah informasi yang dapat menangani tumpukan

pada setiap input dan output informasi.

4. PUSHF

PUSHF yang digunakan untuk menyimpan nilai dari flags register pada stack.

Contoh 1 :

.model small ; jenis memory yang digunakan

.code ; penentu segmen programorg 100h ; segmen yang digunakan

Tdata :jmp proses ; lompat ke label proseskar db ? ; mengenalkan variable karklm db 'Cinta Menyebabkan Rindu yang paling Sengsara'

proses :mov cx,44 ; menentukan jumlah karakter yang akn tampilxor bx,bx ; mengosongkan BX

ulang :mov dl,klm[bx] ; memindahkan isi variabel 'klm' ke DL

Page 30: DESTY RODIAH (09071002034)

mov kar,dl ; memindahkan isi DL ke variabel 'kar'call cetak_kar ; memanggil prosedur cetak_karinc bx ; tambahkan BX dengan 1loop ulang ; ulangi dari label 'ulang' sebanyak 44 kaliint 20h ; kembali ke DOS

cetak_kar proc near ; pembuka prosedurpush ax ; simpan nilai AX pada stackpush dx ; simpan nilai DX pada stackmov ah,02h ; servis menampilkan karaktermov dl,kar ; memasukkan isi variabel kar ke DLint 21h ; perintah untuk menampilkan datapop dx ; mengambil nilai DX yang disimpanpop ax ; mengambil nilai AX yang disimpanret ; kembali ke sipemanggil

cetak_kar endp ; Akhiri prosedurend Tdata

Contoh 2:

Program Stack

mov cx,0002mov bx,1a00mov sp,1fffpush cxmov al,[bx]mov cx,0004add al,aldec cxjnz 010fmov [bx],alpop cxdec cxjnz 0109int 20

Page 31: DESTY RODIAH (09071002034)

SUBROUTINE

Subroutine adalah prosedur yang ditulis terpisah dari program utama. Bilamana

program utama harus menjalankan fungsi yang didefinisikan oleh ssubroutine,

subroutine harus dipanggil kedalam operasi. Untuk kerja ini harus dilepaskan dari

program utama ke tempat memulai subroutine. Kontrol untuk kembali ke program

utama, instruksi ini diikuti oleh instruksi pemanggil subroutine. Perhatian ini

dibedakan antara subroutine, dan lompat itu dipanggil subroutine, tidak hanya

prosedur lompat pada alamat yang tepat dalam memori code segment. Tetapi itu

memiki juga mekanisme untuk menyimpan informasi, masing-masing IP dan CS. Itu

diperlukan kembali ke program utama.