Ассемблирование и выполнение программ

April 9, 2010 by admin Комментировать »

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

Ассемблер присваивает командам и блокам данных адреса, начиная с адреса, заданного в директиве ORIGIN. Эта директива отвечает за размещение по нуж­ным адресам констант, которые могут быть заданы в директивах DATAWORD, и резервирует память в соответствии с указаниями, содержащимися в директивах RESERVE.

Важнейшим моментом процесса ассемблирования является определение зна­чений, заменяющих имена. В тех случаях, когда значение имени определяется ди­рективой EQU, это очень простая задача. Но если имя задается в поле «Метка» команды, представляемое им значение определяется положением этой команды в ассемблированной объектной программе. Поэтому в ходе формирования ма­шинного кода ассемблер должен отслеживать адреса, по которым будут загру­жаться последовательные команды программы. Например, именам START и LOOP будут назначены значения 100 и 112 соответственно.

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

Сканируя исходную программу, ассемблер записывает все имена и соответст­вующие им числовые значения в специальную таблицу, называемую таблицей символов. Когда имя встречается в программе повторно, оно заменяется соответ­ствующим значением из таблицы. Проблема может возникнуть лишь в том случае, если имя использовалось в качестве операнда до того, как ему было присвоено зна­чение. Такое возможно, в частности, при выполнении перехода вверх по програм­ме. Ассемблер не сможет определить целевой адрес перехода, так как указанное в команде имя еще не записано в таблицу символов. Для решения проблемы дос­таточно дважды просканировать исходную программу. На первом проходе ассемб­лер создает полную таблицу символов. В конце этого прохода всем встречающимся в программе именам должны быть поставлены в соответствие числовые значения.

После этого ассемблер снова проходит по исходной программе и заменяет все имена значениями из таблицы символов. Такой ассемблер называется двухпро-ходным.

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

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

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты