Bahasa assembly biasanya berupa keyboard (1)

Assembly

Pemrograman Bahasa

Assembly

Assembly

Buku ini merupakan suatu referensi maupun tutorial untuk mendalami bahasa assembly. Organisasi dan Arsitektur

Referensi

dan

Komputer merupakan prasyarat utema yang harus pernah di ambil sebagai matakuliah dasar untuk dapat lebih cepat mengerti

Tutorial

bahasa assembly.

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

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 ber art 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 :

Digit - digit t ersebut dapat m er epr esent asikan nilai apa saj a, cont oh : 754. 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 :

akan t erbent uk nilai yang lain dari sebelum nya :

Ca t a t a n pe n t in g: t iap angka dalam pangk at 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, y ait u syst em dengan 2 digit :

Dan dengan dem ikian ba se - n ya 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 w ord 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.

Angka biner 1 0 1 0 0 1 0 1 b sam a dengan nilai decim al dari 165:

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 . Angka Hexadecim al lebih sim ple dan m udah unt uk dibaca. Juga lebih m udah unt uk m erubah angka dari syst em biner ke syst em hexadecim al dan sebaliknya , set iap nibble ( 4 bit ) dapat di rubah ke digit hexadecim al digit m enggunakan t able berikut :

D e cim a l Bina r y

10 1010 A 11 1011 B 12 10 C 13 1101 D 14 1110 E 15 1111 F

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: rubah 4 3 8 6 8 ke bent uk hexadecim al:

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 ( 2 5 6 ) ,sehingga didapat kan: 2 5 6 - 5 = 2 5 1 .

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 emu8086 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 Math: Ba se con ve r t e r m engij inkan kit a unt uk m engkonversi angka dari syst em nilai apa saj a ke syst em nilai lainnya. Ket ikan nilai di t ext - box, dan nilai akan secara ot om at is di rubah ke sem ua syst em nilai. Kit a dapat bekerj a baik dalam nilai 8 bit dan 1 6 bit .

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: ~ not (inverts semua bit).

* multiply(perkalian). / divide (pembagian). % modulus(modulo). + sum(penjumlahan). - subtract (dan unary -) (pengurangan). << shift left (penggeseran bit ke kiri). >> shift right(penggeseran bit ke kanan). & bitwise AND (operator relasi and). ^ bitwise XOR(operator relasi xor). | bitwise OR (operator relasi or).

Angka biner harus m em punyai suffix "b" , cont oh: 00011011b 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 Angka Oct al ( base 8) harus m em punyai suffix "o" , cont oh: 77o

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.

RAM m erupakan t em pat dim ana program di loading unt uk di RAM m erupakan t em pat dim ana program di loading unt uk di

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 - sour ce index regist er.

D I - dest inat ion index regist er.

BP - base point er.

SP - st ack point er.

disam ping nam a- nam a regist er, dim ana seorang program m er dapat m enent ukan penggunaannya unt uk set iap general purpose

regist er. Tuj ua n ut a m a da r i r e gist e r a da la h u n t u k

m e ny im pa n a n gk a ( va r ia ble ) . Ukuran regist er diat as adalah

16 bit , sepert i 0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 1 b ( bent uk binary, at au

1 2 3 4 5 dalam bent uk decim al. Em pat ( 4) general purpose regist er ( AX, BX, CX, DX) dibuat dari dua 8 bit regist er yang t erpisah , cont oh j ika AX= 0110000 00111001 b, m aka AH= 00110000 b dan AL= 00111001 b. Dem ikian j uga, j ika kit a m em odifikasi set iap 8 bit regist er, m aka 16 bit regist er akan di 1 2 3 4 5 dalam bent uk decim al. Em pat ( 4) general purpose regist er ( AX, BX, CX, DX) dibuat dari dua 8 bit regist er yang t erpisah , cont oh j ika AX= 0110000 00111001 b, m aka AH= 00110000 b dan AL= 00111001 b. Dem ikian j uga, j ika kit a m em odifikasi set iap 8 bit regist er, m aka 16 bit regist er akan di

SEGM EN T REGI STER

CS – m enunj uk pada segm en yang berisi pr ogram sekarang ( current program ) .

D S – biasanya m enunj uk pada segm en dim ana variable didefinisikan.

ES – regist er segm en ext ra, t ergant ung program m er m endefinisikan penggunaanya.

SS – m enunj uk pada segm en yang berisi st ack. 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) :

