Laporan Praktikum Assembly: PUSH and POP

18
LAPORAN PRAKTIKUM ORGANISASI KOMPUTER & BAHASA ASSEMBLY PUSH AND POPKelas : INF 2B Praktikum 1 Nama : Fernalia NIM : J3C212210 PROGRAM KEAHLIAN MANAJEMEN INFORMATIKA DIREKTORAT PROGRAM DIPLOMA INSTITUT PERTANIAN BOGOR 2013

Transcript of Laporan Praktikum Assembly: PUSH and POP

LAPORAN PRAKTIKUM

ORGANISASI KOMPUTER & BAHASA ASSEMBLY

“PUSH AND POP”

Kelas : INF 2B Praktikum 1

Nama : Fernalia

NIM : J3C212210

PROGRAM KEAHLIAN MANAJEMEN INFORMATIKA

DIREKTORAT PROGRAM DIPLOMA

INSTITUT PERTANIAN BOGOR

2013

i

DAFTAR ISI

DAFTAR ISI ......................................................................................................................... i

DAFTAR GAMBAR ............................................................................................................ ii

LAPORAN PRAKTIKUM ................................................................................................... 1

1. Tujuan Percobaan ....................................................................................................... 1

2. Teori Penunjang ......................................................................................................... 1

2.1. Interrupt dan Register .......................................................................................... 1

2.2. Tanda Directive ................................................................................................... 3

2.3. Addressing Modes ............................................................................................... 4

2.4. Bandingkan dan Lompat (CMP & JMP) .............................................................. 6

2.5. Stack.................................................................................................................... 7

3. Tugas Pendahuluan ..................................................................................................... 8

3.1. Program Cetak Huruf PUSH and POP ................................................................. 8

3.2. Program Masukkan Nilai Flags Register PUSH and POP .................................... 9

3.3. Program Masukkan Isi Rgeister PUSH and POP ................................................. 9

3.4. Program Cetak Pengulangan Huruf PUSH and POP .......................................... 10

Output: ........................................................................................................................ 10

4. Listing Program ........................................................................................................ 10

4.1. Program Cetak Huruf PUSH and POP ............................................................... 10

4.2. Program Masukkan Nilai Flags Register PUSH and POP .................................. 11

4.3. Program Masukkan Isi Rgeister PUSH and POP ............................................... 11

4.4. Program Cetak Pengulangan Huruf PUSH and POP .......................................... 12

5. Analisis Program ...................................................................................................... 13

5.1. Program Cetak Huruf PUSH and POP ............................................................... 13

5.2. Program Masukkan Nilai Flags Register PUSH and POP .................................. 13

5.3. Program Masukkan Isi Rgeister PUSH and POP ............................................... 14

5.4. Program Cetak Pengulangan Huruf PUSH and POP .......................................... 14

6. Kesimpulan .............................................................................................................. 15

7. Daftar Pustaka .......................................................................................................... 15

ii

DAFTAR GAMBAR

Gambar 1 Output Program Cetak Huruf PUSH and POP ....................................................... 8

Gambar 2 Output Program Masukkan Nilai Flags Register PUSH and POP .......................... 9

Gambar 3 Output Program Masukkan Isi Register PUSH and POP ....................................... 9

Gambar 4 Output Program Cetak Pengulangan Huruf PUSH and POP ............................... 10

Gambar 5 Listing Program Cetak Huruf PUSH and POP..................................................... 10

Gambar 6 Listing Program Masukkan Nilai Flags Register PUSH and POP ....................... 11

Gambar 7 Listing Program Masukkan Isi Register PUSH and POP ..................................... 11

Gambar 8 Listing Program Cetak Perulangan Huruf PUSH and POP .................................. 12

Gambar 9 Analisa Program Part 1 ....................................................................................... 13

Gambar 10 Analisa Program Cetak Huruf PUSH and POP .................................................. 13

Gambar 11 Analisa Program Masukkan Nilai Flags Register PUSH and POP ..................... 13

Gambar 12 Analisa Program Masukkan Isi Register PUSH and POP .................................. 14

Gambar 13 Analisa Program Cetak Perulangan Huruf PUSH and POP................................ 14

Gambar 14 Analisa Program Part 2 ..................................................................................... 15

1

LAPORAN PRAKTIKUM

1. Tujuan Percobaan

1) Mengetahui dan memahami syntax yang dalam pembuatan program implementasi

perintah PUSH and POP.

2) Memahami penggunaan operasi-operasi PUSH and POP.

3) Dapat membedakan antara PUSH dan POP.

2. Teori Penunjang

2.1. Interrupt dan Register

Interrupt atau sering kali disebut dengan intruksi merupakan permintaan-

perminaatan yang dikirimkan kepada processor untuk memproses dan melakukan

sesuatu. Dalam pemrograman bahasa assembler, interupsi digunakan untuk

menyelesaikan tugas atau permintaan yang dimasukan secara khusus oleh user dalam

pengeksekusian program yang diinginkan.

Pada umumnya, interrupt ini diartikan sebagai perintah-perintah yang

diperintahkan oleh user untuk selanjutnya dikirimkan ke microprocessor melalui

register-register dan diproses sehingga menghasilkan balikan nilai yang sesuai dengan

perintah-perintah yang dimasukkan oleh user.

Interrupt terbagi atas 2 macam:

1) Interrupt 00h – 1Fh(0 - 31) merupakan interrupt BIOS dan standar di semua

komputer baik yang menggunakan sistem operasi DOS maupun bukan yang

menggunakan sistem operasi DOS. Lokasi Interrupt Vector Table-nya ada di

alamat absolute 0000h-007Fh.

2) Interrupt 20h – FFh (32 - 255) merupakan interrupt DOS. Interrupt ini hanya

ada pada komputer yang menggunakan sistem operasi DOS dan interrupt

handler-nya dip roses ke memori oleh DOS pada saat DOS digunakan. Lokasi

Interrupt Vector Table-nya ada di alamat absolute 07h-3FFh.

Register merupakan sebaguan memori dari microprocessor yang dapat diakses

dengan kecepatan yang sangat tinggi. Register ini merupakan perantara yang selalu

digunakan oleh microprocessor untuk melakukan pekerjaannya. Register yang

digunakan oleh microprocessor dibagi menjadi 5 bagian sesuai dengan tugasnya,

keliama bagian tersebut adalah:

2

1) Segmen Register yang terdiri atas CS (Code Segment), DS (Data Segment),

ES (Extra Segment), dan SS (Stack Segment).

2) Pointer dan Index Register yang terdiri dari SP (Stack Pointer), BP (Base

Pointer), SI (Source Index), dan DI (Destination Index).

3) General Purpose Register yang terdiri atas AX, BX, CX dan DX yang

masing-masingnya terdiri atas 16 bit. Pada setiap bagian register ini, terdapat

2 bagian yaitu H yang menandai High dan L yang menandai Low. High ini

menandai 8 bit pada posisi akhir register dan Low menandai 8 bit pada posisi

awal register. Pada register-register ini biasanya digunakan dalam berbagai

keperluan, tetapi dapat digunakan pula dalam kondisi-kondisi khusus seperti:

a. Register AX, biasanya digunakan dalam operasi aritmatika terutama

dalam operasi pembagian dan pengurangan.

b. Register BX, pada umumnya digunakan untuk menunjukkan suatu alamat

offset dari suatu segmen.

c. Register CX, biasanya digunakan pada operasi looping (perulangan)

dimana pada register ini menunjukkan banyaknya looping yang akan

terjadi pada sebuah program.

d. Register DX, digunakan secara khusus untuk menampung sisa hasil

pembagian 16 bit.

4) Index Pointer Register merupakan register IP yang berpasangan dengan CS

(CS:IP) berufngsi untuk menunjukkan alamat pada memori tempat dari

intruksi (perintah) selanjutnya yang akan diseksekusi.

5) Flags Register merupakan register yang menunjukkan kondisi dari sebuah

keadaan. Kondisi keadaan ini mengembalikan nilai “ya” atau “tidak”, 0 atau

1. Pengecekan suatu kondisi dengan nilai balikan “ya” atau “tidak” disebut

dengan fungsi Boolean. Setiap keadaan pada flags register ini hanya terpakai

1 bit saja, maka untuk satu flags register ini masing-maisng dapat menyimpan

16 keadaan (16 bit). Flags Register ini terdiri atas OF (OverFlow Flag), SF

(Sign Flag), ZF (Zero Flag), CF (Carry Flag), PF (Parity Flag), DF

(Direction Flag), IF (Interrupt Enable Flag), TF (Trap Flag), AF (Auxiliary

Flag), NT (Nested Task) dan IOPL (I/O Protection Level).

3

2.2.Tanda Directive

2.2.1. .MODEL, Model-model pada program dan codenya:

1) TINY, program hanya akan menggunakan 1 segment seperti program

COM, model ini disediakan untuk program COM.

2) SMALL, data dan code yang digunakan oleh program kurang dari

ukuran 1 segment atau 64 KB.

3) MEDIUM, data yang digunakan oleh program kurang dari 64 KB

tetapi code yang digunakan bisa lebih dari 64 KB.

4) COMPACT, data yang digunakan bisa lebih besar dari 64 KB tetapi

codenya kurang dari 64 KB.

5) LARGE, data dan code yang dipakai oleh program bisa lebih dari 64

KB.

6) HUGE, data maupun code array yang digunakan bisa lebih dari 64

KB.

2.2.2. .CODE

Tanda directive yang digunakan untuk memberikan pemberitahuan

mengenai code segmentnya. Code segment ini digunakan untuk menyimpan

program yang akan dijalankan.

2.2.3. .ORG 100h

Tanda directive ini sering digunakan pada program COM. Perintah ini

digunakan untuk memberitahukan kepada assembler supaya program pada saat

dijalankan ditaruh mulai pada offset ke 100h (256) byte. Dapat diartikan juga

bahwa kita menyediakan 100h byte kosong pada saat program dijalankan.

Program kosong ini nantinya akan ditempati oleh PSP (Program Segment Prefix).

2.2.4. .JMP

Perintah JMP digunakan untuk melompat menuju tempat yang

ditunjukkan oleh perintah JUMP.

Syntax:

JUMP Tujuan

4

2.2.5. INT 20h

Perintah ini digunakan untuk megakhiri program dan menyerahkannya

kembali ke DOS.

2.3. Addressing Modes

Addressing Modes merupakan cara-cara dari pengnyalinan data atau nilai yang

berada pada sebuah register dan variabel ke lokasi memori atau sebaliknya. Secara

umum banyaknya cara penyalinan tersebut dapat dibagi menjadi 7, seperti pada tabel

berikut.

No. Addressing Mode Format Segment Register

1. Immediate Data Tidak Ada

2. Register Register Tidak Ada

3. Direct Displacement Label

DS DS

4. Register Indirect [BX]

[BP]

[SI] [DI]

DS

SS

DS DS

5. Base Relative [BX] + Displacement

[BP] + Displacement

DS

SS

6. Direct Indexed [DI] + Displacement [SI] + Displacement

DS DS

7. Base Indexed [BX] [SI] + Displacement

[BX] [DI] + Displacement [BP] [SI] + Displacement

[BP] [DI] + Displacement

DS

DS SS

SS Tabel 1 Addressing Modes

Pada addressing modes ini juga diperkenalkan dengan penyalinan data yang

terlarang, diantaranya:

1) Penyalinan data antar segment register:

𝑴𝑶𝑽 𝑫𝑺,𝑬𝑺

2) Pemberian nilai untuk segment register (DS, ES, CS, SS) secara langsung:

𝑴𝑶𝑽 𝑬𝑺,𝟎𝑩𝟖𝟎𝟎𝒉

3) Penyalinan data langsung antar memori:

𝑴𝑶𝑽 𝑴𝒆𝒎𝒐𝒓𝒊𝑩,𝑴𝒆𝒎𝒐𝒓𝒊𝑨

4) Penyalinan data antar register yang berbeda tipe tanpa menggunakan pointer:

