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