BAGI AN 8 PROSED URE

BAGI AN 8 PROSED URE - JLE , JNG JNLE, JG - Tu t or ia l Asse m ble r

===

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 ; 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 k em 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 .

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 ; ========================================================== ; prosedur ini mencetak string,stringy harus null ; terminated (ada nol diakhir string), ; alamat string hrs berada di register SI : print_me PROC

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 .