Главная » Все файлы » Просмотр файлов из архивов » Документы » В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования

В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования (В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования.doc), страница 36

2019-04-28СтудИзба

Описание файла

Документ из архива "В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования.doc", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 1 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Онлайн просмотр документа "В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования"

Текст 36 страницы из документа "В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования"

2 Разумеется, время чтения из ячейки памяти может не совпадать с временем записи в неё.

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

4 Тип real Турбо-Паскаля не подходит, потому что имеет длину 48 бит, а не 32, как нам нужно.

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

6 При этом правильно учитывается знак числа, например, (-8)*(-)= +

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

8 В некоторых ассемблерах допускается эквивалентная запись выражения A[M1][M2] в виде A[M1+M2] и даже в виде [A+M1+M2].

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

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

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

12 Исключением, например, является директива include, на место которой подставляется некоторый тек­стовый файл. Этот файл может содержать описание целого сегмента или же наборы фрагментов программ (так называемые макроопределения). С примером использования этой директивы мы вскоре познакомимся.

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

14 Можно дать загрузчику явное указание на размещение конкретного сегмента с заданного адреса оперативной памяти (мы изучим это позднее в нашем курсе), но это редко когда нужно программисту. Наоборот, лучше писать программу, которая будет правильно работать при любом размещении её сегментов в оперативной памяти.

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

16 В принципе переход возможен и при изменении значения только одного регистра CS, однако в практике программирования такие переходы практически не имеют смысла и не реализуются.

17 Необходимо учитывать, что в момент выполнения команды перехода счётчик адреса IP уже указывает на следующую команду, что, конечно, существенно при вычислении величины смещение. Но, так как эту работу выполняет программа Ассемблера, мы на эту особенность не будем обращать внимания.

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

19 Флаг чётности равен единице, если в восьми младших битах результата содержится чётное число двоичных единиц. Мы не будем работать с этим флагом.

20 Если не принимать во внимание то, что константа в Паскале имеет тип, это позволяет контролировать её использование, а в Ассемблере это просто указание о текстовой подстановке вместо имени операнда директивы эквивалентности.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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