Rabu, 22 Juni 2011

perintah struck

Perintah STRUC
Perintah STRUC mendefinisikan struktur (template atau pola) yang mungkin membebani ruang memori. Struktur juga dapat menganalisasi area dalam program ke nilai default. Bagian individu struktur disebut field.
Kita mendefinisikan struktur banyak persamaaannya dengan makro. Contoh, kita dapat mendefinisikan struktur menjelaskan field dari record mahasiswa. Definisi struktur berikut harus ditempatkan dalam file sumber di mana saja di depan segmen data:
StudentStruc struc ; awal struktur
stnumber db ‘0000000’
lastname db ‘ ‘ ; 20 spasi
credit dw 0
status dw 0
StudentStruc ends ; akhir struktur

Field dalam struktur berjumlah sampai 30 byte. Dalam segmen data kita dapat mendefinisikan variable struktur, dengan alokasi 30 byte memori.
.data
Srec StudentStruc <>

Tanda kurung siku (<>) diperlukan untuk memerintahkan assembler menjaga nilai field default yang disediakan dalam definisi struktur,
Penggantian nilai default. Kita dapat mengganti nilai default dengan nilai baru. Nilai baru harus dipisah dengan koma. Contoh berikut pelimpahan berbagai field dalam StudentStruc:
srec StudentStruc<’1234567’,’Dedi’,30,1> ; seluruh field
myRecord StudentStruc<,,50,0> ; 2 field terakhir
yourRecord StudentStruc<,’Dodi’> ; field ke 2

Field yang menggunakan operator DUP dalam deklarasi struktur asal tidak dapat dikesampingkan. Misalnya field last =name dalam deklarasi StudentStruc adalah:
Lastname db 20 dup (‘ ‘)
Usaha berikut yang mencoba menggantifield ini akan menimbulkan kesalahan sintak:
Srec StudentStruc <,’Joni’>
MenggunakanVariabel Struktur. Ketika variable struktur dibuat, pengacuan terhadap field individual dibuat deb=ngan pemisahan nama variabel dan nama field oleh tanda titik:
mov dl, srec.stnumber
mov ax, srec.credits
Assembler menambah offset variabel struktur ke offset field dalam struktur untuk membuat alamat efektif. Dalam struktur StudentStruc, offset stnumber adalah 0 karena ini merupakan awal field dalam struktur. Offset kredit adalah 27, offset lastname adalah 7, dan seterusnya.
Jika register basis menunjuk ke variabel struktur, tanda titik memisahkan index dengan field:
mov bx, offset srec


mov ax, [bx].credits
mov dl, [bx].status
Berbagai mode pengalamatan yang mungkin digunakan:
mov ax, srec[si].credit
mov dl, [bx+si].status
mov dl, srec [bx+di].stnumber
Contoh program Input Struktur. Berikut ini program yang mendemontrasikan struktur, dengan menggunakan beberapa makro dari file MACRO.INC. Program terhubung dengan CONSOLE.LIB dan include file MACRO,INC.
Tile Program Input Struktur

dosseg
.model small
.stack 100h
extrn Clrscr:proc
include macro.inc
stnumberSZ = ?
lastnamrSZ = 20
StudentStruc struc
stnumber db stnumberSZ dup(0),0
lastname db lastnameSZ dup(0),0
credit dw 0
StudentStruc ends

.data
srec StudentStruc <>
pspSeg dw ?
progTitle db ‘Contoh Input Struktur Student’

.code
main proc
startup pspSeg
L1 : call ClrScr
display_at 2, 20, progTitle
inputStr 4, 10,‘Student Number : ‘, srec.stnumber, stnumberSz
inputStr 6, 10 ‘Last Name : ‘, srec.lastname,lastnameSz
inputStr 8, 10,’Credits Taken: ‘,srec.credits
locate 12, 10
getYN ’More input (Y/n) ?’,’Y’
jxe L1

call ClrScr
exit 0
main endp
end main

Variabel srec mengimplementasikan STRUC yang disebut StudentStruc sehingga pengacuan srec dilakukan dengan format:
srec.stnumber
srec.lastname
srec.credits
Makro inputScr dalam MACRO.INC melakukan input keyboard untuk program ini. Argumen yang dikirim ke mwkro adalah row, columm, prompt, input nama field , danpanjang field. Makro DISPLAY_AT menampilkan string pada baris dan kolom tertentu di layar.
Makro GETYN adalah makro untuk mengambil respons pengguna apakah akan meneruskan lagi atau tidak.
Akhirnya, makro jxe (jump extended equal) diperlukan karena intruksi JE konvensional akan menyebabkan kesalahan “jump out of range”.

Tidak ada komentar:

Posting Komentar