![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Программа на языке ассемблера, соответствующая
программе табл. 5.3
Итак, метка — это символический адрес, который можно выбрать таким образом, чтобы программа легче читалась и чтобы можно было при необходимости сослаться на команду. Поскольку в программе приходится ссылаться далеко не на каждую команду, поле метки может оставаться пустым. В программе в табл. 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. Если программист нарушит это ограничение, ассемблер обнаружит ошибку и выдаст соответствующее сообщение. Это одна из типичных обнаруживаемых ассемблером ошибок. Последнее поле в предложении на языке ассемблера — это поле комментария. Оно дает возможность программисту снабдить предложение любыми пояснениями, облегчающими чтение и понимание программы. Это поле игнорируется ассемблером в процессе трансляции исходной программы в объектную. Обычно единственное требование к этому полю состоит в том, чтобы ему предшествовал ограничитель (например, точка с запятой).
|