desty rodiah (09071002034)
DESCRIPTION
Resume praktikum Bahasa rakitanTRANSCRIPT
PRAKTIKUM BAHASA RAKITAN
DISUSUN OLEH
DESTY RODIAH
(09071002034)
JURUSAN TEKNIK INFORMATIKA
FAKULTAS ILMU KOMPUTER
UNIVERSITAS SRIWIJAYA
2009
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
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
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
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
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
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
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
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
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
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>
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
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
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 :
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
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
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
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
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
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 :
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
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
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:
.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
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
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
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
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.
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
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
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.