STRUKTUR PROGRAM
Perintah untuk mengassembly dan link program ini ditunjukan oleh turbo assembler dan Microsoft assembler sebagai berikut :
Turbo Assembler MASM
Tasm hello; masm hello;
Tlink hello Link hello;
v SEGMENT
Program yang berjalan di DOS dibagi ke dalam tiga segmen utama.Masing – masing segmen memiliki nilai tipe yang berbeda:segmen Code (ditunjukkan oleh CS) mengandung kode program,Segmen data (Ditunjukkkan oleh DS) mengandung variable,segmen stack(ditunjukkan oleh SS) mengandung stack program.
Setiap segmen hanya ditunjukkkan oleh register segmen. Segmen mungkin hanya 1 paragraf (10 byte) dan paling besar 64 K bytes.Setiap segmen mengandung instruksi atau data yang memiliki offset relatife terhadap register segment (CS,DS,SS, atau ES). Offset adalah jarak objek dari permulaan segmentnya.
Title Program hello world [1]
[2]
; program ini menampilkan pesan “hello, world” [3]
[4]
Dosseg [5]
. model small [6]
. stack 100h [7]
[8]
. data [9]
. hello_message db ‘hello, world !’, 0dh, 0ah, ‘$’ [10]
[11]
. code [12]
Main proc [13]
Mov ax, @data [14]
Mov ds, ax [15]
[16]
Mov ah, 9 [17]
Mov dx, offset hello_message [18]
Int 21h [19]
[20]
Mov ax, 4000h [21]
Int 21h [22]
Main endp [23]
Endp main [24]
Gambar Contoh program hello
Ø Segmen code.
Segmen code adalah tempat instruksi mesin program berada. Register CS mengandung alamat segmennya, dan IP menunjuk intruksi pertama yang akan dieksekusi. Segmen data biasanya mengandung variable program. Sebagai catatan, tidak ada register yang menunjukan segmen ini oleh karena itu, pada setiap program EXE dimasukkan baris program berikut untuk menset DS sebagai permulaan segmen data:
Mov ax, @data
Mov ds, ax
Ø Segmen stack.
Segmen stack mengikuti .MODEL, dan biasanya kita menyediakan 256 byte ruang stack. Register SS mengandung alamat segmen ini, dan SP mengacu pada alamat berikutnya setelah akhir stack. Stack akan bertambah kea rah bawah pada saat suatu nilai dimasukkan ke dalam stack. Jika SP mencapai 0000 maka stack berarti penuh.
Ø Perintah.
Perintah TITLE mendefinisikan judul program sampai 128 karakter. Perintah DOSSEG memberitahu assembler untuk menempatkan segmen program dalam urutan standar yang digunakan bahasa tingkat tinggi.
Ø Model memori.
Perintah .MODEL memilih standar model memori untuk program bahasa assembly. Model memori mungkin sebagai cetak biru standar atau konfigurasi, yang menentukan bagaimana segmen dihubungkan bersama. Setiap model memori memiliki sekumpulan batasan yang berbeda sebagai maksimum ruang yang tersedia untuk kode dan data.
Seacra umumpemilihan model memori berarti membuat pilihan antara kecepatan exsekusi optimal dan fleksibilitas ukuran program. Model memori yang membatasi semua data ke segmen tunggal 64 K, contohnya, menjamin bahwwa semua alamat data akan dekat, yaitu, 16-bit nilai. Data mungkin dapat diakses lebih cepat karena alamat 16-bit mungkin di load dengan satu intruksi mesin. Disisi lain, model memori yang mengizinkan kode untuk diperluas sampai 64 K berakibat bahwa beberapa subrutin akan berada pada segmen yang berbeda. Ini berarti bahwa alamat 32-bit harus di load kedalam CS dan register IP ketika subrutin dipanggil. Hal ini membutuhkan 2 intruksi mesin.
Berbagai macam memori model didefinisikan oleh jumlah byte yang digunakan untuk kode (intruksi) dan data (variable). Table berikut menunjukan rangkuman perbedaan antara berbagai tipe model:
Model | Penjelasan |
Tiny | Kode dan data digabung harus <=64 K |
Small | Kode <=64K, data <=64K |
Medium | Data <=64K, kode ukuran sembarang |
Compact | Kode <=64K, data ukuran sembarang |
Large | Keduanya lebih besar dari 64 K |
Huge | Sama seperti model LARGE hanya array boleh lebih dari 64K |
Table Model Memori
Semua model, kecuali model tiny menghasilkan program EXE. Model tiny menghasilkan program COM. Peta file program Hello:
Start stop length name class
00000H 00010H 00011H _TEXT CODE
00020H 0002FH 00010H _DATA DATA
00030H 0012FH 00100H _STACK STACK
Diagram segmen :
Misalkan program di load pada alamat absolute 20000:
Segmen alamat absolute nilai register segmen
Code 20000 2000 (20h byte) |
Data 20020 2002 (10h byte) |
Data 20030 2003 (100h byte) |
Gambar Struktur segmen Hello.exe
Ø Program yang dapat dieksekusi (executable program)
Untuk mendapatkan gambaran yang lebih baik tentang program yang dapat dieksekusi setelah diisikan DOS kedalam memori, lihatlah gambar struktur segmen hello diatas, yaitu profram HELLO.ASM, yang di assembly dan di-link ke bentuk HELLO.EXE. linker dapat menghasilkan file MAP, yang dengan baik menunjukan offset dan ukuran segmen program. Dalam contoh ini, segmen kode adalah 11h byte, segmen datanya 10h byte, dan panjang stacknya 100h byte.
Tidak ada komentar:
Posting Komentar