• Tidak ada hasil yang ditemukan

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

; kode dituliskan disini ; dalam badan prosedur ... RET

name ENDP

nam e – nam a prosedur, nam a ini harus sam a dia awal dan akhir prosedur.

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.

Cont oh:

ORG 100h CALL m1 MOV AX, 2

RET ; kembali ke OS. m1 PROC

MOV BX, 5

RET ; kembali ke pemanggilnya m1 ENDP

END

cont oh diat as m em anggil prosedur m 1, yang m engerj akan M OV BX , 5, dan kem bali ke inst ruksi selanj ut nya set elah CALL: M OV AX , 2.

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 dan kirim hasilnya ke regist er AX:

ORG 100h MOV AL, 1 MOV BL, 2 CALL m2 CALL m2 CALL m2 CALL m2

RET ; kembali ke OS. m2 PROC

MUL BL ; AX = AL * BL. RET ; kembali ke pemanggil. m2 ENDP

END

cont oh dalam diat as nilai regist er AL di updat e set iap saat prosedur di panggil, regist er BL t et ap t idak berubah, j adi algorit m a ini m enghit ung 2 pangkat 4, hasil akhirnya di regist er AX adalah 1 6 ( or 10h) .

Cot oh lainnya, prosedur m encet ak pesan Hello World! :

ORG 100h

LEA SI, msg ; load address msg ke SI. CALL print_me

RET ; ke OS. ;

========================================================== ; prosedur ini mencetak string,stringy harus null

; terminated (ada nol diakhir string), ; alamat string hrs berada di register SI : print_me PROC

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

m em bandingkan byt e, bukan word. Jika kit a perlu m em bandingkan word t am bahkan prefix "w ." . Jika salah sat u operand pem bandingnya berupa regist er, hal t ersebut t idak diperlukan karena com piler t ahu ukuran t iap regist er .

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

offset . Ham pir sam a kej adiannya j ika inst ruksi I N T m em anggil int errupt , dia m enyim pan regist er sflag st ack, code segm ent dan offset . inst ruksi I RET digunakan unt uk m engem balikan dari pem anggilan int errupt . Kit a j uga dapat m enggunakan st ack unt uk m enyim pan dat a lainnya, ada dua inst ruksi yang bekerj a dengan st ack :

PUSH - m enyim pan nilai 16 bit dalam st ack.

POP – m engam bil nilai 16 bit dari st ack. Synt ax for PUSH inst r uct ion:

PUSH REG PUSH SREG PUSH memory PUSH immediate REG: AX, BX, CX, DX, DI , SI , BP, SP. SREG: DS, ES, SS, CS. m e m or y: [ BX] , [ BX+ SI + 7] , 16 bit variable, et c... im m e dia t e: 5, - 24, 3Fh, 10001101b, et c...

Synt ax for POP inst ruct ion: POP REG

POP SREG POP memory

REG: AX, BX, CX, DX, DI , SI , BP, SP. SREG: DS, ES, SS, ( except CS) .

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

Alam at sekarang dit unj uk oleh SS:SP yang dinam akan t he t op of t h e st a ck. Unt uk file .COM st ack segm ent pada um um nya berada di code segm ent , dan st ack point er diset pada nilai 0 FFFEh. Pada alam at SS:0 FFFEh disim pan alam at kem balian unt uk inst ruksi RET yang dieksekusi pada akhir program . Klik t om bol [St a ck] pada em ulat or window. The t op of t he st ack dit andai dengan "<" .

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: MOV AX, 00001h

MOV BX, 00002h MOV CX, 00003h

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

m endapat kan pesan error " Duplicat e declarat ion" saat m akro dipakai dua kali at au lebih. Unt uk m enghindari ini gunakan direct ive LOCAL diikut i nam a variabelnya , nam a label at au procedure, cont oh:

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

Jika kit a akan m erencanakan m engunakan m akro pada program , m ungkin lebih baik m enem pat ka m akro pada file yang berbeda. Tem pat kan di folder I nc dan gunakandirekt ive I N CLUD E f ile - n a m e unt uk m enggunakan m akro.

55 BAGI AN 1 1

Dokumen terkait