Всего на сайте:
248 тыс. 773 статей

Главная | Информатика

Программа на языке ассемблера, соответствующая  Просмотрен 155

программе табл. 5.3

Метка Операция Операнды Комментарий
  LRI 1, H(NUM) ; УСТ. НА Н, L АДРЕС ПЕРВОГО
  LRI 2, L(NUM) ; ЧИСЛА
  LRI 3, 10D ; НАЧАЛЬН. ЗНАЧ. СЧЕТЧИКА
  LRI 4, 0D ; УСТ. В 0 ЧАСТИ. СУММУ
  LR1 5, 1D ; КОНСТ 1 ДЛЯ УМЕНЬШ. СЧЕТЧИКА
LOOP: MOV 0, 4 ; СЛОЖЕНИЕ ОЧЕРЕДИ. ЧИСЛА
  ADD F  
  MOV 4, 0  
  IHL ; УВЕЛИЧЕНИЕ Н И L
  MOV 0, 3 ; УМЕНЬШЕНИЕ СЧЕТЧИКА
  SUB   
  MOV 3, 0  
  JAN LOOP ; ТЕСТИРОВАНИЕ СЧЕТЧИКА
  HLT   
NUM: RES 10D ; РЕЗЕРВИР. МЕСТА ДЛЯ ЧИСЕЛ
  END   

 

Итак, метка — это символический адрес, который можно выбрать таким образом, чтобы программа легче читалась и чтобы можно было при необходимости сослаться на команду. Поскольку в программе приходится ссылаться далеко не на каждую команду, поле метки может оставаться пустым. В программе в табл. 5.9 метка LOOP отмечает начало цикла, т. е. точку, на которую ссылается команда JAN (пере­ход при ненулевом аккумуляторе). Конец поля метки на языке ас­семблера, как правило, отмечается разделителем, например двоето­чием.

Следующее поле в предложении на языке ассемблера — поле опе­рации. Оно содержит мнемонический код операции, следовательно, определяет операцию, выполняемую данной командой. Очевидно, что программисту легче запомнить и употреблять мнемонические, а не числовые операции.

Третье поле — поле операндов. В этом поле содержится вся ин­формация, которая нужна, чтобы полностью определить выполня­емую команду. Например, оно может содержать символический адрес памяти, обозначение общего регистра или непосредственно данные. Многие ассемблеры позволяют задавать в поле операндов процедуру вычисления. Например, можно записывать арифметические формулы для вычисления адреса операнда или для команд переходов — число команд, через которое нужно «перепрыгнуть» вверх или вниз.

Если поле операндов состоит из нескольких частей, они обычно разделяются запятыми. В качестве символических адресов в поле опе­рандов употребляются имена, которые встречаются в поле метки. Данные в поле операндов обычно могут быть заданы в двоичной, вось­меричной, десятичной или шестнадцатеричной системе. Чтобы ас­семблер мог определить, в какой системе счисления представлены данные, в конце чисел может быть указан однобуквенный код системы счисления (например, В, О, D или Н). Для разделения полей операции и операндов между ними должен быть по крайней мере один пробел.

За иллюстрациями обратимся снова к программе в табл. 5.9. Первые два предложения показывают, что в поле операндов может встречаться процедура вычисления. В данном случае Н ( ) опреде­ляет процедуру, в которой выделяются старшие 8 битов величины, заключенной в скобки. В частности, Н (NUM) интерпретируется как старшие 8 разрядов числового адреса, присвоенного имени NUM.

В нашей программе NUM представляет собой символический ад­рес первого элемента суммируемых данных. В сочетании с кодом операции LRI эти 8 разрядов образуют непосредственные данные в команде. Таким образом, предложение на языке ассемблера LRI 1, H(NUM) вызывает загрузку в общий регистр 1 старших 8 битов ад­реса первого элемента данных. Аналогично L ( ) задает операцию вы­деления младших 8 битов, и, следовательно, L (NUM) означает млад­шие 8 битов адреса NUM. Эти 8 битов будут интерпретированы ассем­блером в качестве второго байта машинной команды, соответствующей предложению LRI 2, L(NUM).

В связи с табл. 5.9 отметим еще три момента. Во-первых, число­вые значения задаются в поле операндов вместе с указателем системы счисления. Например, в третьем предложении конструкция 10D означает, что константу 10 нужно считать десятичным числом. Ас­семблер при трансляции переведет эту константу в двоичную систему. Во-вторых, все общие регистры задаются своими шестнадцатеричными номерами. И наконец, в-третьих, запятая между операндами в предло­жении MOV всегда интерпретируется как слово «from», т. е. «из». Та­ким образом, предложение MOV 0, 4 означает загрузку в общий ре­гистр 0 (аккумулятор) содержимого из (from) общего регистра 4. Напомним, что в предложении MOV по крайней мере один из регистров должен иметь номер О, 1 или 2. Если программист нарушит это огра­ничение, ассемблер обнаружит ошибку и выдаст соответствующее сообщение. Это одна из типичных обнаруживаемых ассемблером оши­бок.

Последнее поле в предложении на языке ассемблера — это поле комментария. Оно дает возможность программисту снабдить предло­жение любыми пояснениями, облегчающими чтение и понимание про­граммы. Это поле игнорируется ассемблером в процессе трансляции исходной программы в объектную. Обычно единственное требование к этому полю состоит в том, чтобы ему предшествовал ограничитель (например, точка с запятой).

Предыдущая статья:Ассемблеры Следующая статья:Директивы ассемблера
page speed (0.0181 sec, direct)