Address yang dibent uk dengan 2 regist er disebut e ffe ct ive

a ddr e ss. Default nya regist er BX, SI dan D I bekerj a dengan segm en regist er D S, BP dan SP bekerj a dengan segm en regist er SS. General purpose regist er lainnya t idak dapat dibent uk dari a ddr e ss. Default nya regist er BX, SI dan D I bekerj a dengan segm en regist er D S, BP dan SP bekerj a dengan segm en regist er SS. General purpose regist er lainnya t idak dapat dibent uk dari

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.

I P regist er selalu bekerj a bersam a dengan segm en regist er CS

dan m enunj uk pada inst ruksi yang sedang dieksekusi. fla gs r e gist e r dim odifikasi secara ot om at is oleh CPU set elah operasi m at em at ika, hal ini dapat m enent ukan t ipe yang dihasilkan, dan unt uk m enent ukan kondisi uit nuk m ent ransfer cont rol ke bagian program . Seacra um um kit a t idak dapat m egakses regist er ini secara langsung, cara yang dapat dilakukan unt ukm engkasesnya adalah dengan m engakses AX dan general regist er lainnya, ada kem ungkinan m erubah nilai dari syst em regist er dengan m enggunakan beberapa t rik yang akan dipelaj ari nant i.

Ba gia n 2 M EM ORY ACCESS

Unt uk m engakses m em ory kit a dapat m enggunakan 4 regist er : BX , SI , D I , BP. regist er- regist er diat as dapat dikom binasikan didalam sym bol t anda kurung kot ak [ ] , kit a bias m endapat kan lokasi m em ori yang berbeda. Kom binasi ini didukung dengan m ode pengalam at an ( addressing m odes) sebagai berikut :

d16 ( variable offset only)

[ BX]

[ BP + DI + d8]

[ SI + d16] [ DI + d8]

[ SI + d8]

[ BX + SI + d16]

[ DI + d16] [ BP + d8]

[ BX + DI + d16]

[ BP + d16] [ BX + d8]

[ BP + SI + d16]

[ BP + DI + d16]

[ BX + d16]

d8 –m erupakan penggant ian nilai yang t erdekat unt uk 8 bit signed ( cont oh: 22, 55h, - 1, et c...)

d1 6 – m erupakan penggant ian nilai yang t erdekat unt uk 16 bit signed ( cont oh: 300, 5517h, - 259, et c...) .

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 yait u dikalkulasi oleh processor ke physical address: 1 0 0 * 1 6

+ 3 0 + 7 0 + 2 5 = 1 7 2 5 . Default nya segm en regist er D S

adalah digunakan unt uk sem ua m ode kecuali dengan regist er BP, unt uk hal t ersebut segm en regist er SS digunakan. Jadi ada cara m udah unt uk m engingat sem ua kem ungkinan t ersebut dengan m enggunakan bagan di bawah ini:

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 nt , 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

Dalam banyak kasus dapat m engkalkulasi t ipe dat a secara ot om at is.

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] , v ariable, et c...

I nst ruksi M OV t idak dapat digunakan unt uk m engeset nilai regist er CS dan I P.

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

ORG 100h

; directive yg diperlukan utk 1 segment .com program.

MOV AX , 0B800h

; set AX ke nilai hex dr B800h.

MOV DS , AX ; copy nilai AX ke DS.

MOV CL , 'A'

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

MOV CH , 1101_1111b ; set CH ke nilai binary. MOV BX , 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 inst ruksi yang powerful.

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 "va 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 – k om binasi dari alphanum erik , diaw ali dengan hur uf. Mungk in 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( hex adecim 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.

