Joined: 27 Nov 2004 Posts: 1232 Location: www.parsx.com
Posted: Mon Mar 27, 2006 10:25 pm Post subject: چگونه یک متغییر دقیقا از یک آدرس شروع شود
در پاسکال متغییرها فضای مورد استفاده خود را از قسمتهای مختلفی می گیرند. متغییرها محلی فضای مورد نیاز خود را از پشته ، متغییرهای سراسری فضای مورد نیاز خود را از سگمنت کد و ... دریافت می کنند .
اما در صورت لزوم می توانیم به صورت مستقیم به کامپالر اعلام کنیم که این یک متغییر دقیقا از چه آدرسی شروع شود.این کار با دستور 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 ');
در این برنامه دو متغییر سراسری به نامهای I از نوع اعداد صحیح و یک متغییر به نام s از نوع رشته تعریف شده . سپس هر دو متغییر به یک تابع پاس می شوند . دقت کنید که رویه rar دارای دو پارامتر می باشد یکی k از نوع بدون نوع و دیگری I می باشد که مشخص کننده این موضوع است که متغییر k از چه نوعی است.
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