𝑴𝑶𝑽 𝑨𝑳,𝑩𝑿

Pada permasalahan 1 sampai dengan 3 dapat diselesaikan dengan penggunaan

register general purpose (AX, BX, CX, DX) dengan memasukkan nilai dari segment

5

register; nilai untuk segment register; nilai dari memori ke register general purpose

lalu menyalinkan nilai yang ada pada register general purpose tersebut ke tujuan.

2.3.1. Immediate Addressing

Immediate addressing atau register addressing merupakan penyalinan

nilai atau konstanta yang telah didefinisikan langsung ke sebuah register:

𝑴𝑶𝑽,𝑭𝑭𝒉 atau 𝑴𝑶𝑽,𝑨

2.3.2. Register Addressing

Register addressing merupakan suatu penyalinan data antar register yang

ukurannya sama:

𝑴𝑶𝑽 𝑨𝑿,𝑪𝑿 atau 𝑴𝑶𝑽 𝑩𝑳,𝑪𝑯

2.3.3. Direct Addressing

Direct addressing merupakan penyalinan data pada suatu register dan

simbol:

𝑻𝑫𝑨𝑻𝑨: 𝑱𝑴𝑷 𝑷𝒓𝒐𝒔𝒆𝒔

𝑨 𝑫𝑩 𝟏𝟐𝒉

𝑩 𝑫𝑩 𝟓𝟗𝒉

𝑷𝒓𝒐𝒔𝒆𝒔:𝑴𝑶𝑽 𝑨𝑳,𝑨

𝑴𝑶𝑽 𝑨𝒉,𝑩

2.3.4. Register Indirect Addressing

Register indirect addressing adalah penyalinan suatu data yang banyak

dengan mengambil alamat efektifnya dan diakses nilainya dengan menggunakan

tanda kurung siku ([]). Register-register yang dapat digunakan adalah BX, BP, SI

dan DI. Cara untuk mendapatkan alamat efektif dari suatu data digunakan

perintah LEA (Load Effective Address) dengan syntax:

𝑳𝑬𝑨 𝑹𝒆𝒈𝒊𝒔𝒕𝒆𝒓,𝑫𝒂𝒕𝒂

6

2.4. Bandingkan dan Lompat (CMP & JMP)

2.4.1. Lompat Tanpa Syarat

Perintah pada lompat tanpa syarat ini merupakan perintah yang sering

digunakan pada pembuatan program dalam assembler, perintah tersebut yaitu

perintah JMP. Perintah JMP ini digunakan untuk melompati daerah data

program. JMP digunakan dengan syntax:

JMP Tujuan

Perintah JMP ini dikategorikan sebagai unconditional jump. Perintah JMP

ini selalu dieksekusi untuk melompati daerah data dan langsung mengeksekusi isi

label yang menjadi tujuan perintah JMP. Baris program yang ada dibawah

program JMP akan dilompat dan tidak dieksekusi sampai label tujuan perintah.

2.4.2. Membandingkan dengan CMP

Perintah CMP ini digunakan untuk membandingkan 2 buah operand,

dengan syntax:

CMP Operand1,Operand2

Perintah CMP ini akan membandingkan operand1 dengan operand2

dengan cara mengurangkan operand1 dengan operand2. Perintah CMP ini tidak

akan memperngaruhi nilai yang ada pada setiap operand, melainkan akan

mempengaruhi flags register yang menjadi hasil perbandingan dari kedua

operand tersebut. Adapun flag-flag register yang akan terpengaruh oleh perintah

ini adalah:

1) OF akan bernilai 1 jika operand1 lebih kecil dari operand2 pada operasi

bilangan bertanda.

2) SF akan bernilai 1 jika operand1 lebih kecil dari operand2 pada operasi

bilangan bertanda.

3) ZF akan bernilai 1 jika operand1 nilainya sama denga operand2.

4) CF akan bernilai 1 jika operand1 lebih kecil dari operand2 pada operadi

bilangan bertanda.

2.4.3. Lompat yang mengikuti CMP

Perintah CMP yang mempengaruhi nilai pada flag register biasanya

diikuti dengan perintah JMP sebagai perintah yang akan melompati kondisi-

kondisi yang tidak sesuai ke kondisi yang seharusnya setelah dibandingkan.

7

Perintah Lompat Kondisi

JA (Jump If Above) Lompat jika operand1 > operand2 untuk

bilangan bertanda.

JE (Jump If Equal) Lompat jika operand1 = operand2

JG (Jump If Greater) Lompat jika operand1 > operand2 untuk

bilangan bertanda.

JNE (Jump If Not Equal) Lompat jika operand1 tidak sama dengan

operand2

JB (Jump If Below) Lompat jika operand1 < operand2 untuk

bilangan bertanda.

JL (Jump If Less) Lompat jika operand1 < operand2 untuk

bilangan bertanda.

JBE (Jump If Below or Equal) Lompat jika operand1 <= operand2 untuk

bilangan bertanda.

JLE (Jump If Less or Equal) Lompat jika operand1 <= operand2 untuk

bilangan bertanda.

JAE (Jump If Above or Equal) Lompat jika operand1 >= operand2 untuk

bilangan bertanda.

JGE (Jump If Greater or Equal) Lompat jika operand1 >= operand2 untuk

bilangan bertanda.

Tabel 2 Perintah JMP mengikuti CMP

2.5. Stack

Stack merupakan sebuah tumpukan. Stack adalah bagian dari memori yang

digunakan untuk menyimpan nilai dari register secara sementara. Operasi-operasi

langsung yang berhubungan langsung dengan stack yaitu oerasi-operasi PUSH and

POP; PUSHF and POP. Stack menggunakan pasangan SS:SP untuk menunjukkan

lokasi dari stack itu sendiri. Sedangkan pasangan register CS:IP digunakan untuk

mengetahui letak dari program.

2.5.1. PUSH and POP

PUSH merupakan operasi yang digunakan ketika kita hendak memasukkan

ada yang ada pada general purpose register ke lokasi stack, dan perintah POP

merupakan perintah yang digunakan untuk mengeluarkan data yang ada pada stack ke

general purpose register untuk dieksekusi. Syntax PUSH and POP:

PUSH general purpose register

8

Pada perintah PUSH diatas berarti bahwa isi yang ada pada general purpose register

akan dimasukkan ke dalam stack.

POP general purpose register

Perintah POP diatas berarti akan mengeluarkan isi yang ada di stack dimulai dari data

yang teratas ke general purpose register.

2.5.2. PUSHF and POPF

PUSHF merupakan perintah yang digunakan untuk memasukkan atau

menyimpan nilai dari flags register pada stack. Sedangkan POPF digunakan untuk

mengambil nilai pada stack dan disimpan pada flags register. Syntax dari penggunaan

perintah PUSHF dan POPF:

PUSHF

POPF

3. Tugas Pendahuluan 3.1. Program Cetak Huruf PUSH and POP

Output:

Gambar 1 Output Program Cetak Huruf PUSH and POP

9

3.2. Program Masukkan Nilai Flags Register PUSH and POP

Output:

Gambar 2 Output Program Masukkan Nilai Flags Register PUSH and POP

3.3. Program Masukkan Isi Rgeister PUSH and POP

Output:

Gambar 3 Output Program Masukkan Isi Register PUSH and POP

10

3.4. Program Cetak Pengulangan Huruf PUSH and POP

Output:

Gambar 4 Output Program Cetak Pengulangan Huruf PUSH and POP

4. Listing Program

4.1. Program Cetak Huruf PUSH and POP

Gambar 5 Listing Program Cetak Huruf PUSH and POP

11

4.2. Program Masukkan Nilai Flags Register PUSH and POP

Gambar 6 Listing Program Masukkan Nilai Flags Register PUSH and POP

4.3. Program Masukkan Isi Rgeister PUSH and POP

Gambar 7 Listing Program Masukkan Isi Register PUSH and POP

12

4.4. Program Cetak Pengulangan Huruf PUSH and POP

Gambar 8 Listing Program Cetak Perulangan Huruf PUSH and POP

.MODEL SMALL

.CODE ORG 100h

mov AX,41h push AX pop BX mov CL,5 ulang: mov AH,02h mov DX,BX int 21h loop ulang

mov AX,42h push AX pop BX mov CL,5 ulang1: mov AH,02h mov DX,BX

int 21h loop ulang1 mov AX,43h push AX pop BX mov CL,5 ulang2:

mov AH,02h mov DX,BX int 21h loop ulang2 mov AX,44h push AX pop BX

mov CL,5 ulang3: mov AH,02h mov DX,BX int 21h loop ulang3 mov AX,45h

push AX pop BX mov CL,5 ulang4: mov AH,02h mov DX,BX int 21h loop ulang4

mov AX,46h push AX pop BX mov CL,5 ulang5: mov AH,02h mov DX,BX int 21h

loop ulang5 mov AX,47h push AX pop BX mov CL,5 ulang6: mov AH,02h

mov DX,BX int 21h loop ulang6

mov AX,47h push AX pop BX mov CL,5

ulang6: mov AH,02h mov DX,BX int 21h loop ulang6 mov AX,48h push AX pop BX

mov CL,5 ulang7: mov AH,02h mov DX,BX int 21h loop ulang7 mov AX,49h

push AX pop BX mov CL,5 ulang8: mov AH,02h mov DX,BX int 21h loop ulang8

mov AX,4Ah push AX pop BX mov CL,5 ulang9: mov AH,02h mov DX,BX

int 21h loop ulang9

int 20h

13

5. Analisis Program

Gambar 9 Analisa Program Part 1

Pada potongan program Operasi Aritmatika diatas, baris 1 sampai bari ke 3

merupakan tanda directive yang memiliki fungsi yang berbeda-beda. .MODEL SMALL

merupakan tanda directive yang menunjukan model dari program. .MODEL SMALL ini

menunjukkan bahwa program yang dibuat memilih model program SMALL yang berarti

code dan program yang dibuat tidak lebih dari 1 segment. .CODE merupakan tanda

directive yang memberikan pemberitahuan kepada code segment, artinya program akan

disimpan di code segment tersebut. ORG 100h berarti bahwa kita merelokasikan memori

kosong sebesar 100h untuk selanjutnya akan dipakai oleh PSP.

5.1. Program Cetak Huruf PUSH and POP

Gambar 10 Analisa Program Cetak Huruf PUSH and POP

5.2. Program Masukkan Nilai Flags Register PUSH and POP

Gambar 11 Analisa Program Masukkan Nilai Flags Register PUSH and POP

14

5.3. Program Masukkan Isi Rgeister PUSH and POP

Gambar 12 Analisa Program Masukkan Isi Register PUSH and POP

5.4. Program Cetak Pengulangan Huruf PUSH and POP

mov AX,41h ;AX=A

push AX ;masukkan A ke Stack

pop BX ;mengeluarkan A ke BX/BX=A

mov CL,5 ;pengulangan=5 kali

ulang: ;label ulang

mov AH,02h ;service mencetak huruf

mov DX,BX ;DX=A

int 21h ;interrupt mencetak huruf

loop ulang ;ulang label ulang=5 kali

mov AX,42h ;AX=B

push AX ;masukkan B ke Stack

pop BX ;mengeluarkan B ke BX/BX=B

mov CL,5 ;pengulangan=5 kali

ulang1: ;label ulang1

mov AH,02h ;service mencetak huruf

mov DX,BX ;DX=B

int 21h ;interrupt mencetak huruf

loop ulang1 ;ulang label ulang1=5 kali

mov AX,43h ;AX=C

push AX ;masukkan C ke Stack

pop BX ;BX=C

mov CL,5 ;pengulangan=5 kali

ulang2: ;label ulang2

mov AH,02h ;service mencetak huruf

mov DX,BX ;DX=C

int 21h ;interrupt mencetak huruf

loop ulang2 ;ulang label ulang2=5 kali

mov AX,44h ;AX=D

push AX ;masukkan D ke Stack

