ParsX.com
پذیرش پروژه از دانشجویی ... تا سازمانی 09376225339
 
   ProfileProfile   Log in to check your private messagesLog in to check your private messages  |  FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups Log inLog in   RegisterRegister 

چگونه یک متغییر دقیقا از یک آدرس شروع شود

 
Post new topic   Reply to topic    ParsX.com Forum Index -> برنامه نويسي دلفي و پاسكال : Delphi & Pascal Programming
View previous topic :: View next topic  
Author Message
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Mon Mar 27, 2006 10:25 pm    Post subject: چگونه یک متغییر دقیقا از یک آدرس شروع شود Reply with quote

در پاسکال متغییرها فضای مورد استفاده خود را از قسمتهای مختلفی می گیرند. متغییرها محلی فضای مورد نیاز خود را از پشته ، متغییرهای سراسری فضای مورد نیاز خود را از سگمنت کد و ... دریافت می کنند .
اما در صورت لزوم می توانیم به صورت مستقیم به کامپالر اعلام کنیم که این یک متغییر دقیقا از چه آدرسی شروع شود.این کار با دستور absolute انجام می گیرد. به مثال زیر توجه کنید :
 var
 i:integer ;
 Video : Integer Absolute $B800:$0000;
begin
     i:=video;
     writeln(i,video);
     video:=2;
     write(i,video);
     video:=i;
     readln;
end. 

در این مثال ما یک متغییر از نوع integer تعریف کردیم که دقیقا از آدرس B800 هگز و از افست صفر این خانه از حافظه شروع می شود .این قسمت از حافظه مربوط به حافظه صفحه نمایش می باشد.
در ضمن در هر بار تعریف فقط یک متغییر را می توان بدین شکل تعریف کرد لذا تعریف زیر غیر قابل قبول می باشد :
 
Video,k : Integer Absolute $B800:$0000;

کاربرد دیگر این نوع تعریف در زمانی است که ما بخواهیم یک پارامتر بدون نوع تعریف کنیم. به مثال زیر توجه کنید:

var
 i:integer ;
 s:string[30];
procedure rar(var k;i:byte);
    var
       a:integer absolute k;
       b:string[30] absolute k;
          begin
               if i=0 then
                  begin
                       a:=a+10;
                  end
               else
                   begin
                        b:=b+' + Parsx.com'
                   end;
          end;

begin
     write('Enter i:');
     readln(i);
     rar(i,0);
     writeln(i,' And ');

     write('Enter s:');
     readln(s);
     rar(s,1);
     writeln(s);

     readln;
end.

در این برنامه دو متغییر سراسری به نامهای I از نوع اعداد صحیح و یک متغییر به نام s از نوع رشته تعریف شده . سپس هر دو متغییر به یک تابع پاس می شوند . دقت کنید که رویه rar دارای دو پارامتر می باشد یکی k از نوع بدون نوع و دیگری I می باشد که مشخص کننده این موضوع است که متغییر k از چه نوعی است.
Back to top
Display posts from previous:   
Post new topic   Reply to topic    ParsX.com Forum Index -> برنامه نويسي دلفي و پاسكال : Delphi & Pascal Programming All times are GMT + 3.5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum