BAULA1 (1110624), страница 26

Файл №1110624 BAULA1 (Лекции Баулы) 26 страницаBAULA1 (1110624) страница 262019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 26)

1 Иногда в наших примерах мы, следуя учебнику [5], называли так же и сам сегмент стека. Некоторые компиляторы с Ассемблера (например, MASM-4.0) допускают это, если по контексту могут определить, что это именно имя пользователя, а не служебное слово. Другие компиляторы (например, Турбо-Ассемблер) подходят к этому вопросу более строго и не допускают использование служебных слов в качестве имён пользователя. Все служебные слова Ассемблера мы выделяем жирным шрифтом.

1 Отметим и другие полезные имена констант в языке Ассемблера: byte=1,word=2,dword=4,abs=0.

2 Под основной программой мы имеем в виду то место нашей программы, где вызывается процедура, т.е. возможен и случай, когда одна процедура вызывает другую (в том числе рекурсивно саму себя).

1 В языке Турбо-Паскаль для этой цели можно использовать оператор присваивания bx:=@X[1]

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

2 Является ли адрес близким (т.е. смещением в сегменте данных) или же дальним (значение сегментного регистра и смещение) обычно специфицируется при написании процедуры на языке высокого уровня. Ясно, что, скорее всего во внешнюю процедуру будут передаваться дальние адреса.

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

2 При обратном порядке записи фактических параметров в стек (как в языке С) удаление из стека параметров обычно делает не процедура, а основная программа, т.к. это легче реализовать для переменного числа параметров. Плохо в этом случае то, что такое удаление приходится выполнять в каждой точке возврата из процедуры, что может существенно увеличить размер кода программы.

1 На языке Турбо-Паскаль так написать нельзя, массивы A и B не поместятся в один сегмент данных, а размещать статические переменные в разных сегментах Турбо-Паскаль не умеет.

1 Даже если это деление на ноль, всё равно можно считать, что центральный процессор закончил выполнение этой команды, хотя значение частного при этом, конечно, не определено. Для особо любознательных студентов можно также сказать, что некоторые старые ЭВМ могли начать реакцию на прерывание и без завершения текущей команды (например, если это "длинная" команда, выполнение которой занимает много времени, в этом случае выполнение такой команды могло быть продолжено с прерванного места).

1 Хотя некоторые программы могут выполняеться полностью в режиме закрытых прерываний, но не надо забывать, что существуют прерывания, которые нельзя замаскировать.

1 Точнее контекстом процесса, о процессах Вы узнаете в курсе "Системное программное обеспечение".

2 В частности, сигналом с таким же номером N, при этом произойдёт повторный вход в начало этой же самой процедуры-обработчика. Те программы, которые допускают такой повторный вход в своё начало (не путать это с рекурсивным вызовом!), называются повторно-входимыми или реентерабельными. Программы обработки прерываний для младших моделей нашего семейства могли и не быть реентерабельными, что порождало известные проблемы, которые мы здесь обсуждать не будем.

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

1 Точнее, лишним будет только использование адресуемого регистра центрального процессора (ax,bx и т.д.). Как мы знаем, двухадресные команды формата память-память КОП оp1,op2 обязательно требует для своего выполнения использования служебного регистра центрального процессора, (мы обозначали этот регистр R1) и выполняются по схеме:

R1:=op1; R1:=R1 КОП op2; op1:=R1.

1 Такое значительное уменьшение сложности алгоритма верно только для младших моделей нашего семейства. В старших моделях появилась специальная быстродействующая область памяти – кэш, в которую автоматически помещаются, в частности, последние выполняемые команды. Таким образом, весь наш первоначальный цикл пересылки из 5 команд будет находиться в этой кэш-памяти, скорость чтения из которой примерно на порядок больше скорости чтения из оперативной памяти. Другими словами, обращения в оперативную память за командами при выполнении цикла пересылки массива в старших моделях тоже производиться не будет, и сложность алгоритма также приближается к 2*N обменов. Более подробно с памятью типа кэш Вы познакомитесь в курсе "Системное программное обеспечение".

1 Для двух команд сдвига в этом наборе будет 9 или 17 бит, это мы далее отметим особо.

2 Для любознательных отметим, что для описания работы логических команд более подходит оператор цикла параллельного Фортрана, например: for all i do op1[i]:=op1[i]<>op2[i], который предписы­вает выполнить тело цикла одновременно (параллельно) для всех значений параметра цикла i.

1 В старших моделях нашего семейства у команд сдвига допускается также второй операнд формата i8. Мы в своих примерах этим форматом пользоваться не будем.

1 Из этого правила совсем немного исключений, с большинством из них мы познакомимся при изучении макросредств языка Ассемблера.

2 Точнее на объектный язык, о чём мы будем говорить далее.

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

1 Это верно и для случая, когда один модуль использует константу, определённую в другом модуле, так как константа – это тоже целое число (непосредственное значение в поле адреса i8 или i16).

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

