Chapter_07 (1110559), страница 2

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

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

Именно поэтому описание сегмента является важной синтаксической конструкцией языка Ассемблер.Как мы уже знаем, в младшей модели нашего семейства ЭВМ в каждый момент времени определены четыре активных (или текущих) сегмента памяти, на которые указывают соответствующиесегментные регистры с именами CS, DS, SS и ES. Таким образом, перед непосредственной работой ссодержимым любого сегмента требуется установить на его начало определённый сегментный регистр, до этого нельзя ни писать в этот сегмент, ни читать из него. С другими сегментами, кромеэтих четырёх текущих (если они есть в программе), работать в этот момент нельзя, при необходимости доступа к ним нужно менять (перезагружать) содержимое соответствующих сегментных регистров.Стоит заметить, что сегменты могут перекрываться в памяти ЭВМ и даже полностью совпадать(накладываться друг на друга).

Однако максимальный размер сегмента в младшей модели нашегосемейства ЭВМ равен 64 Кбайта, и, если сегменты будут перекрываться, то одновременно для работы будет доступно меньшее количество оперативной памяти.3 Заметим, что пересечение сегментовникак не влияет на логику работы центрального процессора.В соответствии с принципом Фон Неймана, мы имеем право размещать в любом из сегментовпамяти как числа, так и команды. Такой подход, однако, ведёт к плохому стилю программирования,программа перестаёт легко читаться и пониматься программистами, её труднее отлаживать и модифицировать. Кроме того, как мы вскоре узнаем, программа от этого становится ещё и длиннее. В нашей архитектуре программирование становится более лёгким, а сами программы компактнее, еслиразмещать команды программы в одних сегментах, а данные – в других.

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

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

В нашей же версии MASM-4.0 такие "продвинутые" возможности отсутствуют, и студентам приходится всё делать вручную, что, по нашему мнению,благотворно сказывается на усвоении ими учебного материала.2Точнее, один модуль мы будем писать сами, а второй модуль с именем ioproc, обеспечивающий операции ввода/вывода, будем брать в готовом виде и подключать к своей программе. Этот модель подробно описанв книге [5].3Полное перекрытие всех сегментов позволяет использовать при работе программы всего два сегментныхрегистра (CS и SS), но ограничивает полную длину программы величиной 216 байт. Такие маленькие выполняемые программы имеют на нашем компьютере (точнее, в соответствующей операционной системе) имена срасширением .com, в отличие от "больших" программ, имеющих расширение .exe.4может выбирать команды для выполнения только из сегмента, на который указывает регистр CS.Выбирать операнды для машинных команд можно из любого сегмента, однако в соответствии спринципом умолчания переменные в большинстве форматов команд, если прямо не указано противное, извлекаются из сегмента данных, на который указывает регистр DS.

Явное указание необходимости выбирать аргументы команды по другому сегментному регистру увеличивает длину команды на один байт, перед такой командой вставляется специальная однобайтная команда, котораяназывается префиксом (замены) сегмента.Итак, модуль в основном состоит из описаний сегментов. В сегментах находятся все команды иобласти памяти, используемые для хранения переменных. Вне сегментов могут располагаться толькотак называемые директивы языка Ассемблер, о которых мы будем говорить немного ниже.

Покалишь отметим, что чаще всего директивы не определяют в программе ни команд, ни переменных(именно поэтому они и могут стоять вне сегментов).1Описание каждого сегмента, в свою очередь, состоит из предложений (statement) языка Ассемблера. Каждое предложение языка Ассемблера занимает отдельную строчку программы, исключение из этого правила будет отмечено особо. Далее рассмотрим различные классы предложенийАссемблера.7.4. Классификация предложений языка АссемблерБудем классифицировать предложения Ассемблера по тем функциям, которые они выполняют впрограмме.

Заметим, что эта классификация немного отличается от той, которая приведена в рекомендованном учебнике [5].• Многострочные комментарии. Это единственная конструкция Ассемблера, которая можетзанимать несколько строк текста программы. Будем для унификации терминов считать её неким частным типом предложения, хотя не все авторы учебников по Ассемблеру придерживаются этой точки зрения.

Способ записи этих комментариев:COMMENT *< строки – комментарии >*здесь служебное имя COMMENT определяет многострочный комментарий, а символ * задаёт его границы, он эквивалентен символам начала и конца комментария { и } в языке Паскаль, этот символ недолжен встречаться внутри самого комментария. При необходимости использовать символ * внутрикомментария, надо вместо этого символа в качестве границ комментария выбрать какой-нибудь другой подходящий символ, например, & и т.д.• Команды. Почти каждому предложению языка Ассемблера этого типа будет соответствоватьодна команде на языке машины (в редких случаях получаются две "тесно связанных" команды). Какуже отмечалось, вне описания сегмента такое предложение встречаться не может.• Резервирование памяти.

Эти предложения также могут располагаться только внутри некоторого сегмента. В том сегменте, где они записаны, резервируются области памяти для хранения переменных. Это некоторый аналог описания переменных языка Паскаль. Заметим, что во многихучебниках такие предложения называют директивами резервирования памяти. Полные правила записи этих предложений надо посмотреть в учебнике [5], мы приведём лишь некоторые примеры скомментариями.ПредложениеA db ?Количество памяти1 байтB dw ?2 байта (слово)C dd ?4 байта (двойное слово)В этих примерах описаны переменные с именами A, B и C разной длины, которые, как и в стандарте языке Паскаль, не будут иметь конкретных начальных значений, что отмечено символом вопросительного знака в поле параметров.

Однако по принципу Фон Неймана ничто не мешает нам ра1Исключением, например, является директива include, на место которой подставляется некоторыйтекстовый файл. Этот файл может содержать описание целого сегмента или же наборы фрагментов программ(так называемые макроопределения).

С примером использования этой директивы мы вскоре познакомимся.5ботать напрямую с одним или несколькими байтами, расположенными в любом месте памяти. Например, командаmov ax,B+1будет читать на регистр ax слово, второй байт которого располагается в конце переменной B, апервый – в начале переменной C (надо помнить о "перевёрнутом" хранении слов в памяти!). Поэтому следует быть осторожными и не считать A, B и C отдельными, "независимыми" переменными всмысле языка Паскаль, это просто именованные области памяти. Разумеется, в понятно написаннойпрограмме эти области лучше использовать так, как они описаны, то есть с помощью присвоенныхим имён.В качестве ещё одного примера резервирования памяти рассмотрим предложениеD dw 20 dup (?)Оно резервирует в сегменте 20 подряд расположенных слов с неопределёнными начальными значениями.

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

Директивы используются программистом для того, чтобы давать программе Ассемблер определённые указания,задавать синтаксические конструкции и управлять работой Ассемблера при компиляции (переводе)программы на язык машины. В качестве примера рассмотрим директивы для объявления начала иконца описания сегмента с именем A:A segment...A endsЧастным случаем директивы мы будем считать и предложение-метку, которая приписывает имя(метку) непосредственно следующему за ней предложению Ассемблера.

Так, в приведённом нижепримере метка Next_Statement_Name является именем следующего за ней предложения, такимобразом, у этого предложения будет две метки (два имени):Next_Statement_Name:L: mov ax,2• Макрокоманды. Этот класс предложений Ассемблера относится к макросредствам языка,и будет подробно изучаться далее в нашем курсе. Пока лишь скажем, что на место макрокоманды притрансляции по определённым правилам подставляется некоторый набор (возможно и пустой) предложений Ассемблера.Теперь рассмотрим структуру одного предложения.

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

Тип файла
PDF-файл
Размер
751,57 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

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