VAR1 DB 7 var2 DW 1234h

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 "VAR1 " and "va r 1 " m engacu pada variable yang sam a. Offset dari VAR1 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 , Var iabel 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 sebelum 1 2 h . Kit a dapat m elihat bahwa ada suat u inst ruksi lainnya set elah inst ruksi RET, I ni t erj adi karena disassem bler t idak t ahu dim ana dat a dim ulai , dia hanya m em proses nilai dalam m em ori dan m em aham i sebagai inst ruksi 8086 yang sah ( kit a akan pelaj ari nant i) . Kit a j uga bahkan dapat m enulis program yang sam a m enggunakan hanya direkt ive D B:

ORG 100h ; hanya suatu directive utk

; membuat file .com sederhana .

DB 0A0h DB 08h DB 01h

DB 8Bh DB 1Eh DB 09h DB 01h

DB 0C3h

DB 7

DB 34h DB 12h

Tulis program diat as dalam edit or em u8086 , dan t ekan F5 unt uk com pile dan m em uat dalam em ulat or. Hasilnya 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

Array dapat dilihat sebagai suat u rant ai variable . Text st ring m erupakan cont oh dari array byt e, t iap karakt er diwakili sebuah nilai kode ASCI I ( 0..255) . cont ohnya : Array dapat dilihat sebagai suat u rant ai variable . Text st ring m erupakan cont oh dari array byt e, t iap karakt er diwakili sebuah nilai kode ASCI I ( 0..255) . cont ohnya :

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 UP. Synt ax D UP: 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:

d DB 5 DUP(1, 2) d DB 5 DUP(1, 2)

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 alam at dari suat u variable dapat sangat berguna dalam suat u sit uasi, cont ohnya saat kit a akan m engirim param et er ke suat u prosedur, cont oh :

ORG 100h

MOV AL, VAR1 ; check nilai dari

; VAR1 dg ;memindahkannya ke AL.

LEA BX, VAR1 ; ambil alamat

;VAR1 di BX.

MOV BYTE PTR [BX], 44h ; modifikasi

;isi dari VAR1.

MOV AL, VAR1 ; check nilai dari

;VAR1 dg memindahkannya ; ke AL.

RET VAR1 DB 22h

END

Cont oh lainnya penggunaan OFFSET sebagai gant i LEA:

ORG 100h

MOV AL, VAR1 ; check nilai

; VAR1 dg memindahkannya ke AL.

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:

MOV AX, 5

Kit a dapat m elihat variable sem ent ara program kit a sedang dieksekusi dengan m em ilih "Va r ia ble s" dari m enu "Vie 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 :

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

Ekspresi secara ot om at is di konversi, cont oh, saat ekspresi dim asukkan: 5 + 2 akan dikonversi ke 7 dst ...

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 dipicu oleh hardware lainnya, ini disebut h a r dw a r e in t e r r u pt s. Saat ini kit a akan m em bahas pada soft w a r e in t e r r u pt s. Unt uk m em buat soft w a r e int e r r u pt ada suat u inst ruksi yait u I N T, dengan sint ak:

I N T va lu e Dim ana va lu e berupa angka ant ara 0 - 255 ( at au 0 - 0FFh) , 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- 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 ; tidak memodifikasi register AH pd saat ; return, jadi hanya di set sekali saja. MOV AH, 0Eh ; pilih sub-function. ; INT 10h / 0Eh sub-function ; menerima kode ASCII sbg ;Karakter yg akan dicetak ;di register AL . ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MOV AL, 'H' ; ASCII code: 72 INT 10h ; cetak! MOV AL, 'e' ; ASCII code: 101 INT 10h ; cetak!

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.

[ Com pile a n d Em u la t e ] lalu, j alankan!

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 nc. 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, m engeset posisi kursor.

PRI N T st r in g - m acro dengan 1 param et er, m encet ak sebuah st ring.

PRI N TN st r in g - m acro dengan 1 param et er, m encet ak st ring. Sam a dengan PRI NT t et api ot om at is m enam bahkan "carriage ret urn" di akhir st ring.

CURSOROFF – m em at ikan kursor t ext .

CURSORON - m enghidupkan kursor t ext . Unt uk m enggunakan m akro diat as, t inggal ket ik nam a m akro

dan param et er yang dibut uhkan , cont ohnya:

include emu8086.inc

ORG 100h

PRINT 'Hello World!'

GOTOXY 10, 5

PUTC 65 ; 65 - kode ASCII untuk 'A' PUTC 'B'

RET ; return ke OS. END ; directive utk menghentikan

; kompiler.

Saat com piler m em proses kode kit a, dia m encari file

e m u8 0 8 6 .inc unt uk m akro yang dideklarasikan dan 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 t erm inat ed st r in g pada posisi kursor saat ini , m enerim a alam at st ring di dalam regist er D S:SI . Unt uk m enggunakannya deklarasikan:

D EFI N E_ PRI N T_ STRI N G sebelum direct ive EN D .

PTH I S – procedure unt uk m encet ak null t erm inat ed st r ing

pada posisi kursor saat ini ( sepert i PRI NT_STRI NG) , t et api m enerim a alam at st ring dari st ack. ZERO TERMI NATED 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 .

GET_ STRI N G – procedure unt uk m endapat kan input null t erm inat ed st r in g dari user, st ring yang dit erim a dit ulis dalam buffer di regist er D S:D I , ukuran buffer berada di

D X . Prosedur ini m enghent ikan input saat t om bol 'Ent er' dit ekan. Cara m enggunakannya: D EFI N E_ GET_ STRI N G sebelum direkt ive EN D .

CLEAR_ SCREEN – procesedur m em bersihkan layar, ( sebenarnya hanya m enggulung layar saj a sat u w indow ) , CLEAR_ SCREEN – procesedur m em bersihkan layar, ( sebenarnya hanya m enggulung layar saj a sat u w indow ) ,

D EFI N E_ CLEAR_ SCREEN sebelum direkt ive EN D .

SCAN _ N UM – procedure unt uk m enerim a input berupa

a ngk a m ult i- digit SI GN ED ( bert anda) dari keyboar d, dan m enyim pan hasilnya di regist er CX. Cara m em akainya :

D EFI N E_ SCAN _ N UM sebelum direkt ive EN D .

PRI N T_ N UM – prosedur m encet ak a ngk a signe d dalam regist er AX. Pem akaiannya: D EFI N E_ PRI N T_ N UM dan

D EFI N E_ PRI N T_ N U M _ UN S sebelum direkt ive EN D .

PRI N T_ N UM _ UN S – prosedur m encet ak a n gk a

un signe d dalam regist er AX . Pem akainnya:

D EFI N E_ PRI N T_ N U M _ UN S sebelum direkt ive EN D .

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 :

include 'emu8086.inc' ORG 100h

LEA SI, msg1 ; Tanya angka yg di input CALL print_string ; CALL scan_num ; ambil angka di CX.

MOV AX, CX ; copy angka ke AX.

; cetak string berikut: CALL pthis DB 13, 10, 'Anda memasukkan: ', 0

CALL print_num ; cetak angka di AX.

RET ; return ke OS.

msg1 DB Masukan sebuah Agka: ', 0

DEFINE_SCAN_NUM DEFINE_PRINT_STRING DEFINE_PRINT_NUM DEFINE_PRINT_NUM_UNS ;diperlukan utk

;print_num.

DEFINE_PTHIS

END ; directive utk menghentikan

;kompiler.

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 m engeksekusi cont rol m aka prosedur dipindahkan. Hal ini sangat berguna, karena j ika kit a m em anggil prosedur 100 kali dalam kode program kit a m asih m em punyai ukura program yang kecil .Tam paknya agak m em bingungkan bukan ? Tidak m asalah hanya m asalah w akt u saj a m = yang m enunt uk kit a unt uk m em aham inya prinsip dasar ini.

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 flow flag ini diset ke 0 .

