Упрощенные директивы сегментации

Данный вид директив используется для упрощенной записи объявлений сегментов  на языке ассемблер.

 

Modelsmall – данной директивой мы объявляем модель памяти. Существуют также иные модели памяти: tiny, compact, small, large, medium, flat. Например tinyозначает, что все три сегмента программы – кода, данных, и стек – будут объединены в один сегмент. В данном случае используется модель памяти small, которая означает, что сегмент данных и сегмент стека будут объединены в один, а сегмент кода будет выделен в отдельный сегмент.

Мы пользуемся стандартными директивами для обозначения сегментов, например:

.data – так объявляем сегмент данных

.stack 256 – объявления для сегмента стека длиной 256 байт.

.code – объявление начала сегмента кода

По данным директивам компилятор способен понять, где располагается нужные сегменты.

Метки

Метка – идентификатор, обозначающий команду. То есть меткой можно пометить команду, чтобы передать на нее управление.

Метки бывают двух типов: near ближняя и farдальняя. На метку типа near можно передать управление только внутри сегмента. На метку far можно передать управление из другого сегмента.

Метки можно определять разными способами:

  1. Самый распространенный способ объявления, когда сразу за меткой идет помеченная команда. Такая метка всегда имеет атрибут near. Например, next: subeax,2. – метка nextпомечает команду sub с параметрами eaxи 2.
  2. Repeatlabelfar – в данном случае мы объявили метку repeatтипа farна директиву label. То есть при переходе на данную метку мы передаем управление команде которая следует после данной директивы.
  3. Указание имени метки в поле директивы proc. Summaprocnear– в данном примере объявлена директива procс именем summa. Имя процедуры эквивалентно имени метки.

При трансляции программы, компилятор присваивает метке адрес, который соответствует относительному смещению следующей за меткой команды, и записывает метку как временную внутреннюю переменную.

Директива определения процедуры.

Имя PROCтип – так обозначается процедура на языке ассемблер. Здесь Имя – имя процедуры, а тип – соответственно ее тип, который может быть или near, или far.

Ссылка на основную публикацию
Adblock detector