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 .