• Ze r o Fla g ( ZF) – diset k e 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 ive 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 angk a ge n a p dar i 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 k e 1 j ik a 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) – Jik a flag diset 1 CPU m endapt kan int errupt dari device ekst ernal.

• D ir e ct ion Fla g ( D F) – Flag ini digunak an oleh beber apa inst ruksi unt uk m em proses rant ai dat a, j ika flag di set ke 0 – proses diselesaikan ke depan, Jika flag bernilai 1 proses diselesaikan ke belakang.

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

memory, REG REG, REG memory, immediate 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... 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.

• AD D – m enam bah oper and ke dua ke oper and pert am a. •

SUB – Mengur angi oper an kedua dari oper and yang per t am a.

CM P – Mengur angi operand kedua dari operand pert am a h a n ya

fla gn ya sa j a . •

AN D - Logical AND ant ar a sem ua bit dari dua oper and . At ur annya :

1 AND 1 = 1 1 AND 0 = 0 0 AND 1 = 0 0 AND 0 = 0

Kit a dapat kan 1 hanya j ika kedua bit ber nilai 1 . •

TEST – Sam a dengan AN D t a pi h a n ya u n t u k fla g sa j a . •

OR - Logical OR ant ara sem ua bit dari dua operand. At uranny a:

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 – Per kalian Unsigned: Jika oper and- nya by t e :

AX = AL * operand.

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

• I M UL - Per kalian 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 byt 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 hany a flag: ZF, SF, OF, PF, AF.

N OT t idak m em pengaruhi flag apapun!

N EG hany a 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.

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 any a 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:

Label dapat dideklarasikan pada baris t erpisah at au sebelum inst ruksi lainnya, cont oh:

x1: MOV AX, 1

x2: MOV AX, 2 cont oh inst ruksi JM P : org

100h mov ax ,5

jmp calc ; go to 'calc'.

back: jmp stop

; go to 'stop'.

calc: add ax , bx

; add bx to ax.

jmp back

; go 'back'.

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 r ansfer k endali baik secar a forw ar d 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

Instruction Description Condition

Opposite

Instruction

JZ , JE Jump if Zero (Equal).

ZF = 1

JNZ, JNE

JC , JB, Jump if Carry (Below, Not JNAE

CF = 1 JNC, JNB, JAE

Above Equal).

JS Jump if Sign.

SF = 1

JNS

JO Jump if Overflow.

OF = 1

JNO

JPE, JP Jump if Parity Even.

PF = 1

JPO

JZ, JE JNC , JNB,

JNZ , JNE Jump if Not Zero (Not Equal).

ZF = 0

Jump if Not Carry (Not Below, CF = 0 JC, JB, JNAE JAE

Above Equal).

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

mov ax ,4 a: mov ax ,5 ret

I n st r u k si j u m p u n t u k a n gk a Sign e d Opposite

Instruction Description Condition

Instruction

Jump if Equal ( = ). JE , JZ ZF = 1 JNE, JNZ Jump if Zero.

Jump if Not Equal ( <> ). JNE , JNZ ZF = 0 JE, JZ Jump if Not Zero.

Jump if Greater ( > ).

ZF = 0

JG , JNLE Jump if Not Less or Equal ( not

and

JNG, JLE

<= ). SF = OF

Jump if Less ( < ).

SF <>

JL , JNGE Jump if Not Greater or Equal JNL, JGE

OF

( not >= ).

Jump if Greater or Equal ( >= ). JGE , JNL SF = OF JNGE, JL Jump if Not Less ( not < ).

ZF = 1

Jump if Less or Equal ( <= ).

or

JLE , JNG JNLE, JG

Jump if Not Greater ( not > ). SF <> OF

I n st r u k si j u m p u n t u k a n gk a u n sign e d

Opposite

Instruction Description Condition

Instruction

Jump if Equal ( = ). JE , JZ ZF = 1 JNE, JNZ Jump if Zero.

Jump if Not Equal ( <> ). JNE , JNZ ZF = 0 JE, JZ Jump if Not Zero.

Jump if Above ( > ).

CF = 0

JA , JNBE Jump if Not Below or Equal

and

JNA, JBE

( not <= ). ZF = 0

Jump if Below ( < ). Jump if Not Above or Equal

JB , JNAE, JC CF = 1 JNB, JAE, JNC ( not >= ).

Jump if Carry.

Jump if Above or Equal ( >= ). JAE , JNB, Jump if Not Below ( not < ).

CF = 0 JNAE, JB JNC Jump if Not Carry.

CF = 1

Jump if Below or Equal ( <= ).

JNBE, JA Jump if Not Above ( not > ).

JBE , JNA or

ZF = 1

Um um nya, j ika diperlukan unt uk m em bandingkan nilai num eric inst ruksi CM P digunakan ( sam a dengan inst ruksi SUB ( subt ract ) , t et api t idak m enyim pan hasilnya, hanya ber pengaruh pada flagnya saj a) . Logikanya sederhana, cont oh : Bandingkan 5 dand 2, 5-2=3

hasilnya bukan nol ( zero flag diset ke 0) . cont oh lainnya: bandingkan 7 dan 7, 7-7=0 hasilnya nol! ( Zero Flag diset ke 1 dan JZ at au JE t idak m elom pat ) .

cont oh inst ruksi CM P dan condit ional j um p:

include "emu8086.inc" include "emu8086.inc"

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

opposite

instruction operation and jump condition

instruction

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

decrease cx, jump to label if cx not zero and LOOPE LOOPNE equal (zf = 1).

decrease cx, jump to label if cx not zero and LOOPNE LOOPE not equal (zf = 0).

decrease cx, jump to label if cx not zero and zf LOOPNZ LOOPZ = 0.

decrease cx, jump to label if cx not zero and zf LOOPZ LOOPNZ = 1.

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

Pada dasarnya loop sam a dengan j um p, m ungkin saj a m engkodekan loop t anpa m enggunakan inst ruksi lo op dengan hanya m enggunakan j um p dan com pare dan sepert i inilah loop bekerj a . sem ua inst ruksi loop m enggunakan regist er CX unt uk m enghit ung langkah, sepert i diket ahui regist er CX m em iliki 16 bit dan nilai m aksim um dapat m enj angkau 65535 at au FFFF,bagaim anapun j uga dapat saj a m elet akkan loop dalam loop sehingga nilai j angkauannya dapat sebesar 65535 * 65535 * 65535 hingga bat as st ack ram penuh. Dim ungkinkan m enyim pan nilai asli pada regist er cx dengan inst ruksi pu sh cx dan m engem balikannya ke asalnya j ika int ernal loop berakhir dengan pop cx , cont oh :

org 100h

mov bx ,0 ; total step counter.

mov cx ,5 k1: add bx ,1 mov al , '1' mov ah , 0eh int 10h push cx mov cx ,5 k2: add bx ,1 mov al , '2' mov ah , 0eh int 10h push cx mov cx ,5 k3: add bx ,1 mov al , '3' mov ah , 0eh int 10h loop k3

; internal in internal loop. pop cx loop k2

; internal loop. pop cx loop k1

; external loop.

ret

Sem ua condit ional j um p m em iliki sat u bat asan yang besar, t idak sepert i inst ruksi JM P m ereka hanya j um p sebesar 1 2 7 byt es kedepan dan 1 2 8 byt es kebelakang. Kit a dapat m engat asi bat asan ini dengant rik : Sem ua condit ional j um p m em iliki sat u bat asan yang besar, t idak sepert i inst ruksi JM P m ereka hanya j um p sebesar 1 2 7 byt es kedepan dan 1 2 8 byt es kebelakang. Kit a dapat m engat asi bat asan ini dengant rik :

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: