Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Семинары по курсу «Архитектура ЭВМ и язык ассемблера» учебно-методическое пособие. Часть 2. - Е.А. Кузьменкова_ В.А. Падарян_ М.А. Соловьев

Семинары по курсу «Архитектура ЭВМ и язык ассемблера» учебно-методическое пособие. Часть 2. - Е.А. Кузьменкова_ В.А. Падарян_ М.А. Соловьев, страница 5

PDF-файл Семинары по курсу «Архитектура ЭВМ и язык ассемблера» учебно-методическое пособие. Часть 2. - Е.А. Кузьменкова_ В.А. Падарян_ М.А. Соловьев, страница 5 Архитектура ЭВМ (36554): Семинары - 2 семестрСеминары по курсу «Архитектура ЭВМ и язык ассемблера» учебно-методическое пособие. Часть 2. - Е.А. Кузьменкова_ В.А. Падарян_ М.А. Соловьев: Архитект2019-04-28СтудИзба

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

PDF-файл из архива "Семинары по курсу «Архитектура ЭВМ и язык ассемблера» учебно-методическое пособие. Часть 2. - Е.А. Кузьменкова_ В.А. Падарян_ М.А. Соловьев", который расположен в категории "". Всё это находится в предмете "архитектура эвм" из 2 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

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

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

Опишите29структуру struct person, которая позволит хранить всю информацию об одном человеке, и реализуйте фрагмент ассемблерного кода, который заполняет массивstruct person persons[N] по трем заданным массивам name, height и weight.Задача 2-6Даны следующие объявления на языке Си:struct swallow {int is_african : 1;int is_unladen : 1;double velocity;int id;};static struct swallow s[100];Считая, что компилятор под IA-32/Linux располагает битовые поля от младших битов в пределах 32-разрядного двойного слова, напишите на ассемблере фрагменткода, который любым известным вам способом отсортирует массив s по неубыванию значений поля velocity.Задача 2-7Пусть массив s из задачи 2-6 уже отсортирован по возрастанию значений поля id ивсе эти значения различны. По заданному числу static int myid, которое гарантированно встречается в массиве, найдите и напечатайте соответствующее значениеis_unladen:а) используя линейный поиск;б) используя бинарный поиск.Задача 2-8Компилятор GCC позволяет при помощи атрибута структуры packed указать, что выравнивание полей в структуре не производится.

В этом случае все поля структурырасполагаются подряд. Этот синтаксис не входит в стандарт языка Си. Пусть даныдве идентичные структуры sp и su, отличающиеся только наличием или отсутствием этого атрибута.struct sp {char c;short s;int i;} __attribute__((packed));struct su {char c;short s;int i;};struct sp sp_data;struct su su_data;Осуществите копирование значений из sp_data в su_data и обратно.30Задача 2-9Даны следующие определения на языке Си:enum { RGB, CMYK };struct color{int type; // RGB или CMYKunion{struct { double r, g, b; } rgb;struct { double c, m, y, k; } cmyk;} u;};static struct color clr;Реализуйте фрагмент ассемблерной программы, который печатает YES, если в переменной clr записан белый цвет (RGB (1, 1, 1) или CMYK (0, 0, 0, 0)), и NO иначе.313.Организация вызова функцийАппаратный стекАрхитектура IA-32 реализует поддержку аппаратного стека в памяти.

Регистр ESPявляется указателем верхушки стека, команды PUSH и POP выполняют пересылкуданных и сдвигают должным образом указатель верхушки стека. Стек растет вниз:при помещении новых данных на стек адрес верхушки уменьшается, при снятииданных – увеличивается.

При выполнении 32-разрядного кода естественной единицей данных на стеке является двойное слово. Принято изображать стек в виде«стопки» двойных слов.В каждый момент времени регистр ESP указывает на верхний элемент стека. Задавая положительное смещение относительно ESP, можно произвольным образомобращаться к содержимому стека. Отрицательные смещения относятся к свободной памяти. После снятия данных со стека содержимое ячеек памяти не меняется,происходит только перемещение указателя стека. Но в рамках логики стека содержимое памяти, лежащей ниже того места, на которое ссылается ESP, не определено.Пример 3-1 Пересылки без MOVНа стек помещено N > 1 целых чисел n0, n1, …, nN–1.

Последний элемент последовательности – верхушка стека. Переместите n0 на верхушку стека так, чтобы в результате получилась следующая последовательность: n1, …, nN–1, n0. Дополнительныеограничения: (1) при пересылках данных из памяти или в память разрешается использовать только команды PUSH и POP, (2) не разрешается использовать дополнительную память.РешениеБудем в цикле сдвигать на один шаг вниз по стеку (и вверх по адресам) элементыпоследовательности. Элемент i будет извлекаться, а на его место будет помещать32ся элемент i+1. После того, как будет извлечен последний элемент (n0), переместим указатель стека на конец последовательности и поместим его на верхушку стека.movpop.l:poppushmovaddloopsubpushecx, N-1edxeaxedxedx, eaxesp, 4.lesp, 4*(N-1)edx;;;;;;;;;;В цикле должно выполниться N-1 записей на стекВ edx помещаем элемент i+1Начинаем тело циклаВыгружаем на eax элемент iНа его место помещаем элемент i+1Перемещаем в edx элемент iПринудительно передвигаем верхушку стекаТело цикла выполняется N-1 разВозвращаем указатель стека на последний элементКладем на верхушку стека n0Соглашение вызова cdeclЛюбое соглашение вызова функции должно определить, как будут использоватьсяразличными функциями регистры, способ передачи аргументов вызова и возвращаемого значения и т.

д. Основным соглашением вызова на платформеIA-32/Linux является cdecl со следующими правилами.Для вызова функции используется команда CALL fname, где операнд fname – метканачала вызываемой функции. Для возврата в точку вызова – команда RET.Для передачи аргументов вызова используется стек. Аргументы расположены в«обратном» порядке: в момент вызова на верхушке стека находится первый аргумент, следом за ним – второй и т. д.

Для хранения аргументов используются двойные слова. Например, для параметров типа char, short, int, long будет использовано4 байта. Для типа long long – 8 байтов.Возвращаемое значение передается в вызвавшую функцию через регистр EAX.Автоматические локальные переменные размещаются на стеке, внутри фреймавызова функции. Если регистр ESP указывает на верхушку стека, что позволяет определить нижнюю границу фрейма, то регистр EBP используется для определенияверхней границы фрейма.Регистры EAX, ECX, EDX при необходимости должны сохраняться перед вызовом ввызывающей функции. Регистры EBX, ESI, EDI при необходимости должны сохраняться вызванной функцией.

Для хранения используется память во фрейме вызовафункции (далее слово «вызов» будет опускаться для краткости изложения). Регистры ESP и EBP используются для организации работы со стеком.Код функции можно разделить на три части: пролог, тело функции и эпилог. В прологе и эпилоге происходит создание нового фрейма, сохранение прежнего значе33ния EBP, в эпилоге освобождение фрейма и восстановление EBP. На рисунке приведено распределение памяти во фрейме, границы фрейма выделены жирными линиями.Фрейм начинается с адреса возврата, помещенного на стек командой call.

Сразу заним расположен сохраненный регистр EBP, на это место памяти указывает новоезначение, помещенное в EBP во время выполнения пролога. Далее в памяти расположены (если есть такая необходимость) сохраняемые в вызванной функции регистры и автоматические локальные переменные. Нижняя часть фрейма отводитсядля аргументов вызова функций (если из данной функции что-либо вызывается).Пример 3-2 Скалярное произведениеИспользуя соглашение cdecl, реализуйте функциюпроизведение двух массивов длины len.conv,вычисляющую скалярноеint conv(int *a, int *b, int len);РешениеПриведем рисунок, на котором будет показана структура фрейма функции conv.Над адресом возврата последовательно расположены три параметра.

Их значенияизвлекаются из памяти через задание нужного смещения от регистра EBP. Под сохраненным указателем фрейма EBP расположены ячейки, в которых были сохране34ны, а затем восстановлены значения регистров ESI и EDI. Указатель стека ESP показан на момент, когда расширенный сохранением регистров пролог закончился, иначалось выполнение тела функции.Само вычисление скалярного произведения организовано следующим образом. Врегистре EAX, предварительно обнуленном, накапливается произведение.

Для обращения к элементам массива используются регистры ESI, EDI (базовые адресамассивов) и ECX (счетчик цикла). Поскольку при вычислении скалярного произведения неважен порядок обхода элементов массивов, суммируем, начиная с большихиндексов.conv:pushmovpushpushmovmovmovmov.l:movimuladdlooppoppopmovpopretebpebp,esiediedi,esi,ecx,esp;;;dword [ebp+8] ;dword [ebp+12] ;dword [ebp+16] ;eax, 0Стандартный прологСохраняем esiСохраняем ediИзвлекаем со стека первый параметр aИзвлекаем со стека второй параметр bИзвлекаем со стека третий параметр len; В eax будем накапливать скалярное произведениеedx, dword [edi+4*ecx-4]edx, dword [esi+4*ecx-4]eax, edx.lediesiesp, ebpebp; Восстанавливаем сохраненный регистр edi; Восстанавливаем сохраненный регистр esi; Стандартный эпилог35Для организации цикла была использована команда LOOP, диапазон изменения регистра ECX – от len до 1. Поэтому к базовому адресу массива прибавляется смещение вида 4*ECX-4, что обеспечивает обращение к индексам len-1 … 0.Пример 3-3 Рекурсивная функцияИспользуя соглашение cdecl, реализуйте рекурсивную функцию int P(int n), вычисляющую для неотрицательного n соответствующий элемент последовательности Падована: P(0)  P(1)  P(2)  1, P(n)  P(n  2)  P(n  3) .РешениеПоскольку функция рекурсивная, потребуется формировать фактические аргументы вызова и сохранять во фрейме результат первого вызова, т.

к. регистр EAX будет«разрушен» во время второго вызова.Во фрейме должно быть выделено 4 байта для сохранения результатов первогорекурсивного вызова, т. к. по соглашению cdecl регистр EAX может быть разрушенво время второго вызова. Помимо того, во фрейме необходимо выделить 4 байтапод пространство аргументов (в данном случае для одного аргумента). Первый ивторой вызовы будут последовательно использовать это пространство.36P:push ebpmov ebp, espsub esp, 8mov eax, dword [ebp+8]cmp eax, 2jg.recurmov eax, 1jmp .end.recur:sub eax, 2mov dword [esp], eaxcall Pmov dword [ebp-4], eaxmov eax, dword [ebp+8]sub eax, 3mov dword [esp], eaxcall Padd eax, dword [ebp-4].end:mov esp, ebppop ebpret; Стандартный пролог;;;;;;Выделяем во фрейме еще два двойных словаЗагружаем параметр n в регистрДля n большего 2 передаем управление наметку .recurОстальные случаи: P(0)=P(1)=P(2)=1Завершаем выполнение; Помещаем в пространство аргументов величину n-2; Выполняем первый рекурсивный вызов; Сохраняем результат работы первого вызова; Помещаем в пространство аргументов величину n-3; Выполняем второй рекурсивный вызов; Складываем P(n-2)+P(n-3); Стандартный эпилогПример 3-4 Восстановление прототипа функцииТело Си-функции f, использующей соглашение вызова cdecl, состоит из следующего кода.*b = x;return c - y;Компилятор сгенерировал для данного фрагмента следующий ассемблерный код.movsxmovmovmovsubmovecx,eax,ebx,edx,eax,wordbyte [ebp+8]dword [ebp+16]dword [ebp+20]dword [ebp+12]ecx[edx], bx;;;;;;(1)(2)(3)(4)(5)(6)Восстановите прототип функции f.РешениеВ приведенном фрагменте Си-кода фигурируют четыре переменные.

Поскольку всеобращения к памяти используют положительные смещения относительно EBP (+8,+12, …) можно утверждать, что в Си-коде присутствуют только формальные параметры, автоматических локальных переменных не заводилось. Осталось опреде-37лить в каком порядке параметры расположены, какие типы у параметров и возвращаемого функцией значения.Согласно соглашению, возвращаемое значение передается через регистр EAX.

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