• Tidak ada hasil yang ditemukan

Bahasa assembly biasanya berupa keyboard (1)

N/A
N/A
Protected

Academic year: 2018

Membagikan "Bahasa assembly biasanya berupa keyboard (1)"

Copied!
62
0
0

Teks penuh

(1)

Assembly 

Assembly 

Pemrograman

Bahasa

Assembly

Buku ini merupakan suatu referensi maupun tutorial untuk mendalami bahasa assembly. Organisasi dan Arsitektur Komputer merupakan prasyarat utema yang harus pernah di ambil sebagai matakuliah dasar untuk dapat lebih cepat mengerti bahasa assembly.

Referensi 

dan 

(2)

2

Tu t or ia l Asse m ble r

N UM BERI N G SYSTEM S

BAGI AN 1

BAH ASA ASSEM BLY

BAGI AN 2 M EM ORY ACCESS

BAGI AN 3 V ARI ABLES

BAGI AN 4 I N TERRUPTS

BAGI AN 5 LI BRARY OF COM M ON FUN CTI ON S

-

EM U8 0 8 6 .I N C

BAGI AN 6 I N STRUKSI ARI TH M ETI C AN D

LOGI C

BAGI AN 7 : KON TROL ALUR PROGRAM

BAGI AN 8 : PROCED URES

BAGI AN 9 : STACK

BAGI AN 1 0 : M ACROS

BAGI AN 1 1 M EM BUAT SI STEM OPERASI

SEN D I RI

BAGI AN 1 2 PEN GEN D ALI AN D EV I CE

EX TERN AL

(3)

3 N UM BERI N G SYSTEM S

( Sist em Angka)

Ada banyak car a unt uk m er epresent asikan nilai num eric yang sam a. Dulu orang m enggunakan st ik unt uk m enghit ung, kem udian belaj ar bagaim ana m enggam barkan st ik di t anah dan di kert as. Sehingga, angka 5 di gam barkan sebagai : | | | | | ( unt uk 5 st ik) . Kem udian, penggunaan huruf rom awi m ulai digunakan unt uk m em bedakan sym bol dari berbagai angka yang diwakili oleh st ik : |

| | m asih berart i 3 st ik, t et api V be r a r t i 5 st ik, dan

X digunakan unt uk m ew akili 1 0 st ik.

Menggunakan st ik unt uk m enghit ung m erupakan ide yang brilian pada saat it u. Dan m enggunakan sym bol unt uk m ew akilinya dalah lebih baik dari ide sebelum nya.

D e cim a l Syst e m ( Sist em Desim al)

Kebanyakan orang sekarang m enggunakan represent asi nilai decim al unt uk m nghit ung . Dalam syst em decim al ada 10 digit :

0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9

Digit - digit t ersebut dapat m er epr esent asikan nilai apa saj a, cont oh : 7 5 4.

Nilai dibent uk dari j um lah set iap digit , lalu dikalikan dengan pangkat

ba se sesuai posisi digit nya ( ada 3 digit , dihit ung dari nol, dalam

kasusu ini base- nya adalah 1 0 karena ada 10 digit dalam syst em desim al) :

Posisi t iap digit adalah sangat pent ing, cont ohnya j ika kit a t em pat kan " 7" pada akhir digit :

5 4 7

(4)

4

Ca t a t a n pe n t in g: t iap angka dalam pangkat nol hasilnya 1, bahkan

nol pangkat nol hasilnya j uga 1:

Bin a r y Syst e m ( Sist em Binary)

Kom put er t idaklah secer das m anusia ( m ungkin belum ) , sangat lah m udah unt uk m em buat m esin elekt r onik dengan dua keadaan ( st at e) : on and of f, or 1 and 0. Kom put er m enggunakan syst em biner, yait u syst em dengan 2 digit :

0 , 1

Dan dengan dem ikian ba se - n y a adalah 2.

Set iap angka digit dalam syst em biner disebut BI T, j ika bent uk 4 bit disebut N I BBLE, bent uk 8 disebut BYTE, bent uk 2 ( t wo) byt e disebut

W ORD, bent uk t w o word disebut D OU BLE W ORD ( j ar ang dipakai) :

Ada at uran unt uk m enam bahkan " b" pada akhir angka biner , dengan cara ini kit a dapat m enent ukan bahw a 101b adalah angka biner dengan nilai decim al dari 5.

(5)

5 H e x a de cim a l Syst e m ( Sist em Hexadesim al)

Sist em Hexadecim al m enggunakan 16 digit : 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , A, B, C, D , E, F Dan dengan dem ikian ba se - n ya adalah 1 6.

(6)

6 Ada at uran unt uk m enam bahkan " h " diakhir angka hexadecim al , dengan cara ini kit a dapat m enent ukan bahw a 5Fh adalah angka hexadecim al dengan nilai decim al dari 95. Kit a j uga dapat m enam bahkan " 0 " ( nol) pada aw al angka hexadecim al yang lalu dim ulai dengan huruf ( A..F) , cont ohnya 0 E1 2 0 h.

Angka hexadecim al 1 2 3 4 h adalah sam a dengan nilai decim al dari 4660:

M e n gk on ve r si da r i syst e m de cim a l k e syst e m la in n ya .

Unt uk m er ubah/ m engkonversidari syst em decim al ke syst em lainnya , diperlukan unt uk m em bagi nilai decim al dengan ba se dari syst em nilai yang akan dihasilkan , unt uk it u kit a harus selalu ingat bahw a hasil baginya (r e su lt ) dan j uga sisa hasil baginya (r e m a in de r ), proses m ebagian dilakukan hingga hasilnya (r e su lt) adalah nol. Sisa hasil bagi (r e m a in de r ) kem udian digunakan unt uk m ew akili nilai dalam syst em . Sekarang coba rubah nilai dari 3 9 ( base 10) ke Sist em Hex adecim al ( base 16) :

Sepert i t erlihat diat as kit a m endapat kan angka hexadecim al: 2 7 h. Sem ua sisa hasil bagi ( rem ainders) ber ada dibaw ah 1 0 , Jadi kit a t idak m enggunakan sym bol huruf .

Cont oh lainnya:

(7)

7 Hasilnya adalah 0 AB5 Ch, kit a gunakan t a be l dia t a s unt uk m erubah sisa hasil bagi yang lebih dari 9 ke sym bol huruf yang sesuai .

Dengan m enggunakan prinsip yang sam a kit a dapat m er upah bent uk biner ( gunakan 2 sebagai pem bagi) , at au m erubah ke angka hexadecim al , dan kem udian m erubahnya ke angka biner m enggunakan t a be l dia t a s:

Sepert i t erlihat kit a dapat kan angka biner : 1 0 1 0 1 0 1 1 0 1 0 1 1 1 0 0 b

Sign e d N um be r s ( Angka Bert anda)

Tidak ada cara unt uk m eyakinkan bahwa byt e hexadecim al 0 FFh adalah posit ive at au negat ive, hal t ersebut dapat direpresent asikan dengan nilai decim al "2 5 5" dan "- 1" . 8 bit dapat digunakan unt uk m em buat kom binasi sebanyak 2 5 6 ( t erm asuk nol) , sehingga kit a dapat dengan m udah m enduga bahw a kom binasi 1 2 8 pert am a (0 ..1 2 7) akan m er epr esent asikan angka posit ive dan kom binasi 1 2 8 k em udian (1 2 8 ..2 5 6) akan m erepr esent asikan angka negat ive. Dalam r angka unt uk m endapat kan "- 5" , kit a harus m engur angi 5 dari kom binasi angka