pop BX ;BX=D

mov CL,5 ;pengulangan=5 kali

ulang3: ;label ulang3

mov AH,02h ;service cerak huruf

mov DX,BX ;DX=D

int 21h ;interrupt cetak huruf

loop ulang3 ;ulang label ulang3=5 kali

mov AX,45h ;AX=E

push AX ;masukkan E ke stack

pop BX ;BX=E

mov CL,5 ;pengulangan=5 kali

ulang4: ;label ulang4

mov AH,02h ;service cetak huruf

mov DX,BX ;DX=E

int 21h ;interrupt cetak huruf

loop ulang4 ;ulang label ulang4=5 kali

mov AX,46h ;AX=F

push AX ;masukkan F ke stack

pop BX ;BX=F

mov CL,5 ;pengulangan=5 kali

ulang5: ;label ulang5

mov AH,02h ;service cetak huruf

mov DX,BX ;DX=F

int 21h ;interrupr cetak huruf

loop ulang5 ;ulang label ulang5=5 kali

mov AX,47h ;AX=G

push AX ;masukkan F ke stack

pop BX ;BX=F

mov CL,5 ;pengulangan=5 kali

ulang5: ;label ulang5

mov AH,02h ;service cetak huruf

mov DX,BX ;DX=F

int 21h ;interrupr cetak huruf

loop ulang5 ;ulang label ulang5=5 kali

mov AX,47h ;AX=G

push AX ;masukkan G ke stack

pop BX ;BX=G

mov CL,5 ;pengulangan=5 kali

ulang6: ;label ulang6

mov AH,02h ;service cetak huruf

mov DX,BX ;DX=G

int 21h ;interrupt cetak huruf

loop ulang6 ;ulang label ulang6=5 kali

mov AX,48h ;AX=H

push AX ;masukkan H ke stack

pop BX ;BX=H

mov CL,5 ;pengulangan=5 kali

ulang7: ;label ulang7

mov AH,02h ;service cetak huruf

mov DX,BX ;DX=H

int 21h ;intterupt cetak huruf

loop ulang7 ;ulang label ulang7=5 kali

mov AX,49h ;AX=I

push AX ;masukkan I ke stack

pop BX ;BX=I

mov CL,5 ;pengulangan=kali

ulang8: ;label ulang8

mov AH,02h ;service cetak huruf

mov DX,BX ;DX=I

int 21h ;interrupt cetak huruf

loop ulang8 ;ulang label ulang8=5 kali

mov AX,4Ah ;AX=J

push AX ;masukkan J ke stack

pop BX ;BX=J

mov CL,5 ;pengulangan=5 kali

ulang9: ;label ulang9

mov AH,02h ;service cetak huruf

mov DX,BX ;DX=J

int 21h ;interrupt cetak huruf

loop ulang9 ;ulang label ulang9=5 kali

Gambar 13 Analisa Program Cetak Perulangan Huruf PUSH and POP

15

Gambar 14 Analisa Program Part 2

Pada baris program diatas, int 20h digunakan untuk megakhiri program dan

mengembalikan kerja kepada DOS. Pada program ke 20 END TDATA adalah untuk

mengakhiri kerja program.

6. Kesimpulan

Program PUSH dan POP ini digunakan untuk mengakses data yang ada pada

stack dan mengeluarkannya sesuai dengan urutan terakhir yang dimasukkan. Stack ini

berguna untuk program-program yang memiliki data yang banyak dan dilakukan

pengaksesan data tersebut secara berurutan sesuai dengan data yang terakhir yang

dimasukkan. Pada stack ini berlaku fungsi last in first out. Maka, jika data yang terakhir

dimasukkan maka dalam pengaksesannya data itu akan pertama kali keluar.

7. Daftar Pustaka

1) Suheri, Asep. 2012. MODUL PRAKTIKUM ORGANISASI KOMPUTER &

BAHASA ASSEMBLY. [Bogor]: Program Diploma Institut Pertanian Bogor [IPB].

2) Susanto. 1995. Pemrograman dengan Bahasa Assembly. Elex Media

Komputindo.