Общая схема процесса разработки программы на ассемблере включает 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 Работа с отладчиком программ
Нижнее меню в отладчике — меню функциональных клавиш.
Значения некоторых функциональных клавиш:
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