(8)

8 Menggunakan car a yang susah ini ut nuk m erepresnet asikan angka negat ive m em iliki suat u art i, dalam m at em at ika j ika kit a m enam bahkan “- 5" dengan "5" kit a dapat kan nol. Hal ini t erj adi j ika prosesor m enam bahkan dua byt e 5 and 2 5 1, hasilnya adalah lebih dari 2 5 5, karena t erj adi overflow pada processor, sehingga didapat kan angka nol!

Jika kom binasi 1 2 8 ..2 5 6 m enggunakan selalu 1 sebagai high bit , Maka m ungkin dapat digunakan unt uk m enent ukan t anda dari angka t ersebut . Dengan cara yang sam a dapat digunakan w or ds ( nilai 16 bit ) , 16 bit m enghasilkan kom binasi sebesar 6 5 5 3 6 , 32768 kom binasi pert am a (0 ..3 2 7 6 7) digunakan unt uk m erepresent asikan angka posit ive , dan 32768 kom binasi lainnya (3 2 7 6 7 ..6 5 5 3 5) m ew akili angka negat ive. Ada cara yang m udah dalam e m u 8 0 8 6 unt uk m erubah angka , dan m em buat perhit ungan dari t iap ekspresi num eric, yang kit a perlukan disini adalah klik m enu M a t h:

(9)

9 M u lt i ba se ca lcu la t or dapat digunakan unt uk m em buat kalkulasi diant ara angka yang m em punyai syst em nilai yang berbeda dan m engkonversinya dari sat u syst em ke syst em lainnya. Ket ip ekspresi dan t ekan ent er , hasilnya akan m uncul dalam syst em nilai yang di pilih. Kit a dapat bekerj a dengan nilai hingga 3 2 bit. Jika t anda Signe d di check m engasum sikan bahwa sem ua nilai ( kecuali decim al dan double word) diperlakukan sebagai sign e d. Double w ord selalu diperlakukan sebagai suat u nilai signed, j adi 0 FFFFFFFFh adalah dikonversi m enj adi - 1.

Cont oh kit a ingin m enghit ung: 0FFFFh * 10h + 0FFFFh ( bat as lokasi m em ori m axim um yang dapat diakses oleh CPU 8086) . Jika kit a

check Signe d dan W or d kit a akan dapat kan -17 ( karena

dievaluasi sebagai (-1) * 16 + (-1) . Unt uk m em buat kalkulasi

dengan nilai unsigned, j angan check t anda Sign e d sehingga

kit a akan evaluasi m enj adi 65535 * 16 + 65535 dan kit a seharusnya

m endapat kan 1114095. Kit a j uga dapat m engunakan ba se

con ve r t e r unt uk m enkonversi digit non- decim al ke nilai decim al signed , dan m elakukan kalkulasi dengan nilai decim al.

Operasi yang m endukung adalah:

Angka Hexadecim alharus m em punyai suffix "h" , dan dim ulai dengan nol j ika digit pert am a adalah sym bol huruf ( A..F) , cont oh:

0ABCDh

(10)

10

Ba gia n 1

Ba h a sa Asse m bly

Tut orial ini dim aksudkan bagi m ereka yang t idak fam iliar dengan assem bler sam a sekali , at au yang sedikit m enget ahui bahasa t ersebut . Tent u saj a j ika anda m em punyai penget ahuan dalam bahasa pem rogram an lainnya ( basic, c/ c+ + , pascal...) hal t ersebut akan sangan m em bant u. Tet api bahkan j ika anda sudah fam iliar dengan assem bler, t idak ada salahnya unt uk m em pelaj ari synt ax dari em u8086. Dalam pelaj aran ini anda j uga sudah diasum sikan m em pelaj ari syst em nilai sepert i pada awal buku ini , j ika sudah anda dapat m elewat i bagian pert am a dari buku ini.

Apa k a h ba h a sa Asse m bly it u ?

Bahasa assem bly adalah bahasa level rendah dari bahasa pem rogram an. Anda perlu m enget ahui m engenai st rukt ur com put er ( Arsit ekt ur dan Sist em Kom out er) dalam rangka unt uk m em aham i sesuat unya yang akan dipelaj ari dalam buku ini. Secara sederhana m odel com put er dapat digam barkan sebagai

berikut :

Syst e m bus ( w arna kuning) m enghubungkan dengan

berm acam - m acam kom ponen kom put er.

CPU m erupakan j ant ung com put er, ham per seluruh perhit ungan dilakukan didalam CPU.

(11)

11 eksekusi.

CPU

GEN ERAL PURPOSE REGI STER

CPU 8086 m em punyai 8 general purpose regist er, dim ana t iap regist er m em punyai nam anya sendiri- sendiri :

AX - t he accum ulat or regist er ( dibagi m enj adi AH / AL) . • BX - t he base address regist er ( dibagi m enj adi BH / BL) . • CX - t he count regist er ( dibagi m enj adi CH / CL) .

D X - t he dat a regist er ( dibagi m enj adi D H / D L) . • SI - source index regist er.

D I - dest inat ion index regist er. • BP - base point er.

SP - st ack point er.

(12)

12 updat e, begit u j uga sebaliknya. Begit u j uga sam a dengan 3 regist er lainnya, " H" berart i bagian high dan " L" berart i bagian low. Karena regist er berada dalam CPU, m ereka lebih cepat dibandingkan dengan m em ory. Pengaksesan lokasi m em ory diperlukan penggunaan suat u syst em bus, j adi pengaksesan m em ori m em akan w akt u lebih banyak disbanding pengaksesan regist er. Pengaksesan dat a dalam regist er biasanya t idan m em but uhkan wakt u. Oleh karena it u kit a harus m enyim pan variable dalam regist er. Kum pulan regist er sangat kecil dan ham per sem ua regist er m em punyai kegunaan yang khusus yang penggunaannya dibat asi sebagaim ana suat u variable , t et api regist er m asih m erupakan t em pat yang baik unt uk m enyim pan

Walaupun m ungkin m enyim pan dat a apapun dalam segm en regist er, t api hal ini t idaklah dianj urkan. Segm en regist er m em punyai t uj uan yang sangat khusus, yait u m enunj uk blok m em ori yang dapat diakses. Segm ent regist er bekerj a bersam a dengan general purpose regist er unt uk m engakses set iap nilai m em ory. Cont ohnya, j ika kit a akan m engakses m em ori pada physical address 1 2 3 4 5 h ( hexadecim al) , kit a perlu m engeset D S = 1 2 3 0 h dan SI = 0 0 4 5 h. I ni bagus karena dengan cara ini kit a dapat m engakses lebih banyak m em ory daripada dengan regist er t unggal yang t erbat as pada nilai 16 bit . CPU m em buat kalkulasi dari physical address dengan m engalikan segm ent regist er dengan 10h dan m enam bahkan general purpose regist er ( 1230h * 10h + 45h = 12345h) :

(13)

13 suat u effect ive address! . Dem ikian j uga , walaupun BX dapat

dibent uk dari effect ive address, BH and BL t idak dapat

m elakukannya.

SPECI AL PURPOSE REGI STERS

I P - t he inst ruct ion point er.

fla gs r e gist e r – m enent ukan keadaan sekarang ( current st at e) dari m icroprocessor.

(14)

14 lokasi m em ori yang berbeda. Kom binasi ini didukung dengan m ode pengalam at an ( addressing m odes) sebagai berikut :

Penggant ian dapat m enj adi nilai yang t erdekat at au offset dari variable at au keduanya. Jika ada beberapa nilai, assem bler m engevaluasi sem ua nilai t ersebut dan m engkalkulasi sebagai nilai t erdekat t unggal. Pengant ian di dalam at au diluar sym bol [ ] , m aka assem bler m eng- generat es kode m esin yang sam a

dengan kedua cara t ersebut . Penggant ian nilai sign e d

bert anda) , dapat dilakukan baik pada t anda posit ive at au negat ive. Um um nya com piler m em perhat ikan perbedaan ant ara

d8 and d1 6, dan m en- generat e kode m esin yang diperlukan.

cont oh, diasum sikan D S = 1 0 0, BX = 3 0, SI = 7 0.

m ode pengalam at annya adalah : [ BX + SI ] + 2 5

(15)

15 Kit a dapat m em bent uk sem ua kom binasi yang valid dengan m engam bil hanya sat u it em t iap kolom at au m elew at i kolom t ersebut dengan t idak m engam bil darinya . sepert i yang kit a lihat BX dan BP t idak pernah bersam a- sam ar. SI dan D I dem ikian j uga, cont oh disini m erupakan m ode pengalam at an yang valid : [ BX + 5 ] , [ BX + SI ] , [ D I + BX- 4 ], nilai dalam segm ent regist er ( CS, DS, SS, ES) disebut se gm e n t, dan nilai dalam purpose regist er ( BX, SI , DI , BP) disebut offse t. Saat DS berisi nilai 1 2 3 4 h dan SI berisi nilai 7 8 9 0 h hal t erbut dapat di t ulis sebagai 1 2 3 4 :7 8 9 0. Physical address akan m enj adi 1234h * 10h + 7890h = 19BD0h. Jika nol dit am bahkan ke angka decim al lalu di kalikan 10, m aka 1 0 h = 1 6, j asi j ika nol dit em bahkan pada nilai hexadecim al, hal t ersebut dikalikan dengan 16, cont oh:

7h = 7

70h = 7* 16= 112

Hal t ersebut dapat dikat akan bahwa dalam pandangan com piler t erhadap t ipe dat a, prefix yang digunakan adalah :

byt e pt r – unt uk byt e.

w or d pt r – unt uk w ord ( 2 byt es) . cont oh:

byte ptr [BX] ; mengakses byte . atau

word ptr [BX] ; mengakses word .

assem bler m endukung prefix sepert i dibawah :

b. - unt uk by t e pt r

w . - unt uk w or d pt r

(16)

16

I N STRUKSI

M OV

• m engut ip ope r a n k e du a ( source) ke ope r a n d pe r t a m a ( dest inat ion) .

• Operan source dapat suat u nilai t erdekat , general- purpose regist er at au lokasi m em ory.

• Regist er dest inat ion dapat suat u general- purpose regist er, at au lokasi m em ory.

• kedua operand harus m em punyai ukuran yang sam a, baik

byt e at au word.

t hese t ypes of operands are support ed:

MOV REG, memory MOV memory, REG MOV REG, REG MOV memory, immediate MOV REG, immediate

REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI , SI , BP, SP.

m e m or y: [ BX] , [ BX+ SI + 7] , variable, et c...

im m e dia t e: 5, - 24, 3Fh, 10001101b, et c...

for segm ent regist ers only t hese t ypes of M OV are suppor t ed:

MOV SREG, memory MOV memory, SREG MOV REG, SREG MOV SREG, REG

SREG: DS, ES, SS, and only as second operand: CS.

REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI , SI , BP, SP.

m e m or y: [ BX] , [ BX+ SI + 7] , variable, et c...

(17)

17 Cont oh program m endem onst rasikan penggunaan inst r uksi M OV:

ORG 100h ; directive yg diperlukan utk 1 segment .com program.

MOVAX, 0B800h ; set AX ke nilai hex dr B800h.

MOVDS, AX ; copy nilai AX ke DS.

MOVCL, 'A' ; set CL ke kode ASCII 'A', yaitu 41h.

MOVCH, 1101_1111b ; set CH ke nilai binary.

MOVBX, 15Eh ; set BX ke 15Eh.

MOV[BX], CX ; copy isi CX ke memory pada alamat B800:015E

RET ; kembali ke os.

Kit a dapat copy & pa st e program di at as ke edit or em u8086 , dan t ekan t om bol [Com pile a n d Em u la t e] ( at au F5) . Window em ulat or akan t erbuka dengan program yang di loaded, lalu click t om bol [Sin gle St e p] dan am at i nilai regist er. Tanda ";" adalah digunakan unt uk m em buat kom ent ar program dan akan diabaikan oleh com piler . Keluaran dari program diat as seharusnya sebert i di bawah ini:

Sebenarnya program diat as m enulis secara langsung ke video

m em ory, j adi kit a dapat m elihat bahwa M OV m erupakan

(18)

18 Ba gia n 3

VARI ABLES

Variabel adalah suat u lokasi di m em ori. Bagi program m er akan lebih m udah m em iliki suat u nilai yang disim pan pada variable dengan nam a "v a r 1" dari pada pada alam at 5A73: 235B, khususnya kalau kit a punya 10 at au lebih variabel.

Dalam em u8086, com piler m endukung dua t ipe variabel: BYTE

dan W ORD.

Synt ax deklarasi variabel:

nam e D B value

nam e D W value

D B – kepanj angan dar i Define Byt e. D W – kepanj angan dar i Define Word.

nam e – kom binasi dari alphanum erik, diawali dengan hur uf. Mungkin j uga t idak bernam a ( m aka hanya punya alam at saj a) .

value – berupa nilai num eric yang didukung oleh syst em nilai( hexadecim al, binary, at au decim al) , at au sim bol "?" unt uk variable yang t idak

diinisialisasikan.

Sepert i pada inst ruksi M OV yait u digunaka unt uk m engut ip nilai dari source ke dest inat ion. Cont oh lain inst ruksi M OV :

ORG 100h

MOV AL, var1 MOV BX, var2

RET ; program berhenti.

(19)

19

Tulis kode diat as pada edit or em u8086 dan t ekan F5 unt uk

com pile dan m em uat kan ke em ulat or, hasilnya seharusnya :

Sepert i yang t erlihat sepert i cont oh ini, kecuali variable digant i dengan lokasi act ual di m em ori. Saat com piler m em buat kode m esin, hal t ersebut secara ot om at is m enggant i sem ua nam a

variable dengan offse t s. Default nua segm en di loaded di

regist er D S ( j ika file .COM nilai yang di loaded pada regist er D S di set sam a dengan nilai pada regist er CS - code segm ent ) . Dalam baris pert am a pada m em ori adalah sebuah offse t, baris kedua adalah suat u nilai he x a de cim a l , baris ket iga adalah nilai de cim a l , dan yang t erakhir adalah nilai karakt er ASCI I . Kom piler t idan case sensit ive, j adi "V AR1" and "v a r 1" m engacu pada variable yang sam a. Offset dari V AR1 adalah 0 1 0 8 h, dan alam at lengkapnya adalah 0 B5 6 :0 1 0 8. Offset dari va r 2 adalah 0 1 0 9 h, alam at lengkapnya adalah 0 B5 6 :0 1 0 9, Variabel ini adalah bert ipe W ORD sehingga perlu 2 BYTES. Hal t ersebut diasum sikan bahw a low byt e ( byt e rendah) disim pan pada

