1 из чего состоит процесс ассемблирования программы

Общая схема процесса разработки программы на ассемблере включает 4 этапа.

1. Ввод исходного текста программы.

2. Создание объектного модуля.

3. Создание загрузочного модуля.

4. Отладка программы.

Трансляция программы

На этапе трансляции осуществляется перевод команд ассемблера в соответствующие машинные команды. В результате трансляции формируются файл объектного модуля и файл листинга.

Объектный модуль включает в себя представление исходной программы в машинных кодах и некоторую другую информацию, необходимую для отладки и компоновки его с другими модулями.

При использовании пакета TASM получение объектного модуля исходного файла производится программой (ассемблером) tasm.exe. Формат командной строки для запуска tasm.exe следующий:

TASM [ключи] имя_исходного_файла [, имя_объектного_файла] [, имя_файла_листинга] [, имя_файла_перекрестных_ссылок]

tasm.exe prg_6_l,, n u l,

Ключ /z разрешает вывод на экран строк исходного текста программы, в которых ассемблер обнаружил ошибки.

Assembler #1: Введение

Ключ /zi управляет включением в объектный файл номеров строк исходной программы и другой информации, не требуемой при выполнении программы, но используемой отладчиком.

Компоновка программы

Полный формат командной строки для запуска компоновщика:

TLINK [ключи] список объектных файлов [,имя загрузочного модуля] [,имя файла карты] [,имя файла библиотеки] [,имя файла определений] [,имя ресурсного файла]

Отладка программы

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

Запустить программу в отладчике можно в одном из четырех режимов:

1. Безусловное выполнение (F9).

2. Выполнение по шагам (F7, F8).

3. Выполнение до текущего положения курсора (F4).

4. Выполнение с установкой точек прерывания (F2, F9).

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:

Источник: studopedia.ru

4 Процесс ассемблирования и выполнения программы

1) Создать в любом pедактоpе пpогpамму на ассемблеpе т.е. символьный файл- исходный модуль. Имя файла должно иметь pасшиpение — .ASM.

2) Файл с pасшиpением .ASM стpанслиpовать т.е. набpать на клавиатуpе:

TASM Имя файла.ASM /Z .

После тpансляции на экpане появится сообщение:

Assembling file: транслируемый файл.

Error messages: сообщения об ошибках. ( None — нет ошибок)

Warning messages: предупреждающее сообщение.

Passes: количество страниц.

Remaining memory: занимаемая память.

Результатом работы транслятора будет файл с расширением — .OBJ — объектный модуль. После трансляции можно получить листинг — отпечатанную программу с относительными адресами и машинным кодом.

3) Странслированный без ошибок файл необходимо обработать компоновщиком т.е. набрать на клавиатуре:

Как работает язык программирования(Компилятор)? Основы программирования.

TLINK Имя файла.OBJ /V .

Результатом будет файл с расширением .EXE или .COM — загрузочный модуль. Эти программы готовы к выполнению на ЭВМ. Их имена можно набрать на клавиатуре и нажать Enter. Выполнение команд программы можно посмотреть в отладчике.

4) Для работы в отладчике необходимо иметь программу с расширением .EXE или .COM. Набрать на клавиатуре:

TD Имя файла.EXE

Для того, чтобы посмотреть какие ключи имеют программы TASM и TLINK надо набрать их имена на командной строке и нажать Enter.

4.1 Работа с отладчиком программ

Нижнее меню в отладчике — меню функциональных клавиш.

Читайте также:
Программа как pro tools

Значения некоторых функциональных клавиш:

F7 — просмотр текста программы без ее выполнения;

F8 — выполнять по шагам программу т.е. по программе перемещается полоса выбора (синяя) и будет выполнена та команда ниже которой эта полоса размещена. После выполнения команды на экране появляется содержимое регистров, флагов и адpес следующей на очереди команды;

F10 — выход в главное, верхнее меню.

Запускаются команды или с помощью мыши или с помощью куpсоpа на клавиатуре.

Курсором выбирается нужная команда и нажимается клавиша Enter или нажимается левая крайняя кнопка мыши, если выбоp был мышью.

В верхнем меню по команде FILE можно открыть любой файл, если он не был указан в команде TD при запуске отладчика.

По команде VIEW появляется еще меню, в котором Dump — команда получения содержимого памяти по соответствующему адресу заданному в регистре DS, т.е. содержимое данных определенных в нашей программе. Данные начинаются с нулевого относительного адреса. Эти данные можно изменять.

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

Курсором или мышкой выбрать изменяемый регистр и перевести курсор на изменяемое данное, на клавиатуре в появившемся окне набрать новое данное и нажать Enter.

Выход из отладчика по нажатию Alt-X.

Выход из любой команды по нажатию клавиши Esc.

Переход в верхнее меню можно осуществлять с помощью мыши.

Закрыть появившееся окно можно или нажать ALT-F3 или надо перевести мышкой курсор в левый угол окна на зеленый квадрат и нажать левую кнопку мыши.

Источник: studfile.net

Тема 6.4. Процесс ассемблирования

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

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

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

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

Читайте также:
Программа подготовки инструкторов по вождению автомобилей

При втором подходе к решению этой проблемы, программа на языке ассемблера читается один раз и пре­образуется в промежуточную форму, и эта промежуточная форма сохраняется в таблице в памяти. Затем совершает второй проход, но уже не по исходной про­грамме, а по таблице. Если физической памяти доста­точно для этого подхода, то будет сэкономлено время, затрачиваемое на процесс ввода-вывода. Если требуется вывести листинг, тогда нужно сохранить полнос­тью исходное выражение, включая комментарии. Если листинг не нужен, то про­межуточную форму можно сократить, оставив только «голые» команды.

Еще одна задача первого прохода – сохранить все макроопределения и расши­рить вызовы по мере их появления. Следовательно, в одном проходе происходит и определение символов, и расширение макросов.

Для компиляции программы недостаточно замены команд языка программирования на машинный код – необходимо отслеживать метки и макровызовы. Для этого применяют двухпроходовую стратегию.

Вопросы для самоконтроля

1. Можно ли следующую программу ассемблировать в два прохода?

2. Подумайте, как можно поместить макроассемблер в бесконечный цикл?

3. Что значит проход компилятора? Объясните смысл каждого прохода.

Раздел 7. Архитектуры компьютеров параллельного действия

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

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

Чтобы решать более сложные задачи, разработчикам приходится разрабатывать все новые и новые вычислительные системы с различными способами организации. Невозможно построить компьютер с одним процессором и временем цикла в 0,001 нс, но зато можно построить компьютер с 1000 процессорами, время цикла каждого из которых составляет 1 нс.

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

Тема 7.1. Организация конвейерных и параллельных вычислений

В результате изучения данной темы Вы будете:

  • понимать, каким образом можно преодолеть физический барьер быстродействия одного процессора;
  • знать основные формы параллелизма выполнения операций.

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

Читайте также:
Программное обеспечение эвм это совокупность программ

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

Конвейеры

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

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

На Рис. 7.1, а) изображен конвейер из 5 блоков, которые называютсястадиями. Стадия С1 вызывает команду из памяти и помещает ее в буфер, где она хранится до тех пор, пока не будет нужна. Стадия С2 декодирует эту команду, определяя ее тип и тип операндов, над которыми она будет производить определенные действия.

Стадия СЗ определяет местонахождение операндов и вызывает их или из регистров, или из памяти. Стадия С4 выполняет команду, обычно путем провода операндов через тракт данных. И, наконец, стадия С5 записывает результат обрат­но в нужный регистр.

Рис. 7.1. Конвейер из 5 стадий (а); состояние каждой стадии в зависимости от количества пройденных циклов (б)

На Рис. 7.1, б) показано, как действует конвейер во времени. Во время цикла 1 стадия С1 работает над командой 1, вызывая ее из памяти. Во время цикла 2 ста­дия С2 декодирует команду 1, в то время как стадия С1 вызывает из памяти коман­ду 2. Во время цикла 3 стадия СЗ вызывает операнды для команды 1, стадия С2 декодирует команду 2, а стадия С1 вызывает третью команду. Во время цикла 4 стадия С4 выполняет команду 1, СЗ вызывает операнды для команды 2, С2 деко­дирует команду 3, а С1 вызывает команду 4. Наконец, во время пятого цикла С5 записывает результат выполнения команды 1 обратно в регистр, тогда как другие стадии работают над следующими командами.

Конвейеры позволяют найти компромисс междувременем ожидания (сколь­ко времени занимает выполнение одной команды) ипропускной способностью процессора (сколько миллионов команд в секунду выполняет процессор). Если время цикла составляет Т нс, а конвейер содержит n стадий, то время ожидания составит n×Т нс, а пропускная способность – 1000/Т млн команд в секунду.

Источник: zdamsam.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru