Selasa, 21 Juni 2011

dasar dasar bahasa assembly


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