1 Иногда говорят, что имя A объявлено в сегменте Data (правда термин "объявить имя" используется в основном в языках высокого уровня). Объявление имени в некотором сегменте, в отличие от описания этого имени, не требует выделения для переменной A памяти в сегменте. Для Ассемблера это является указанием (директивой) о том, что во время счёта программы данная переменная будет находится в памяти именно этого сегмента.

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

1 Если объектных модулей очень много, то существует более компактный способ задать их, не перечисляя их все в строке вызова редактора внешних связей.

1 Вообще говоря, склеиваемые сегменты должны ещё принадлежать к одному и тому же классу сегментов. В наших примерах это выполняется, для более полного изучения понятия класса сегмента необходимо обратиться, например, к учебнику [5].

2 Заметим, что одноимённые сегменты с параметром public могут встречаться и внутри одного модуля. В этом случае такие сегменты тоже склеиваются, но эту работу, как правило, проводит сама программа Ассемблера.

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

2 В загрузочном модуле могут не храниться "пустые" сегменты данных, которые состоят только из директив резервирования памяти без начальных значений. Для сегментов данных, в которых есть области памяти, как с начальными значениями, так и без начальных значений, лучше сначала описывать области памяти с начальными значениями. Это даёт возможность помещать такой сегмент данных в загрузочный модуль в "урезанном" виде, все области данных без начальных значений в файл не записываются, что позволяет уменьшить размер файла загрузочного модуля. Разумеется, в паспорте загрузочного модуля хранится полная информация обо всех его сегментах (в частности, об их длине).

1 Максимальный объём дополнительной памяти указывается из соображений безопасности, чтобы из-за ошибок в программе она не стала запрашивать в цикле всё новые и новые блоки памяти, что может сильно помешать счёту других программ.

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

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

1 Виртуальная память позволяет использовать в программе диапазон адресов памяти, превышающий физический объём памяти компьютера. Например, при физической памяти 220 байт (как в нашей младшей модели) можно использовать адресное пространство в 224 байт. С виртуальной памятью Вы познакомитесь в следующем семестре в курсе "Системное программное обеспечение".

2 Есть и другая причина широкого распространения схемы счёта с динамическим связыванием и динамической загрузкой модулей, мы рассмотрим эту причину при изучении работы ЭВМ в так называемом мультипрограммном режиме.

1 В современных технологиях программирования проверка того, что существуют все модули, вызов которых возможен при счёте программы, может оказаться весьма трудоёмкой операцией. Дело в том, что эти модули могут, в принципе, находится где угодно, например, в сетевой (удалённой) библиотеке объектных модулей на другом конце Земли.

1 Точнее, как мы уже говорили, ищется объектный модуль, в котором расположена эта процедура.

1 Эта схема может быть неприемлема, например, для так называемых программ реального времени, которые предназначены для управления быстрыми внешними устройствами (ракетой, химическим или ядерным реактором и т.д.).

1 Как мы узнаем позже, на однопроцессорной ЭВМ в каждый момент времени компилируется только одна программа, но по сигналам прерывания от внутренних часов компьютера может производиться быстрое переключение с одной программы на другую, так что создаётся впечатление, что компилируются (хотя и более медленно) сразу несколько программ.

2 Макросредства могут использоваться также и в формальных языках, не являющихся языками программирования, но этот вопрос далеко выходит за рамки нашего курса.

3 В наших программах мы выделяли имена макрокоманд жирным шрифтом (finish,inint и т.д.), хотя это, конечно, не совсем правильно, так как это не служебные слова Макроасемблера.

4 Если у макрокоманды есть метка, то считается, что эта метка задаёт отдельное предложение Ассемблера, состоящее только из данной метки. Другими словами, макрокоманда с меткой:

<метка>[:]<имя макрокоманды> [<список фактических параметров>]

эквивалентна двум таким предложения Ассемблера:

<метка>[:]

<имя макрокоманды> [<список фактических параметров>]

1 Это несколько упрощённое описание действий Макропроцессора при передаче параметров, позже мы сделаем существенные уточнения.

1 Вообще говоря, на самом деле Макропроцессор и Ассемблер обрабатывают программу одновременно, предложение за предложением. Как мы вскоре узнаем, первыми каждое предложение обрабатывают специальные программы Ассемблера, которые называются лексическим и синтаксическим анализаторами, а затем, если нужно, это предложение обрабатывает Макропроцессор. Однако конечный этап компиляции – генерация объектного модуля – выполняется Ассемблером уже после полного завершения работы Макропроцессора.

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

2 Вообще говоря, во время компиляции стандартный вывод stdout должен быть связан с файлом листинга, а стандартный вывод об ошибках stderr – с экраном дисплея. Однако некоторые Ассемблеры (и среди них, к сожалению, MASM-4.0) могут во время компиляции связывать стандартный вывод stdout тоже с экраном, а вывод в листинг производить путём указания имени конкретного файла. В этом случае диагностика, заданная директивой %out в макрорасширение (и в листинг) не попадёт, а будет дважды выведена на экран.

Характеристики

Тип файла
Документ
Размер
1,27 Mb
Материал
Тип материала
Высшее учебное заведение

Список файлов лекций

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6367
Авторов
на СтудИзбе
310
Средний доход
с одного платного файла
Обучение Подробнее