loading...
دانلود سرای دانشجویی

 

هر برنامه شامل يک يا چند سگمنت است. هنگامی که برنامه دارد اجرا می شود ثبات های سگمنت به سگمنت های جاری اشاره می کنند. چهار سگمنت را در آن واحد می توان داشت؛ کد، داده، پشته و ‌اضافی. در مد حقيقی هر سگمنت حداکثر 64KB است. البته معمولا برنامه ها کمتر از 64KB را استفاده می کنند. اسمبلر اندازه سگمنت را بر اساس تعداد بايت های مورد استفاده سگمنت تنظيم می کند. بنابراين اگر برنامه ای برای نمونه تنها 10KB برای ذخيره داده نياز دارد سگمنت داده 10KB می شود نه 64KB.

برنامه های .exe سه سگمنت اول را بايد داشته باشند.

• سگمنت داده برای ذخيره متغيرهاست. آدرس متغيرها به صورت آفستی از شروع اين سگمنت محاسبه می شوند.
• سگمنت کد شامل دستورالعمل های اجرائی برنامه است.
• سگمنت پشته برای نگهداری داده های موقتی و آدرس های برگشتی از برنامه پشته رزرو می شود. آدرس های پشته به صورت آفستی از ابتدای اين سگمنت محاسبه می شوند.

وقتی اجرای برنامه آغاز می شود سيستم عامل دو ثبات سگمنت CS و SS را برای اشاره به کد برنامه و سگمنت پشته مقداردهی می کند. برای دسترسی به سگمنت داده ثبات ds بايد حاوی آدرس سگمنت داده باشد. قبل از دسترسی به هر داده ای برنامه بايد آدرس سگمنت را در ثبات DS ذخيره کند.

سگمنت ها در برنامه اسمبلی توسط راهنماهای segment و ends مشخص می شوند. يک سگمنت به فرم کلی زير مشخص می شود:

segmentname segment {READONLY} {align} {combine} {use} {'class'}
      <statements>
segmentname ends

segmentname شناسه ای است که نام سگمنت معين می کند. نام سگمنت برای بدست آوردن آدرس آنها توسط اسمبلر استفاده می شود. نام سگمنت بايد در راهنمای ends هم مشخص شود.

align می تواند يکی از کلمات byte، word، dword، para يا page باشد. اين پارامتر مشخص می کنند سگمنت در محدوده بايت، کلمه، کلمه مضاعف، پاراگراف يا صفحه بار شود. اگر بايت باشد سگمنت از اولين بايت آزاد بعد از آخرين سگمنت ذخيره می شود. اين فيلد می تواند حذف شود. پيش فرض پاراگراف است. پاراگراف مضربی از 16 بايت است.

فيلد combine ترتيبی را که سگمنت های هم نام در فايل مقصد توسط اسمبلر نوشته می شوند را کنترل می کند و می تواند يکی از کلمات public، stack، common يا memory باشد. نوع stack برای سگمنت های پشته و public برای بقيه سگمنت ها استفاده می شود.


مثال.

DSEG    segment
Item1   byte   0
Item2   word   0
DSEG    ends

CSEG    segment
      mov   AX, 10
      add   AX, Item1
      ret
CSEG    ends


هرزمان نام سگمنت به عنوان عملوند دستوری بکار برود اسمبلر بلافاصله آدرس سگمنت را جايگزين می کند.


مثال. دستور زير آدرس سگمنت داده را در ثبات DS قرار می دهد.

mov   AX, dseg   ;Loads AX with segment address of dseg.
mov   DS, AX      ;Point ds at dseg.


راهنماهای .stack، .data و .code راهنماهای ساده شده سگمنت هستند که محل شروع سگمنت های پشته، داده و کد را مشخص می کنند. راهنمای .stack فضائی را برای پشته برنامه رزرو می کند. اندازه پشته در مقابل آن ذکر می شود. پيش فرض مقدار پشته 512 بايت درنظر گرفته می شود.

سگمنت ها به ترتيبی که در برنامه تعريف شده اند در حافظه بار می شوند.

ساختار کلی يک برنامه

SSeg    SEGMENT PARA
   DW 32 dup(0)
SSeg   ENDS
DSeg   SEGMENT PARA
   ;declarations
DSeg   ENDS
CSeg   SEGMENT PARA
   Main PROC FAR
      ASSUME SS:SSeg, DS:DSeg, CS:CSeg
      mov AX,DSeg
      mov DS,AX
      ...
      mov AX,4c00h
      int 21h
   Main ENDP
CSeg   ENDS
END Main

ساختار کلی برنامه با راهنماهای ساده شده سگمنت

        .MODEL small
        .STACK [size]
        .DATA
   ;declarations
        .CODE
Main:
   mov AX,@Data
   mov DS,AX
   ...
   mov AX,4c00h
   int 21h ;return to DOS
END Main


نکته. ابتدای هر برنامه اسمبلی بايد آدرس سگمنت داده در ثبات DS قرار گيرد.


مثال. برنامه first.asm برای نمايش پيغام روی صفحه.

; First.asm
;
        .MODEL small
        .STACK [size]
        .DATA
message db "Hello world, I'm learning Assembly !!!", "$"
        .CODE
main PROC
   mov AX,seg message
   mov DS,AX
   mov AH,09
   lea DX,message
   int 21h
   mov AX,4c00h
   int 21h ;return to DOS
main ENDP
END main

 

يک عبارت (expression) ارزيابی شده و نتيجه آن به متغيری نسبت داده می شود. هر عبارت ممکن است شامل متغير، ثابت، عملگر و پرانتز باشد.

عبارات ساده

ساده ترين عبارت از يک بخش تشکيل شده است: يک متغير، ثابت واقعی يا ثابت سمبليک.


مثال. هرکدام از موارد زير يک عبارت ساده هستند.

PI
20
rate
-1.25


عبارات کامل

يک عبارت کامل (Complex expression) از عبارات ساده که با عملگر به هم مربوط شده اند تشکيل شده است.


مثال. چند عبارت کامل.

2 + 8
1.25 / 8 + 5 * rate + rate * rate / cost
x = a + 10;
y = x = a + 10;
x = 6 + (y = 4 + 5);


وقتی عبارتی شامل چند عملگر است ارزيابی عبارت وابسته به الويت عملگرهاست.

Statement

يک جمله (statement) يک خط منفرد از کد است که عملي را انجام مي دهد. در ++C معمولا هر جمله در يک خط نوشته می شود، البته بعضی از جملات به چند خط تقسیم می شوند.

جملات هميشه به يک سميکولن (;) ختم می شوند. (به استثنای راهنماهای کامپايلر مانند define# و include#).


مثال. چند جمله در C++.

int i_accnum;
i_accnum=55555;
i_accnum=i_accnum+5;


White space

خطوط خالی و فاصله ها در برنامه white space نام دارند. کامپايلرهای C++ نسبت به خطوط خالی حساس نيستند و وقتی کد برنامه را می خوانند در جستجوی کاراکترهای جمله و ختم شدن به سميکولن هستند و فاصله ها را نديده می گيرند (ثابت های رشته ای مستثنا هستند). White space امکان فرمت بندی کد برنامه با يک طرح استاندارد برای فاصله گذاری را می دهد که باعث می شود کد برنامه خواناتر شود بدون اينکه روی اجرای آن تاثير بگذارد. هر برنامه نويسی استيل خود را ممکن است داشته باشد مهم اين است که کد برنامه خوانا باشد.

White space ها در ثابت های رشته ای که بين علامت گيومه (") قرار می گيرند مجاز نيستند. اگر می خواهيد يک رشته را به دو خط بشکنيد بايد از کاراکتر () استفاده کنيد.


مثال. جملات زير با هم معادل هستند.

x=2+3;

x = 2 + 3;

x   =
2
+
3;

مثال. جمله زير زير درست است.

cout<<"Hello
world!";


جملات پوچ

يک سميکولن تنها در يک خط خالی يک جمله پوچ (null statement) را می سازد که عملی انجام نمی دهد. گاهی جملات پوچ می توانند مفيد باشند.

جملات ترکيبی

جمله ترکيبی (compound statement) که بلاک (block) هم ناميده می شود از يک يا چند جمله که بين آکولاد محصور شده اند تشيل شده است.

بلاک می تواند جايگزين هر جمله ای در برنامه بشود. برای شروع بهتر است آکولاد بلاک در خط جداگانه ای باشد تا تشخيص اينکه جا افتاده است آسان تر باشد.


مثال. يک بلاک از کد.

{
   cout<<"Hello, ";
   cout<<"world!";
}

خواص مدل

مدل رابطه ای دارای ويژگی های زیر است:

• متداول ترین مدل است
• بر اساس تئوری ریاضی است
• داده ها و ارتباطات بين آنها در پايگاه داده به صورت مجموعه ای از جداول ديده می شود
• هيچ جدولی دارای سطرهای تكراری نيست
• ترتیب سطرها و ستون ها در هر جدول مهم نيست
• ستون ها اتميک هستند يعنی مقادیر ستون ها غیر قابل تجزیه اند
• هر مقدار که در دو رکورد مختلف واقع می شود رابطه ای را بین دو آن رکورد می فهماند
• ارتباط رابطه ها با يکديگر از طریق صفات خاصه مشترک انجام می گيرد
• ایجاد، دسترسی و توسعه آن آسان است. بعد از ایجاد پایگاه داده اولیه، جداول جدید می توانند اضافه شوند بدون اینکه نیاز به تغییر کاربردهای موجود باشد
• مدل دید کاربر است نه روشی که داده بطور داخلی سازماندهی می شود

کلید

 

در مدل رابطه ای هیچ دو سطری در جدول نباید مشابه باشند. این در واقع یک ویژگی اساسی جدول است. اگر دو سطر دو نمونه موجوديت متفاوت را دردنیای واقعی نشان دهند به نحوی بايد از هم متمايز شوند تا به هر کدام در جدول بتوان جداگانه رجوع کرد. بنابراين حداقل یک مقدار منحصر به فرد بايد وجود داشته باشد که باعث متمايز شدن سطرها از يکديگر شود. ستونی که حاوی اين مقدار است کلید ناميده می شود.

کلید داری دو خاصیت را بايد دارا باشد؛ منحصر به فرد بودن و غیر تهی بودن(قانون اول جامعیت).

در يک رابطه انواع مختلفی از کلید ممکن است وجود داشته باشد:

• کلید کاندید
• کلید ترکیبی
• کلید اصلی
• کلید خارجی

کلید کاندید

از مجموعه صفات خاصه یك رابطه آنهایی كه دارای دو ویژگی زیر هستند به عنوان كلید كاندید (candid key) در رابطه مذكور مطرح می شوند:

• منحصر به فرد و غير تهی بودن
• غیر قابل كاهش بودن، يعنی هیچ زیر مجموعه مناسبی از صفات خاصه تشكیل دهنده كلید، دارای خاصیت منحصر به فرد بودن نباشد.


مثال. شماره دانشجوئی و کد ملی کليدهای کانديد در جدول مشخصات دانشجو در دانشگاه می توانند باشند.


کلید ترکیبی

کلید ترکیبی (compound key) کليدی است که از ترکيب چند صفت خاصه ساخته می شود.


مثال. در رابطه دانشجو مجموعه نام و شماره شناسنامه می توانند به عنوان كلید ترکيبی در نظر گرفته شوند.


کلید اصلی

كلید اصلي (primary key)، كلید كاندیدی است كه توسط طراح پايگاه داده انتخاب و معرفی می شود. به عبارتی طراح بانك، یكی از كلیدهای كاندید را به عنوان كلید اصلی بر میگزیند.

در تعیین كلید اصلی از بین كلیدهای كاندید باید دو ضابطه زیر را در نظر گرفت:

• اهمیت كلید اصلی نسبت به سایر كلیدهای كاندید در پرس و جوها
• كوتاهتر بودن طول كلید كاندید از نظر تعداد بایت

نکته. هر جدول تنها یک کلید اولیه دارد اما به این معنی نیست که تنها یک شناسه منحصر به فرد دارد.
نکته. کلید می تواند صفات طبیعی موجودیت انتخاب شود، ولی اگر هيچ کدام از صفات خاصه مناسب نبودند يک کليد جانشين نسبت داده شود (مانند شماره کارمندی برای جدول کارمند).
نکته. در جدول، زیر کلید اولیه یک خط کشیده می شود.
نکته. اگرچه در مدل رابطه ای کليه جداول باید دارای کلید اولیه باشند، ولی تعدادی از RDBMS ها اجباری در تعيين کليد برای هر رابطه نمی کنند، در اينصورت ترکيب کليه صفات خاصه به عنوان کليد درنظر گرفته می شود.


مثال. شماره دانشجوئی در جدول مشخصات دانشجو را می توان به عنوان کليد اصلی انتخاب کرد.


کلید خارجی

کليد خارجی (foreign key) صفت خاصه ای در يک جدول است که در جدول دیگر نقش کلید اصلی یا کاندید را بازی کند.

کليد خارجی ارتباط بين دو جدول را برقرار می کند.

کلید خارجی بر خلاف کليد اصلی می تواند تکراری یا null باشد و ممکن است در يک جدول بیشتر از یک کلید خارجی وجود داشته باشد.

جدول شامل کلید خارجی را گاهی جدول فرزند و جدولی که به آن ارجاع دارد را جدول والد می نامند.


مثال. شماره مشتری در جدول SALE کلید خارجی است زیرا در جدول CUSTOMER کلید اصلی است. شماره مشتری که در جدول فروش بدست می آيد در جدول مشتری جستجو می شود تا تعيين شود محصول به کدام مشتری فروخته شده است.

 

مدل حافظه برنامه توسط راهنمای .model مشخص می شود. عملوند مقابل آن می تواند يکی از انتخاب های زير باشد:

تعداد سگمنت کد تعداد سگمنت داده مدل حافظه
1 - Tiny
1 1 Small
بيشتر از يکی 1 Medium
1 بيشتر از يکی Campact
بيشتر از يکی بيشتر از يکی Large
آرايه های بزرگتر از 64K Huge
بدون سگمنت، تنها در مد محافظت شده Flat
keyword
keyword
keyword
keyword
%out .186 .286 .286P
.287 .386 .386P .387
.486 .8086 .486P .8087
.ALPHA .BREAK .CODE .CONST
.CREF .DATA .DATA? .DOSSEG
.ELSE .ELSEIF .ENDIF .ENDW
.ERR .ERR1 .ERR2 .ERRB
.ERRDEF .ERRDIF .ERRDIFI .ERRE
.ERRIDN .ERRIDNI .ERRNB .ERRNDEF
.ERRNZ .EXIT .FARDATA .FARDATA?
.IF .LALL .LFCOND .LIST
.LISTALL .LISTIF .LISTMACRO .LISTMACROALL
.MODEL .MSFLOAT .NO87 .NOCREF
.NOLIST .NOLISTIF .NOLISTMACRO .RADIX
.REPEAT .UNTIL .SALL .SEQ
.SFCOND .STACK .STARTUP .TFCOND
.UNTIL .UNTILCXZ .WHILE .XALL
.XCREF .XLIST ALIGN ASSUME
BYTE CATSTR COMM COMMENT
DB DD DF DOSSEG
DQ DT DW DWORD
ECHO ELSE ELSEIF ELSEIF1
ELSEIF2 ELSEIFB ELSEIFDEF ELSEIFDEF
ELSEIFE ELSEIFIDN ELSEIFNB ELSEIFNDEF
END ENDIF ENDM ENDP
ENDS EQU EVEN EXITM
EXTERN EXTRN EXTERNDEF FOR
FORC FWORD GOTO GROUP
IF IF1 IF2 IFB
IFDEF IFDIF IFDIFI IFE
IFIDN IFIDNI IFNB IFNDEF
INCLUDE INCLUDELIB INSTR INVOKE
IRP IRPC LABEL LOCAL
MACRO NAME OPTION ORG
PAGE POPCONTEXT PROC PROTO
PUBLIC PURGE PUSHCONTEXT QWORD
REAL4 REAL8 REAL10 RECORD
REPEAT REPT SBYTE SDWORD
SEGMENT SIZESTR STRUC STRUCT
SUBSTR SUBTITLE SUBTTL SWORD
TBYTE TEXTEQU TITLE TYPEDEF
UNION WHILE WORD  

 

شناسه (identifier)، سمبل ، يا برچسب اسمی است که به مقدار مشخصی نسبت داده می شود. اين مقدار می تواند آفستی در يک سگمنت، يک مقدار ثابت، يک آدرس سگمنت، آفستی درون يک رکورد يا حتی عملوند يک دستورالعمل باشد. در هر صورت شناسه امکان ارائه چيزی را با نام آشنا و قابل فهمی را می دهد.

نام شناسه از حروف، ارقام و کاراکترهای خاص تشکيل شده است. با محدوديت های زير:

• يک شناسه نمی تواند با يک رقم عددی شروع شود.
• يک اسم می تواند هر ترکيبی از حروف بزرگ و کوچک باشد. اسمبلر با حساس به متن نيست.
• يک شناسه ممکن است هر تعداد کاراکتری باشد ولی تنها 31 کاراکتر اول آن استفاده می شود. اسمبلر کاراکترهای بعدی را نديده می گيرد.
• کاراکترهای _، $، ? و @ ممکن است درون يک سمبل ظاهر شوند. البته کارکترهای $ و? خاص هستند و نمی توانيد شناسه را منحصرا با اين کاراکترها بسازيد.
• يک شناسه نمی تواند از اسامی رزرو شده باشد. دستورالعمل های 80x86 و نام ثبات ها رزرو شده هستند.


مثال. چند شناسه مجاز.

Item1 Bletch RightHere Right_Here
__Special $1234 @Home Dollar$
WhereAmI? @1234 .TEST SUM_OF_DIGITS

مثال. بعضی شناسه های غيرمجاز.

1TooMany Hello.There $
LABEL Right Here Hi,There

STC
CLC
CMC
STI
CLI
NOP


STC

دستورالعمل (set carry) stc باعث يک شدن فلگ Carry می شود. فرم کلی آن به صورت زير است:

stc

دستورالعمل stc روی فلگ های ديگر تاثير ندارد.


CLC

دستورالعمل (clear carry) clc باعث صفر شدن فلگ Carry می شود. فرم کلی آن به صورت زير است:

clc

دستورالعمل clc روی فلگ های ديگر تاثير ندارد.


CMC

دستورالعمل (compliment carry) cmc باعث عکس شدن فلگ Carry می شود. يعنی اگر صفر باشد آنرا يک و اگر يک باشد آنرا صفر می کند. فرم کلی آن به صورت زير است:

cmc

دستورالعمل cmc روی فلگ های ديگر تاثير ندارد.


STI

دستورالعمل (set interrupt) sti باعث يک شدن فلگ Interrupt می شود. فرم کلی آن به صورت زير است:

sti

دستورالعمل sti روی فلگ های ديگر تاثير ندارد.


CLI

دستورالعمل (clear interrupt) cli باعث صفر شدن فلگ Interrupt می شود. فرم کلی آن به صورت زير است:

cli

دستورالعمل cli روی فلگ های ديگر تاثير ندارد.


NOP

دستورالعمل (no operation) nop هيچ عملی انجام نمی دهد.

 

درمقايسه با مدل سلسله مراتبی که ساختمان های داده ای به صورت درختی از رکوردها سازماندهی می شود و هر رکورد آن يک والد و چند فرزند دارد، مدل شبکه اجازه رکوردهائی با چند والد و چند فرزند را می دهد که در نتيجه يک ساختار مشبک را می سازد.

به مدل شبکه ساختار Plex هم گفته می شد.

درمقايسه با مدل سلسله مراتبی که درختی از رکوردها سازماندهی می شود و هر رکورد آن يک والد و چند فرزند دارد، مدل شبکه اجازه رکوردهائی با چند والد و چند فرزند را می دهد که در نتيجه يک ساختار مشبک را می سازد.

عمليات در مدل شبکه به صورت پيمايشی است از يک رکورد به ديگری با دنبال کردن ارتباطاتی که رکورد درآنها سهيم است دنبال می شود.


مثال. ارتباط دو سويه قطعه و تهيه کننده را دنظر بگيريد. هر قطعه توسط چند تهيه کننده تهيه می شود و هر تهيه کننده چند قطعه را عرضه می کند.

خواص مدل

• در این ساختار موجودیت ها به كمك انواع ركوردها، و ارتباطات به كمك پیوندهای بین ركوردها نمایش داده می شوند.
• هر گره فرزند می تواند بیش از یك گره والد داشته باشد.
• برای نمايش ارتباطات یك به چند دو سويه مناسب است.
• عملیات ذخیره و بازیابی پیچیده تر از مدل سلسله مراتبی است.
• برای پرس و جوهای قرینه رویه پاسخگوئی قرینه دارد ولی پیچیده است.
• متدهائی را برای ساخت و تعریف دوباره پیوندها دارد.
• ساختارهای فیزیکی مناسب برای ارتباطات شبکه ای ساختار چندحلقه است.

مزایا و معایب

• اجازه مدل کردن طبيعی تر ارتباطات مابين موجوديت ها را می دهد.
• مدل شبکه انعطاف پذیری بیشتری نسبت به سلسله مراتبی دارد.
• در عملیات ذخیره سازی آنومالی ندارد.
• مدل شبکه می تواند افزونگی داده را بهتر از سلسله مراتبی نشان بدهد.
• از دید کاربر وضوح کامل ندارد
• عمليات پيچيده تری دارد
• پیوند بین رکوردهای یک نوع ممکن نیست.
• اصل وحدت عملگر در یک عمل رعایت نمی شود.

تعداد صفحات : 425

اطلاعات کاربری
آمار سایت
  • کل مطالب : 4247
  • کل نظرات : 0
  • افراد آنلاین : 5
  • تعداد اعضا : 2926
  • آی پی امروز : 67
  • آی پی دیروز : 161
  • بازدید امروز : 408
  • باردید دیروز : 830
  • گوگل امروز : 6
  • گوگل دیروز : 51
  • بازدید هفته : 408
  • بازدید ماه : 35,349
  • بازدید سال : 110,458
  • بازدید کلی : 8,289,152
  • کدهای اختصاصی