BAGI AN 9 STACK
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, ( ex cept CS) .
m e m or y: [ BX] , [ BX+ SI + 7] , 16 bit variable, et c...
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 :
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 ber guna 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.
Kem balikan nilai original regist er dari st ack ( dg POP) .
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 .
" PUSH sou r ce " inst ruksi ini m engerj akan:
Kurangi 2 dari regist er SP .
Tulis nilai sou r ce ke alam at SS:SP.
" POP de st in a t ion" inst ruksi ini m engerj akan :
Tulis nilai alam at SS:SP ke de 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 " < " .