Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » 12_Макросредства языка Ассемблер

12_Макросредства языка Ассемблер (В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования), страница 8

PDF-файл 12_Макросредства языка Ассемблер (В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования), страница 8 Практика расчётов на ПЭВМ (37025): Книга - 1 семестр12_Макросредства языка Ассемблер (В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования) - PDF, страница 8 (37025) - СтудИзба2019-04-28СтудИзба

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

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

Просмотр PDF-файла онлайн

Текст 8 страницы из PDF

Предположим, что программисту приходится много работать с целочисленными скалярнымиматрицами различной размерности, с разным типом и значением элемента на главной диагонали.1Каждая скалярная (а, следовательно, квадратная) матрица в Ассемблере полностью определяетсяследующими атрибутами: размерностью матрицы N>1, будем считать этот параметр макроопределения обязательным; значением элемента на главной диагонали P (предполагаем, что все они одинаковые), еслион не задан, будем предполагать единичную матрицу; типом элемента матрицы Tip, в Ассемблере это db,dw или dd, если параметр опущен, будем предполагать матрицу слов (dw);именем матрицы Name (точнее, это имя первого элемента матрицы), если имя не задано, топод матрицу будет зарезервирована безымянная область памяти.

Поймите, почему имяName нельзя сделать меткой, поставленной перед макрокомандой.Следовательно, для порождения, например, единичной матрицы с именем My_Mat из двойныхслов размером 5х5 можно использовать макрокомандуScalMat 5,,dd,My_MatСоответствующее макроопределение может выглядеть таким образом:ScalMat macro N,P,Tip,Namelocal Rifb <N>%out Нет размера! 2.errexitmendifif type N NE 0 or N LT 2%out Плохая размерность!.errexitmendififb <P>%out Единичная матрица!R=11Напомним, что квадратная матрица является скалярной, если все её элементы вне главной диагоналиравны нулю.

Простейшим примером скалярной матрицы является единичная матрица.2Напомним, что русские буквы в строках надо использовать с большой осторожностью, наш "иностранный" Ассемблер MASM 4.0 может воспринимать их плохо и даже зацикливаться, мы использовали диагностикуна русском языке только для наглядности изложения материала.22elseR=Pendififb <Tip>%out Матрица слов!Name dw R,(N-1) dup (N dup (0),R)elseName Tip R,(N-1) dup (N dup (0),R)endifendmВот теперь в сегменте данных (как, впрочем, и в любом другом сегменте) можно резервироватьобласти памяти под скалярные матрицы нашими макрокомандами, например:Data segmentXdw?ScalMat 10,-1,db,Neg_10x10_Matrix.

. .Data ends12.1. Сравнение процедур и макроопределенийКак мы уже говорили, на Ассемблере один и тот же алгоритм программист, как правило, можетреализовать как в виде процедуры, так и в виде макроопределения. Процедура будет вызываться командой call с передачей параметров по стандартным или нестандартным соглашениям о связях, амакроопределение – макрокомандой, также с заданием соответствующих параметров. Сравним этидва метода разработки программного обеспечения между собой, оценим достоинства и недостаткикаждого из них.Для изучения этого вопроса рассмотрим пример какого-нибудь простого алгоритма и реализуемего двумя указанными выше способами. Пусть, например, надо реализовать оператор присваиванияax:=max(X,Y), где X и Y – знаковые целые значения размером в слово. Сначала реализуем этотоператор в виде функции со стандартными соглашениями о связях, например, так:MaxL:Maxprocpushmovmovcmpjgemovpopretendpnearbpbp,spax,[bp+6]ax,[bp+4]Lax,[bp+4]bp4Тело нашей функции состоит из 8 команд, а каждый вызов этой функции занимает 3 или большеечисло команд, например:; ax:=Max(A,B)push Apush Bcall Max; ax:=Max(Z,-13)push Zmovax,-13push axcall MaxРеализуем теперь нашу функцию в виде макроопределения, например, так (не будем приниматьво внимание, что это макроопределение будет неправильно работать для вызовов вида Max Z,ax ,Вы уже знаете, как можно исправить такую ошибку с помощью средств условной компиляции):Maxmacro X,Y23localmovcmpjgemovLax,Xax,YLax,YL:endmКак видим, каждый вызов нашего макроопределения будет порождать макрорасширение в четыре команды, а каждый вызов процедуры занимает 3-4 команды, кроме того, сама процедура имеетдлину 8 команд, да ещё и использует стековый кадр.

Таким образом, для коротких алгоритмов выгоднее реализовывать их в виде макроопределений.1 Всё, конечно, меняется, если длина макрорасширения будет хотя бы 10 команд. В этом случае, если, например, в нашей программе содержится 20макрокоманд, то в сумме во всех макрорасширениях будет 20*10=200 команд. В случае же реализации алгоритма в виде процедуры (пусть её длина будет не 10, а даже 20 команд) и 20-ти вызововэтой процедуры нам потребуется всего 20*4+20=100 команд. Получается, что для достаточносложных алгоритмов реализация в виде процедуры более выгодна, что легко понять, если учесть, чтопроцедура присутствует в памяти только в одном экземпляре, а каждая макрокоманда требует своегоэкземпляра макрорасширения, которое будет располагаться в программе на месте этой макрокоманды.С другой стороны, однако, макроопределения предоставляют программисту такие уникальныевозможности, как настройка алгоритма на типы передаваемых параметров, лёгкую реализацию переменного числа параметров, хорошую выдачу диагностик об ошибочных параметрах.

Такие возможности для гибкого и надёжного программирования весьма трудно и неэффективно реализовываются спомощью процедур функций.Исходя из всего вышеизложенного, наиболее перспективным является гибридный метод. Приэтом надо реализовать алгоритм в виде макроопределения, в котором производится настройка на типы параметров и выдачу диагностики (как мы видели, такие действия не порождают дополнительныхкоманд в полученной программе), а потом, если нужно, вызывается процедура для реализации основной части алгоритма. Именно так устроены достаточно сложные макроопределения для ввода ивывода целых чисел inint и outint, которыми Вы часто пользуетесь (с макроопределениями дляэтих макрокоманд можно ознакомиться по книге [5]).На этом мы закончим наше по необходимости краткое изучение макросредств языка Ассемблера,ещё раз напомним, что необходимо тщательно изучить эту тему в учебнике по языку Ассемблера.Вопросы и упражнения1.2.3.4.Что такое Макропроцессор?Как для макрокоманды ищется соответствующее ей макроопределение?Чем являются фактические параметры макрокоманды?Что делает макропроцессор, если фактических параметров в макрокоманде больше или меньше, чем формальных параметров в макроопределении?Что такое макрорасширение?Как при помощи макросредств можно поднять уровень языка Ассемблер, приблизив его к языкам высокого уровня?Что такое средства условной компиляции и для чего они предназначены?Что такое локальные имена и для чего они нужны?Как программист может прекратить процесс построения макрорасширения, и когда это нужноделать?Что такое переменная периода генерации, когда они порождаются и уничтожаются?5.6.7.8.9.10.1Тот факт, что короткие алгоритмы иногда выгоднее реализовывать не в виде процедур и функций, а ввиде макроопределений, нашёл отражение и при разработке языков программирования высокого уровня.

Так, внекоторых языках высокого уровня, существуют так называемые встраиваемые (inline) процедуры и функции, вызов которых во многом производится по тем же правилам, что и вызов макроопределений.2411.12.13.14.15.16.17.18.19.20.21.Значения какого типа могут принимать переменные периода генерации в нашем Макроассемблере?Как сделать макроопределение с переменным числом параметров?Что такое макрооператор? Приведите примера макрооператоров в нашем Ассемблере.Используя средства условной генерации (условные макрооператоры), исправьте описанное вэтой главе макроопределение с именем maxn так, чтобы оно правильно обрабатывало регистрax в списке своих фактических параметров.Перепишите макроопределение maxn без использования вспомогательного макроопределенияcmpax. Надо сразу сказать, что для этого требуется хорошее знание языка Ассемблера.Когда можно считать, что у фактического параметра макроопределения есть тип и для чегоможет понадобиться настроить макроопределение на типы передаваемых ему фактических параметров?Как работает макроцикл irpc ?Обоснуйте, почему перед макрокомандой нельзя ставить метку без двоеточия (т.е.

метку области памяти), хотя саму макрокоманду можно использовать, например, в сегменте данных. Дляэтого нужно вспомнить, как обрабатываются макрокоманды с метками.Как работает оператор Ассемблера .type?Когда для реализации некоторой подзадачи следует использовать процедуру, а когда макроопределение?Объясните, для чего предназначено показанное ниже макроопределение и как к нему следуетобращаться:BegProc macro Name,Reg,SpecName proc Specpush bpmov bp,spirp i,<Reg>push iendmendm.

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