<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=57823&amp;view=findpost&amp;p=423922</guid>
        <pubDate>Mon, 09 Aug 2004 04:58:45 +0000</pubDate>
        <title>Абсолютные переменные</title>
        <link>https://forum.sources.ru/index.php?showtopic=57823&amp;view=findpost&amp;p=423922</link>
        <description><![CDATA[vot: P.S. from vot:<br>
Напомню, что использовать числовые адресные значения сегментов памяти считается дурным тоном, поскольку они актуальны только в REAL режиме. Стоит перейти в защищенный режим, и программа перестанет работать. Поэтому, вместо фактических системных адресов рекомендуется использовать специально предусмотренные для этого символические константы. <br>
Например, вместо &#036;B800, &#036;A000 следует использовать:<br>
<strong class='tag-b'>SegB800, SegA000</strong> и т.д.<br>
<br>
<br>
И еще: если упоминаете ФАК - делайте ссылку на конкретный URL &#33;]]></description>
        <author>vot</author>
        <category>Pascal: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=57823&amp;view=findpost&amp;p=387130</guid>
        <pubDate>Wed, 23 Jun 2004 12:23:56 +0000</pubDate>
        <title>Абсолютные переменные</title>
        <link>https://forum.sources.ru/index.php?showtopic=57823&amp;view=findpost&amp;p=387130</link>
        <description><![CDATA[e-moe: <strong class='tag-b'>А Б С О Л Ю Т Н Ы Е   П Е Р Е М Е Н Н Ы Е</strong><br>
<br>
Память для переменных, объявленных в разделе <strong class='tag-b'>Var</strong>, выделяется при старте блока, в котором содержится данный раздел, в порядке объявления имен переменных. Местоположе-ние блока в пространстве оперативной памяти ЭВМ определяет операционная система. В то же время <strong class='tag-b'>Турбо Паскаль </strong>предоставляет возможность программисту так описать переменные, чтобы им были назначены заранее заданные адреса. Такие переменные называются абсолют-ными; их описание после имени типа должно содержать так называемое абсолютное пред-ложение.<br>
Синтаксис абсолютного предложения:<br>
<br>
<strong class='tag-b'>absolute + целое без знака + &#39;:&#39; + целое без знака</strong><br>
или<br>
<strong class='tag-b'>absolute + иденитификатор переменной</strong><br>
<br>
Структура абсолютного предложения имеет два альтернативных варианта.<br>
В первом варианте производится задание абсолютного адреса в форме, принятой в опе-рационной системе MS DOS.<br>
<br>
Пример 1.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Type &nbsp;ScreenChar = record</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Symbol : char;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Attrib : byte;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ScreenAr = array[1..25,1..80] of ScreenChar;</div><div class="code_line">Var &nbsp;y : real absolute $A100:{text}00;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Screen : ScreenAr absolute $B800:{text}00;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Здесь переменным y и Screen назначаются конкретные адреса оперативной памяти. В частности, значение <strong class='tag-b'>&#036;B800:&#036;0000 </strong>определяет фиксированный адрес видеопамяти.<br>
Примечание. В конструкции <strong class='tag-b'>record .. end </strong>объединяются переменные различного типа (см.раздел FAQ &quot;Записи&quot;).<br>
<br>
Во втором варианте для абсолютной переменной назначается адрес другой, ранее объ-явленной переменной.<br>
<br>
Пример 2 (аналогично примеру 2 статьи FAQ &quot;Приведение типов&quot;).<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Type &nbsp;ByteAr = array[1..2] of byte;</div><div class="code_line">Var &nbsp;W : word;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Br : ByteAr absolute W;</div><div class="code_line">Begin</div><div class="code_line">&nbsp;&nbsp;Br[1]:=10; Br[2]:=20;</div><div class="code_line">&nbsp;&nbsp;Writeln(W,&#39; &nbsp; &#39;,Br[1],&#39; &nbsp; &#39;,Br[2]);</div><div class="code_line">&nbsp;&nbsp;W:=2500;</div><div class="code_line">&nbsp;&nbsp;Writeln(W,&#39; &nbsp; &#39;,Br[1],&#39; &nbsp; &#39;,Br[2]);</div></ol></div></div></div></div><br>
<br>
В результате работы программы будет отпечатано:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5130 &nbsp; &nbsp; &nbsp;10 &nbsp; &nbsp; 20</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2500 &nbsp; &nbsp;196 &nbsp; &nbsp; &nbsp; 9</div></ol></div></div></div></div><br>
Переменные <strong class='tag-b'>W </strong>и <strong class='tag-b'>Br </strong>адресуют одно и то же поле памяти. Другими словами, одно и то же поле памяти размером два байта имеет два имени: имя <strong class='tag-b'>W </strong>и имя <strong class='tag-b'>Br</strong>. Если в программе ис-пользуется имя <strong class='tag-b'>W</strong>, то это поле можно обрабатывать как переменную типа <strong class='tag-b'>word</strong>, для имени <strong class='tag-b'>Br </strong>допустимые операции определяются именем типа <strong class='tag-b'>ByteAr</strong>.<br>
При совмещении переменных с помощью директивы <strong class='tag-b'>absolute </strong>не рекомендуется в раз-деле <strong class='tag-b'>Var </strong>использовать описание типа вместо имени типа. Нарушение этого правила не ана-лизируется компилятором, но может привести к неправильной работе программы, вплоть до ее &quot;зависания&quot;, особенно при использовании сопроцессора.<br>
<br>
Например, вместо описания<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Var &nbsp;A : record</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;x,y : real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;k,m,n : integer</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;B : array[1..3] of real absolute A;</div></ol></div></div></div></div><br>
следует применять описание<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Type &nbsp;RecType = record</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; x,y : real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; k,m,n : integer</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ArType = array[1..3] of real;</div><div class="code_line">Var &nbsp;A : RecType;</div><div class="code_line">&nbsp;&nbsp; &nbsp; B : ArType absolute A;</div></ol></div></div></div></div><br>
<br>
По мотивам лекций Назаренко В.И.]]></description>
        <author>e-moe</author>
        <category>Pascal: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	