alam at yang rendah ( low er address) , sehingga 3 4 h berada

(20)

20 seharusnya sam a dengan kode disassem bled,dan berfungsi sam a! Sepert i yang kit a duga, com piler hanya m engkonversi source code ke suat u byt e, ini disebut m a ch in e code, processor

hanya m engert i m a chin e code dan m enj alankannya. ORG

1 0 0 h adalah direct ive com piler ( yang m engat akan pada com piler bagaim ana m enangani source code) . Direct ive ini sangat pent ing saat kit a bekerj a dengan variable . Direkt ive t ersebut m engat akan pada com piler bahwa file execut able akan di m uat pada offse t 100h ( 256 byt es) , j adi com piler harus m enghit ung alam at yang benar unt uk sem ua variable ket ika dia m enggant i nam a variable dengan nam a offse t - nya. Direct ives

t idak pernah dikonversi ke m a chin e code .

Mengapa file execut able di loaded pada offse t 1 0 0 h? OS

m enj aga beberapa dat a t ent ang program dalam 256 byt es pert am a dari CS ( code segm ent ) , sepert i param et er com m and line dan sebagainya. Walaupun benar bagi hanya file .COM, file EX E di loaded pada offset 0 0 0 0, dan um um nya m enggunakan segm en khusus unt uk variable . Kit a bicarakan file exe t idak disini.

Ar r a y s

(21)

21 a DB 48h, 65h, 6Ch, 6Ch, 6Fh, 00h

b DB 'Hello', 0

b adalah benar- benar suat u kopi dari larik a, Ket ika com piler m elihat di dalam t anda pet ik, secara ot om at is akan m engkonversinya ke dalam byt e . Bagan dibawah ini m enunj ukan bagian m em ori dim ana larik dideklarasikan :

Kit a dapat m engakses nilai t iap elem en dalam array dengan m enggunakan kurung kot ak, cont ohnya :

MOV AL, a[3]

Kit a j uga dapat m enggunakan m em ory index regist er BX , SI , D I , BP, cont ohnya:

MOV SI, 3

MOV AL, a[SI]

j ika kit a perlu m endeklarasikan array yang besar dapat kit a gunakan operat or D U P. Synt ax D U P:

number DUP ( value(s) )

num ber – banyaknya duplikasi yang dibuat ( nilai konst an) .

value – ekspresi yang akan diduplikasi oleh DUP .

cont oh: c DB 5 DUP(9)

at au:

c DB 9, 9, 9, 9, 9

cont oh lainnya:

(22)

22 at au :

d DB 1, 2, 1, 2, 1, 2, 1, 2, 1, 2

t ent u saj a , kit a dapat m engunakan D W sebagai gant i dari D B j ika diperlukan unt uk m enj aga nilai yang lebih besar dari 255,

at au lebih kecil dari - 128. D W t idak dapat unt uk

m endeklarasikan st rings.

M e n da pa t k a n Ala m a t Su a t u V a r ia be l

Ada suat u inst ruksi yait u LEA ( Load Effect ive Address) m erupakan alt ernat ive dari operat or OFFSET . Baik OFFSET dan LEA dapat digunakan unt uk m endapat kan offset address dari

suat u variabel . LEA m alah lebih powerful karena dia j uga

m endapat kan alam at dari index variabelnya. Mendapat kan

(23)

23 MOV BX, OFFSET VAR1 ; ambil almt

; VAR1 di BX.

MOV BYTE PTR [BX], 44h ; modifikasi ;isi VAR1.

MOV AL, VAR1 ; check nilai ;VAR1 dg memindahkannya ke AL. RET

VAR1 DB 22h END

Kedua cont oh diat as m em punyai fungsi yang sam a. perhat ikan:

LEA BX, VAR1

MOV BX, OFFSET VAR1

akan dikom pile ke dalam kode m esin yang sam a dengan :

MOV BX, num

num adalah nilai 16 bit dari offset variable.

Hanya regist er ini yang dapat digunakan dalam kurung kot ak ( sepert i point er m em ory ) : BX , SI , D I , BP!

Con st a n t ( Kon st a nt a )

Konst an ham per sam a dengan variable t et api keberadaanya hanya sam pai program di kom pilasi ( assem bled) . Set elah definisi sebuah konst an, nilai yang diassign t idak dapat dirubah. Unt uk m endeklarasikannya dengan direct ive EQU:

name EQU < any expression >

cont oh:

k EQU 5

MOV AX, k

dengan cara lain:

(24)

24 Kit a dapat m elihat variable sem ent ara program kit a sedang dieksekusi dengan m em ilih "V a r ia ble s" dari m enu "V ie w" di em u8086.

unt uk m elihat array kit a harus klik pada variable dan m engeset propert y Ele m e nt s kepada ukuran array- nya . Dalam bahasa assem bly t idak ada bat asan t ipe dat anya, j adi t iap variable dapat direpresent asikan sebagai suat u array . Variabel dapat dilihat dalam syst em nilai :

H EX - hexadecim al ( base 16) . • BI N - binary ( base 2) .

OCT - oct al ( base 8) .

SI GN ED - signed decim al ( base 10) . • UN SI GN ED - unsigned decim al ( base 10) .

CH AR - ASCI I char code ( 256 sym bol, beberapa t idak kelihat an) .

Kit a dapat m engedit nilai variable saat program kit a sedang berj alan , double click pada variable t ersbut , at au pilih dan klik

t om bol Edit . Adalah hal yang m ungkin unt uk m em asukkan

angka pada set iap syst em , nilai hexadecim alharus m em punyai suffix "h" , binary "b" , oct al "o" , nilai decim al t idak m em erlukan suffix. St ring dapat di m asukkan dengan cara sebagai berikut : 'h e llo w or ld', 0 ( st ring ini diakhiri dengan nol) . Arrays dapat dim asukkan dengan :

1 , 2 , 3 , 4 , 5

( array dapat berupa byt es at au w ord, t ergant ung dari BYTE at au W ORD yang dipilih saat m engedit variable ) .

(25)

25 BAGI AN 4

I N TERRU PTS

I nt errupt dapat dipandang sebagai sej um lah fungsi. Fungsi- fungsi ini m em udahkan pem rogram an, bahkan m enulis kode unt uk m encet ak karakt er, kit a dapat dengan m udah m em anggil int errupt dan fungsi t ersebut akan m elakukannya unt uk kit a. Ada j uga fungsi int errupt yang berkerj a dengan disk drive dan hardware lainnya. Pada saat kit a m em anggil suat u fungsi hal it u dinam akan soft w a r e in t e r r u pt s. I nt errupt j uga um um nya kit a m enggunakan angka hexadecim al. Anda m ungkin berpikir bahwa hanya ada 256 funct ion, t api sebenarnya kurang t epat . Tiap int errupt m asih punya sub-funct ion. Unt uk m enent uka suat u sub- sub-funct ion regist er AH harus diset sebelum pem anggilan int errupt . Tiap int errupt m em punyai hingga 256 sub- funct ion ( j adi kit a dapat kan 256 * 256 = 65536 funct ion) . Secara um um regist er AH yang digunakan, t et api suat u saat regist er lain j uga dipakai. Pada um um nya regist er lain digunakan unt uk m engirim param et er dan dat a ke sub- funct ion. Cont oh berikut ini m enggunakan I N T 1 0 h sub- funct ion 0 Eh unt uk m encet ak pesan " Hello! ". Fungsi ini m enam pilkan karakt er di layar, keunt unganThis funct ions displays a charact er on t he screen.

ORG 100h ; directive utk membuat file .com. ; sub-function yang dipakai

(26)

26 MOV AL, 'l' ; ASCII code: 108

INT 10h ; cetak!

MOV AL, 'l' ; ASCII code: 108 INT 10h ; cetak!

MOV AL, 'o' ; ASCII code: 111 INT 10h ; cetak!

MOV AL, '!' ; ASCII code: 33 INT 10h ; cetak!

RET ; returns ke OS.

(27)

27 BAGI AN 5

PUSTAKA FUN SI UM UM ( EM U8 0 8 6 .I N C )

Unt uk m em buat pem rogram lebih m udah, ada beberapa fungsi um um yang dapat disert akan dalam program kit a. Unt uk m em buat program kit a m enggunakan fungsi yang didefinisikan

di file lainnya kit a harus m enggunakan direct ive I N CLUD E

diikut i dengan nam a file yang diacu. Kom piler secara ot om at is m encari file t ersebut di folder yang sam a dim ana file sum ber dilet akkan, dan j ika t idak dit em ukan m aka com piler akan m encari di forlder I n c. Saat ini anda m ungkin belum faham benar isi dari e m u8 0 8 6 .in c ( t erlet ak di folder I n c) , t api t idak m asalah, karena yang kit a but uhkan adalah apa yang dapat dikerj akannya. Unt uk m em akai fungsi dalam e m u 8 0 8 6 .inc kit a harus m em iliki baris dalam kode didalam source sepert i ini :

include 'emu8086.inc'

e m u8 0 8 6 .inc m endefinisikan banyak m akro sebagai berikut :

PUTC ch a r - m acro dengan 1 param et e, m encet ak sebuah karakt er ASCI I pada posisi kursor sekarang.

GOTOX Y col, r ow - m acro dengan 2 param et ers, "carriage ret urn" di akhir st ring.

(28)

28

m enggant ikannya dengan nam a m akro dalam kode yang sebenarnya. Um um nya m akro relat ive bagian yang kecil dalam kode, keseringan m enggunakan m akro m enyebabkan pengeksekusian kit a m enj adi sem akin besar ( penggunaan procedure lebih baik unt uk opt im asi ukuran ) .

e m u8 0 8 6 .inc j uga m endefinisikan procedure sebagai berikut :

PRI N T_ STRI N G – procedure ut nuk m encet ak null st ring harus di definisikan set elah inst ruksi CALL, cont oh :

CALL PTHIS db 'Hello World!', 0

Unt uk m enggunakannya deklarasikan: D EFI N E_ PTH I S

sebelum direkt ive EN D.

CLEAR_ SCREEN – procesedur m em bersihkan layar,

(29)

29 dan m engeset posisi kursor di at asnya. Cara

pem akaiannya: D EFI N E_ CLEAR_ SCREEN sebelum

Unt uk m enggunakan sem ua prosedur diat as kit a harus m endeklarasikan fungsi di bawah file sum ber ( sebelum direkt ive

EN D) , dan kem udian m enggunakan inst ruksi CALL diikut i

dengan nam a prosedurnya, cont ohnya :

(30)

30 Pert am a- t am a com piler m em proses deklarasi ( ada m akro biasa yang di ekspan m enj adi prosedur) . Saat com piler m enerim a inst ruksi CALL dia m enggant i nam a prosedur dengan alam at dari

kode dim ana prosedur dideklarasikan. Saat inst ruksi CALL

(31)

31 BAGI AN 6

I N STRU KSU LOGI K D AN ARI TM ETI K

Set iap inst ruksi Arit hm et ic dan logika berpengaruh pada regist er st at us pada prosesor ( at au Fla g)

Dalam regist er 16 bit , t iap bit disebut fla g dan dapat bernilai 1 at au 0.

Ca r r y Fla g ( CF) - flag ini diset ke 1 j ika ada u n sign e d

ov e r flow. Cont oh saat kit a m enam bah byt e 2 5 5 + 1 ( hasilnya

t idak di j angkauan 0...255) . Saat t idak ada ove r f low flag ini diset ke 0.

Ze r o Fla g ( ZF) – diset ke 1 j ika hasilnya ze r o. Unt uk hasil

selain zero, flag diset ke 0.

Sign Fla g ( SF) – di set ke 1 j ika hasilnya n e ga t iv e. Saat

hasilnya posit iv e diset ke 0. Sebenarnya flag ini m engam bil nilai dari m sb ( m ost significant bit ) .

Ove r flow Fla g ( OF) – di set ke 1 saat ada sign e d ov e r f low.

cont ohnya, j ika kit a m enam bah byt e 1 0 0 + 5 0 ( hasilnya diluar - 128...127) .

Pa r it y Fla g ( PF) – di set ke 1 j ika ada angka ge n a p dari sat u

bit dalam hasilnya , dan di set ke 0 j ika ada angka ga n j il. Jika hasilnya berupa w ord hanya 8 low bit yang dianalisa.

Au x ilia r y Fla g ( AF) – di set ke 1 j ika ada u n sign e d ov e r flow

unt uk low nibble ( 4 bit ) .

I n t e r r u pt e n a ble Fla g ( I F) – Jika flag diset 1 CPU

m endapt kan int errupt dari device ekst ernal.

D ir e ct ion Fla g ( D F) – Flag ini digunakan oleh beber apa

(32)

32 Ada 3 k e lom pok in st r u k si.

Ke lom pok pe r t a m a : AD D , SU B,CM P, AN D , TEST, OR, X OR

Tipe operand yang m endukungnya :

REG, memory

Set elah oper asi di ant ara oper an, hasilnya selalu disim pan di operan pert am a . I nst ruksi CM P dan TEST berakibat hanya pada flag dan t idak m enyim pan hasilnya ( inst ruksi ini digunakan ut nuk m em buat keput usan selam a eksekusi progr am ) .

I nst ruksi- inst ruksi yang berpengaruh hanya pada flag : CF, ZF, SF, OF, PF, AF.

(33)

33 1 OR 1 = 1

1 OR 0 = 1 0 OR 1 = 1 0 OR 0 = 0

Kit a dapat kan 1 hanya j ika sa la h sa t u oper and bit bernilai 1.

XOR - Logical XOR ( exclusive OR) ant ara sem ua bit dari dua operand. At urannya:

1 XOR 1 = 0 1 XOR 0 = 1 0 XOR 1 = 1 0 XOR 0 = 0

Kit a dapat kan 1 hanya j ika kedua operand bit - nya ber beda.

Ke lom pok Ke du a : M U L, I M UL, D I V, I D I V

Tipe operand yang m endukungnya :

REG memory

REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI , SI , BP, SP.

m e m or y: [ BX] , [ BX+ SI + 7] , variable, et c...

inst ruksi M UL dan I M UL m em pengaruhi hanya flag: CF, OF

Jika hasilnya diat as ukruan operand flag di set ke 1, j ika t idak 0.

Unt uk flag D I V dan I D I V t idak didefinisikan.

M U L – Perkalian Unsigned:

(34)

34 j ika operand- nya w or d:

(DX AX) = AX * operand.

I M UL - Perkalian Signed:

j ia operand- nya by t e: AX = AL * operand.

j ika operand- nya w or d: (DX AX) = AX * operand.

D I V – Pem bagian Unsigned:

Jika oper and- nya by t e: AL = AX / operand

AH = remainder (modulus). . j ika operand- nya w or d: AX = (DX AX) / operand DX = remainder (modulus). .

I D I V – Pem bagian Signed:

j ika operand- nya by t e: AL = AX / operand

AH = remainder (modulus). . j ika operand- nya w or d: AX = (DX AX) / operand DX = remainder (modulus). .

Ke lom pok k e t iga : I N C, D EC, N OT, N EG

Tipe Operan yang m endukung:

REG memory

REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI , SI , BP, SP.

m e m or y: [ BX] , [ BX+ SI + 7] , variable, et c...

in st r u k si I N C, D EC m em pengaruhi hanya flag:

(35)

35 N OT t idak m em pengaruhi flag apapun!

N EG hanya flag:

CF, ZF, SF, OF, PF, AF.

N OT – cadangan unt uk t iap operand bit .

N EG – m em buat operang m enj adi negat if ( t wo's com plem ent ) . Sebenarnya dicadangkan unt uk t iap bit operand dan dit am bahkan 1. cont oh 5 m enj adi - 5, dan - 2 m enj adi 2.

(36)

36 BAGI AN 7

ALU R KON TROL PROGRAM

Pengendalian alur program m erupakan bagian yang pent ing, Disini progr am kit a dapat m enent ukan keput usan berdasarkan kondisi.

u n con dit ion a l j u m p

I nst ruksi dasarnya adalah bahwa m engendalikan t ransfer dari sat u t it ik ke t it ik painya didalam program yait u inst ruksi JM P, sint aknya :

JMP label

deklarasikan label dalam program , t ulis nam anya dan t am bahkan ":" set elah nam a label, label berupa kom pinasi karakt er alphanum erik yang t idak dim ulai dengan angka, cont oh:

label1: label2: a:

(37)

37 stop:

ret ; return to operating system.

Tent u saj a ada cara m udah unt uk m engkalkulasi dua angka, t et api diat as m erupakan cont oh yang baik j uga m engenai penggunaan inst ruksi JM P . Sepert i t erlihat dari cont oh diat as JM P dapat m ent ransfer kendali baik secara forw ard dan backw ard. Dia dapat m elom pat kem anapun dalam code segm ent ( 65,535 byt es) .

Sh or t Con dit ion a l Ju m ps

Tidak sepert i inst ruksi JM P, inst ruksi ini m engerj akan uncondit ional j um p, dim ana ada inst ruksi yang m enger j akan suat u condit ional j um ps ( j um p hanya j ika kondisinya t erpenuhi ) . I nst ruksi ini di bagi m enj adi t iga kelom pok , Pert am a hanya m enget est flag t unggal , Kedua m em bandingkan angka sebagai signed, dan Ket iga m em bandingkan angka sebagai unsigned.

I n st r u k si Ju m p da la m m e n g e - t e st f la g t u n gga l

Jump if Not Carry (Not Below,

(38)

38

JNS Jump if Not Sign. SF = 0 JS

JNO Jump if Not Overflow. OF = 0 JO

JPO, JNP Jump if Parity Odd (No Parity). PF = 0 JPE, JP

Sepert i t erlihat ada inst ruksi yang m engerj akan hal yang sam a, perlu diingat bahw a j ika kit a m engkom pile inst ruksi JE k it a a k a n

m e n da p a t k a n disassem bled sebagai: JZ, JC adalah assem bled

yang sam a dengan JB dan sebagainya, Perbedaan nam a digunakan unt uk m em buat program lebih m udah dim engert i, lebih m udah m eng- kode- kan dan yang paling pent ing adalah m udah unt uk diingat . Set iap offset yang di- dissem bler t idak m em punyai pet unj uk m engenai inst ruksi aslinya sepert i apa, oleh karena it ulah digunakan nam a yang um um . Jika kit a m eng- em ulat e kode ini kit a akan m elihat seluruh inst ruksi di- assem bled kedalam JN B, operat ional code ( opcode) unt uk inst ruksi ini adalah 7 3 h inst ruksi ini m em punyai panj ang t et ap dua byt e , byt e kedua m erupakan angka dari byt e t ersebut dit am bahkan ke regist er I P j ika kondisinya t erpenuhi. Karena inst ruksi ini hanya m em punyai 1 byt e unt uk m enyim pan offset yang t er bat as unt uk m engirim kan cont rol ke - 128 byt es ke belakang at au 127 byt es ke depan, nilai ini selalu signed.

jnc a jnb a jae a

(39)

39

(40)

40 JA , JNBE

Jump if Above (>).

Jump if Not Below or Equal (not <=).

Jump if Not Above or Equal (not >=).

(41)

41 org 100h

mov al, 25 ; set al to 25.

mov bl, 10 ; set bl to 10.

cmp al, bl ; compare al - bl.

je equal ; jump if al = bl (zf = 1).

putc 'n' ; if it gets here, then al <> bl,

jmp stop ; so print 'n', and jump to stop.

equal: ; if gets here,

putc 'y' ; then al = bl, so print 'y'.

stop:

ret ; gets here no matter what.

Cobalah cont oh diat as dengan angka yang lain unt uk AL dan BL, buka flag dengan m eng- klik t om bol flag , gunakan single st ep dan lihat yang t erj adi. Kit a j uga dapat m em akai F5 unt uk m e- recom pile dan reload program ke em ulat or.

loops

instruction operation and jump condition opposite instruction

LOOP decrease cx, jump to label if cx not zero. DEC CX and JCXZ

LOOPE decrease cx, jump to label if cx not zero and

equal (zf = 1). LOOPNE

LOOPNE decrease cx, jump to label if cx not zero and

not equal (zf = 0). LOOPE

LOOPNZ decrease cx, jump to label if cx not zero and zf

= 0. LOOPZ

LOOPZ decrease cx, jump to label if cx not zero and zf

(42)

42 JCXZ jump to label if cx is zero. OR CX, CX and

JNZ

(43)

43

o Am bil insruksi opposit e condit ional j um p dari t able diat as,

lalu j um p ke label_x.

o Guanakan inst ruksi JM P unt uk m elom pat ke lokasi yang

diinginkan.

o buat label_x : set elah inst ruksi JM P.

Cont oh :

include"emu8086.inc"

org 100h

mov al, 5 mov bl, 5

cmp al, bl ; bandingkan al - bl.

; je equal ; hanya ada 1 byte

jne not_equal ; jump jika al <> bl (zf = 0).

jmp equal not_equal:

add bl, al sub al, 10 xor al, bl

jmp skip_data

db 256 dup(0) ; 256 bytes

skip_data:

putc 'n' ; jika disini ,maka al <> bl,

jmp stop ; cetak 'n', dan jump ke stop.

equal: ; jika disini,

putc 'y' ; maka al = bl, jadi cetak 'y'.

stop:

ret

(44)

44 t idak com piler m enghit ung inst ruksi dim ana j um p secar a langsung diberikan ke offset , cont oh :

org 100h

; unconditional jump forward: ; skip over next 3 bytes + itself

; the machine code of short jmp instruction takes 2 bytes.

jmp $3+2 a db 3 ; 1 byte.

b db 4 ; 1 byte.

c db 4 ; 1 byte.

; conditional jump back 5 bytes:

movbl,9

decbl ; 2 bytes.

cmpbl, 0 ; 3 bytes.

jne $-5 ; jump 5 bytes back

ret

(45)

45 BAGI AN 8

PROSED URE

Procedure m erupakan bagian dari kode yang dapat dipanggil dari program dalam rangka t ugas t ert ent u. Prosedur m em buat program lebih t erst rukt ur dan m udah dim engert i. Um um nya prosedur m engem balikan t it ik dim ana dia dipanggil, sint aknya :

name PROC

RET m enyat akan kem bali ke OS set elah pem anggilan prosedur. PROC dan EN D P m erupakan direkt iv com piler ,j adi t idak di-assem bled ke dalam kode m esin. Kom piler hanya m engingat

alam at dari prosedur.

I nst ruksi CALL digunakan unt uk m em anggil prosedur.

(46)

46 Ada beberapa cara unt uk m engirim param et er ke prosedur, yang paling m udah adalah m engirim kan param et er m enggunakan regist er, disini cont oh lainnya dari prosedur yang m enerim a dua param et er dalam regist er AL dan BL , kalikan kedua param et er ; prosedur ini mencetak string,stringy harus null

(47)

47 next_char:

CMP b.[SI], 0 ; check jika nol ke stop JE stop ;

MOV AL, [SI] ; selanjutnya ambil karakter ASCII .

MOV AH, 0Eh ; teletype nomer function.

INT 10h ; gunakan interrupt utk mencetak karakter di AL.

ADD SI, 1 ; advance index dari string array.

JMP next_char ; kembali dan cetak karakter lainnya.

stop:

RET ; kembali ke pemangil proc. print_me ENDP

;

==========================================================

msg DB 'Hello World!', 0 ; null terminated string.

END

prefix "b." sebelum [ SI ] berart i bahwa kit a perlu

(48)

48 BAGI AN 9

STACK

St ack adalah suat u area di m em ori yang m enyim pan dat a

sem ent ara. St ack digunakan dengan inst ruksi CALL unt uk

m enyim pan alam at yang dikem balikan pada prosedur ,inst ruksi

RET m engam bil nilai ini dari st ack dan m engem balikannya ke

(49)

49 Cat at an:

PUSH dan POP bekerj a dengan nilai 16 bit saj a !

PUSH im m e dia t e bekerj a hanya pada CPU 80186 dan sesudahnya!

St ack m enggunakan algorit m a LI FO ( Last I n First Out ) , art inya j ika kit a push nilai sat u per sat u ke dalam st ack : 1 , 2 , 3 , 4 , 5

nilai pert am a yang dapat kit a pop adalah 5, lalu 4, 3, 2, dan t erakhir 1.

Jum lah yang di PUSH dan di POP ha r u s sa m a, j ika t idak st ack akan corrupt ed dan t idak dapat kem bali ke OS . Kit a gunakan inst ruksi RET unt uk kem bali ke OS, j adi j ika program m ulai ada alam at yang dikem balikan di st ack ( um um nya 0000h) . I nst ruksi

PUSH dan POP berguna karena kit a t idak m em iliki cukup

regist er unt uk dioperasikan, t riknya adalah :

• Sim pan nilai original dari regist er dalam st ack ( dg PUSH) .

• Pakai regist er unt uk t uj uan apapun.

(50)

50 cont oh:

ORG 100h

MOV AX, 1234h

PUSH AX ; simpan nilai AX di stack.

MOV AX, 5678h ; modify nilai AX .

POP AX ; kembalikan nilai original AX

RET

END

Cont oh lainnya kegunaan st ack dalam pert ukaran nilai :

ORG 100h

MOV AX, 1212h ; simpan 1212h di AX. MOV BX, 3434h ; simpan 3434h di BX

PUSH AX ; simpan nilai AX di stack. PUSH BX ; simpan nilai BX di stack.

POP AX ; set AX ke nilai original BX. POP BX ; BX ke nilai original AX RET

END

Pert ukaran t erj adi karena st ak m em akai algorit m a LI FO ( Last I n First Out ) , j adi saat kit a push 1 2 1 2 h dan kem udian 3 4 3 4 h,

pada saat pop kit a m endapat kan yang pert am a 3 4 3 4 h

kem udian 1 2 1 2 h. Area m em ori st ack di set oleh regist er SS ( St ack Segm ent ) , dan regist er SP ( St ack Point er) . Um um nya OS m engeset nilai regist er ini saat program m ulai .

"PU SH so u r ce" inst ruksi ini m engerj akan:

• Kurangi 2 dari regist er SP .

(51)

51 "POP d e st in a t io n" inst ruksi ini m engerj akan :

• Tulis nilai alam at SS:SP ke d e st in a t ion. • t am bahkan 2 ke regist er SP.

(52)

52 BAGI AN 1 0

M AKRO

Macros ham pir m irip prosedur, t et api set idaknya dia hanya ada hingga kode dikom pilasi, set elah kom pilasi dialkukan sem ua m akro akan dig ant i dengan inst ruksi m esin . Jika kit a m endeklarasikan m akro dan t idak pernah m enggunakannya dalam kode, com piler akan m engabaikannya. e m u8 0 8 6 .in c m erupakan cont oh bagaim ana m akro dapat dipakai, file ini berisi beberapa m akro unt uk m em perm udah pengkodean kit a.

Macro definit ion:

name MACRO [parameters,...]

<instructions>

ENDM

Tidak sepert i prosedur m akro harus didefinisikan diat as kode yang akan m em akainya, cont oh :

MyMacro MACRO p1, p2, p3

MOV AX, p1 MOV BX, p2 MOV CX, p3

ENDM

ORG 100h

MyMacro 1, 2, 3

MyMacro 4, 5, DX

RET

Kode diat as diperluas m enj adi:

(53)

53 MOV AX, 00004h

MOV BX, 00005h MOV CX, DX

Pebedaan m a cr os dan pr oce du r e s:

• prosedur dipakai dengan inst ruksi CALL, cont oh:

CALL MyProc

• Makro hanya m enuliskan nam anya saj a, cont oh:

MyMacro

• Prosedure t erlet ak pada alam at yang spesifik di m em ori, dan j ika kit a m enggunakan procedur e yang sam a sebanyak 100 kali, CPU hanya m ent ransfer cont rol ke bagian m em ori. Kont rol akan dikem balikan dengan inst ruksi RET. St a ck yang digunakan unt uk m enyim pan alam at pengem balian. I nst ruksi CALL m em erlukan set idaknya 3 byt es, j adi ukuran out put execut able file- nya t idak besar ,t idak m asalah seberapa banyak pem anggilan pr osedur dilakukan.

• Macro akan m enam bah secara langsung dalam kode program . Jadi j ika k it a m em akai 100 kali m akrokom piler akan m enam bah sebanyak 100 kali pada out put exe filnya set iap kali m akro t ersebut di pakai.

• St ack at au general pur pose regist er har us digunakan unt uk m engirim param et er dalam prosedur.

• Unt uk m engirim kan param et er ke m akro kit a dapat m enget ikkannya set elah nam a m akronya, cont oh:

MyMacro 1, 2, 3

• Unt uk m enandai akhir m akro gunakan direkt iv EN D M sudah cukup. • Unt uk m em andai akhir procedure harus m enget ikan nam a prosedur

sebelum dir ekt ive EN D P.

Makro akan diperluas secara langsug dalam kode, sehingga j ika ada label didalam definisi m akro kit a akan

(54)

54 MyMacro2 MACRO

LOCAL label1, label2

CMP AX, 2

JE label1

CMP AX, 3

JE label2

label1: INC AX label2:

ADD AX, 2 ENDM

ORG 100h

MyMacro2

MyMacro2

RET

(55)

55 BAGI AN 1 1

M EM BUAT SI STEM OPERASI SEN D I RI

Biasanya, saat kom put er dihidupkan akan m encoba m e- load 512- byt e sect or pert am a ( Cylinder 0, Head 0, Sect or 1) dari disk drive, m isal A: ke lokasi m em ori 0 0 0 0 h:7 C0 0 h dan m em berikan kont rolnya. Jika gagal BI OS m encoba m enggunakan MBR dari hard drive prim er. Dalam bagian ini akan m encoba m engcover boot ing dari sebuah floppy drive,dengan prinsip yang sam a dapat j uga dilakukan di harddisk. Tet api m enggunakan floppy drive m em iliki beberapa keunt ungan:

• OS kit a t et ap ut uh ( windows, dos, linux, unix, be- os...) .

• udah dan am an m em odifikasi boot record padaf floppy

disk.

cont oh floppy disk boot program :

; directive utk membuat BOOT file: #make_boot#

; Boot record di-loaded di 0000:7C00,

(56)

56 ; simpan nilai magic di 0040h:0072h:

; 0000h - cold boot.

msg DB 'Hello ini Boot Program saya yang pertama!' DB new_line, 'Tekan sembarang tombol utk reboot', 0

(57)

57 kit a dapat m enggunakan ut ilit y ini unt uk m enulis file .bin ke virt ual floppy disk ( "FLOPPY_ 0" file) , dapat j uga m enu "w r it e 5 1 2 by t e s a t 7 c0 0 h t o boot se ct or" . bagaim anapun j uga, kit a perlu ingat bahwa file .bin yang didisain unt uk m enj adi boot record harus selalu di t ulis ke cylinder: 0, head: 0, sect or: 1

Boot Sect or Locat ion: Cylinder: 0

Head: 0 Sector: 1

Unt uk m enulis file .bin kef loopy disk sebenarnya gunakan writ ebin.asm , lalu kom pilasikan ke file .com dan j alankan dari com m and prom pt .

- Unt uk m enulis t ipe boot record : w r it e bin loa de r .bin ;

- unt uk m enulis t ipe m odul kernel : w r it e bin k e r n e l.bin / k.

param et er / k m engat akan pada program unt uk

m enulis file pada sect or ke dua sebagai gant i yang pert am a .Hal t ersebut bukan m enj adi m asalah dalam rangka m enulis file ke floppy drive, t et api yang m enj adi m asalah dim ana kit a akan m enuliskannya .

(58)

58 int errupt unt uk m engakses disk secara low level , bahkan m ungkin m em prot eksi inform asi yang bernilai dari orang lain at au j ika seseorang m endapat kan disket m ungkin dia akan berpikir bahwa disket t ersebut kosong dan akan m em form at nya, karena pilihan default nya ada di windows operat ing syst em

St rukt ur floppy drive dan disket t e yang ideal:

Unt uk disket 1 4 4 0 k b :

• floppy disk m em punyai 2 side , dan ada 2 head (0 ..1) , head drive bergerak keat as perm ukaan dari disket unt uk t iap sisi.

• Tiap sisi m em iliki 80 cylinders ( di nom ori 0 ..7 9) .

• t iap cylinder m em iliki 18 sect ors (1 ..1 8) . • t iap sect or m em iliki 5 1 2 byt es.

• Tot al ukuran floppy disk adalah : 2 x 80 x 18 x 512 =

1 ,4 7 4 ,5 6 0 byt es.

(59)
(60)

60 BAGI AN 1 2

PEN GEN D ALI AN D EVI CE EX TERN AL

( ROBOT, STEPPER- M OTOR...)

Ada 7 devices yang di- at t ach ke em ulat or: t raffic light s, st epper- m ot or, LED display, t herm om et er, print er, robot dan sim ple t est . kit a dapat m elihat device ket ika kit a m enu "V ir t u a l D e vice s" dari em ulat or. Secara um um , dim ungkinkan m enggunakan CPU keluarga x86 unt uk m engendalikan sem ua device, perbedaanya berada pada nom or port I / O , ini dapat dim odifikasi m enggunakan peralat an elekt ronik . Biasanya file ".bin" dit uliskan ke dalam chip Read Only Mem ory ( ROM) , syst em m em baca program dari chip, dan m e- load ke RAM dan m enj alankannya sebagai program . Prinsip ini digunakan unt uk peralat an m odern lainnya sepert i m icro- wave ovens dan lainnya.

Tr a ffic Ligh t s

(61)

61

; controlling external device with 8086 microprocessor. ; realistic test for c:\emu8086\devices\Traffic_Lights.exe

#start=Traffic_Lights.exe#

name "traffic"

mov ax, all_red out 4, ax

mov si, offset situation

next: mov ax, [si] out 4, ax

; wait 5 seconds (5 million microseconds)

mov cx, 4Ch ; 004C4B40h = 5,000,000

mov dx, 4B40h mov ah, 86h int 15h

add si, 2 ; next situation

cmp si, sit_end jb next

mov si, offset situation jmp next

; FEDC_BA98_7654_3210

situation dw 0000_0011_0000_1100b s1 dw 0000_0110_1001_1010b s2 dw 0000_1000_0110_0001b s3 dw 0000_1000_0110_0001b s4 dw 0000_0100_1101_0011b sit_end = $

(62)

62 St e ppe r - M ot or

Mot or dapat separuh dilangkahkan dengan m em asang pasangan m agnit , Mot or j uga dapat dilangkahkan penuh dengan m em asang pasangan m agnit , yang diikut i oleh pasangan m agnit yang lain dan pada akhirnya yang diikut i oleh m agnit t unggal dan set erusnya. Cara Yang t erbaik unt uk m em buat langkah penuh akan m em buat dua separuh langkah- langkah t ersebut .

Set engah langkah sam a dengan 1 1 .2 5 deraj ad.

sat u langkah penuh sam a dengan 2 2 .5 deraj ad.

Mot or dapat di put ar baik secara wise dan count er- clock-w ise.

Robot

Referensi

Dokumen terkait

Bisman Perangin-angin,M.Eng,Sc selaku pembimbing 1 yang telah memberikan banyak ide serta banyak pemikiran dalam pembuatan tugas akhir ini, yang telah banyak

Puji syukur penulis panjatkan ke hadirat Tuhan Yang Maha Esa karena atas berkat, rahmat serta penyertaan-Nya penulis dapat menyelesaikan Proposal Skripsi dengan judul : Pengaruh

Beberapa pembelajaran yang bisa diambil dari penelitian Asuransi Indeks Iklim menurut Boer (2014) adalah: 1) mitra lokal dan penyuluh pertanian harus terlibat dalam desain

Perbedaan ini karena pemberian perlakuan F10 yang terdiri dari kombinasi (kotoran ayam 3 kg, air kelapa 300 ml, dedak 300 g, MOL 300 ml) memberikan respon

Teknik wawancara dan kuesioner digunakan untuk mengidentifikasi jenis informasi akuntansi yang dimiliki, dokumen, catatan atau laporan yang dimiliki, informasi

Tuntutan mempelajari pelbagai bidang ilmu amat digalakkan dalam Islam, agar Muslim tidak pernah ketinggalan jauh berbanding dengan orang bukan Islam.. yang sebenar

Perdesaan Sehat adalah kegiatan percepatan pembangunan kualitas kesehatan berbasis perdesaan di daerah tertinggal yang dijalankan dalam kerangka percepatan pembangunan

Keberadaan gen Mx dapat digunakan sebagai marker guna mendeteksi daya tahan ayam terhadap penyakit viral seperti Avian Influenza dan Newcastle Disease, hal ini