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

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

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

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

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

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

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

Т. к. ведущая 1 в поле FRAC кодироваться не будет, записаны5будут следующие, выделенные серым цветом, биты 1.1001100(1100)2. Не вмещающаяся в поле последовательность битов 00(1100)2 меньше 1(0)2 поэтому округлениевыполняется к меньшему число, т. е. к 1.100112.Таким образом, искомая кодировка для -⅕ имеет вид 1_0100_10011.73Представляем 105 в виде суммы степеней двойки и переводим в двоичное представление 10510  64  32  8  1  11010012 . В виде трех множителей число представится как 10510  (1)0 1.1010012  26 . EXP= 6 + bias|7 = 13 = 11012.В записи мантиссы последняя единица не помещается в поле FRAC, что означаетнеобходимость искать ближайшее четное число. Выпишем (в порядке убывания),какие представимые заданной кодировкой числа окружают мантиссу.1.1010102M = 1.10100121.1010002Как видно, после приведения к предоставленным размерам большее число оказывается оканчивающимся на 1, а меньшее – на 0.

Таким образом, округляем мантиссу к 1.1010002 и заносим последовательность выделенных серым цветом битов вполе FRAC.Собрав все поля, получаем для числа 105 искомую кодировку 0_1101_101002.Сопроцессор x87Обработка чисел с плавающей точкой в архитектуре IA-32 выполняется либо командами сопроцессора x87, либо векторными командами расширений SSE, позволяющими одновременно обрабатывать несколько чисел. На момент 2014 года было последовательно произведено пять расширений набора команд: SSE, SSE2, SSE3,SSSE3, и SSE4. Современные версии компилятора GCC отдают предпочтение именно этой группе команд, как более производительной, но если пользователь (в целях совместимости с более ранними версиями процессоров) укажет в качестве целевого процессора i386, в построении исполнимой программы будут использоваться команды сопроцессора x87.Изучение команд SSE выходит за рамки данного курса, тогда как сопроцессор x87реализует ряд идей, делающих его кардинально отличающимся от x86.

Исторически сопроцессор был реализован отдельным кристаллом, но уже в Pentium он былокончательно интегрирован с основным процессором в рамках одного кристалла.Однако интеграция не затронула набор команд, изначально разработанный наборкоманд функционирует до сих пор. В наборе команд можно выделить подмножество, позволяющее работать с x87 как с безадресным, стековым процессором.

Основное внимание в дальнейшем будет уделено именно этим командам.Сопроцессор x87 содержит 8 регистров для размещения чисел с плавающей точкой. Помимо этих регистров есть еще три служебных регистра: управляющий регистр, регистр состояния и регистр признаков.74Регистры для данных организованы в виде аппаратно поддерживаемого стека. Регистр признаков содержит биты, описывающие состояние регистров данных: заняты они или свободны. Изначально все восемь регистров считаются свободными.Именование регистров меняется после того, как на верхушку стека было помещеноновое значение (команда FLD) или, наоборот, значение было извлечено (командаFSTP).

Обмен данными возможен только с памятью: на стек регистров x87 невозможно поместить непосредственно закодированную в команде величинуконстанту или переслать данные из регистров x86. Верхушка стека регистров именуется как ST0, следующий за ним регистр – ST1 и так далее, до последнего занятогорегистра. После помещения на стек нового значения оно оказывается в ранее свободном регистре ST0, прежний регистр ST0 начинает называться ST1 и т. д.Операции над числами, расположенными на стеке, выполняются командами, которые не содержат в себе явно закодированных операндов – неявными операндами являются значения из верхних регистров стека.Пример 5-2 Взятие модуля числаТребуется взять по модулю число двойной точности, расположенное в статическойпамяти.РешениеДля взятия модуля воспользуемся безадресной командой FABS, а для пересылокданных командами FLD и FSTP.

Все команды x87 имеют префикс F. Суффикс P указывает на то, что при выполнении команды на верхушке стеке освобождается одинрегистр и все имена оставшихся регистров «сдвигаются» описанным выше образом.section .bssvar resq 1; резервируем в статической памяти 8 байтsection .textfinit;fldqword [var] ;fabs;;fstp qword [var] ;;инициализируем сопроцессорпомещаем на стек регистров значение из памятиберем по модулю значение из верхнего регистра ипомещаем туда же полученный результатпересылаем в память содержимое занятого регистраи освобождаем этот регистрПосле выполнения приведенных команд состояние стека регистров вернется к начальному состоянию – все регистры будут свободны.Особенности кодировки чисел с плавающей точкой позволяют брать модуль безиспользования x87, поразрядными битовыми командами x86.75Пример 5-3 Разность чиселТребуется вычислить разность двух чисел с плавающей точкой одинарной точности. Разность необходимо расширить до двойной точности и сохранить в третьейпеременной соответствующего размера.

Все переменные расположены в статической памяти.РешениеДля вычисления разности будет использована команда FSUBP, которая вычисляетвеличину ST1 – ST0. Поскольку до вычисления разности на стеке было занято дваверхних элемента, а для размещения результата требуется всего один, в результатевыполнения команды один элемент стека освобождается, во второй (ставшийверхним) записывается результат.Другой важной особенностью x87 является то, что вычисления по умолчанию происходят в пределах расширенной точности (80 битов на число).

Точность вычислений задается в управляющем регистре и на практике не меняется после того, каксопроцессор был инициализирован командой FINIT. Преобразования типов происходят в момент пересылок данных между регистрами и памятью: команды FLD иFSTP выполняют эти преобразования согласно явно заданным размерам операнда.Допустимые спецификаторы размера операндов: DWORD, QWORD, TWORD. Переменныеразмера TWORD в рассматриваемых примерах не используются; данный формат уникален для сопроцессора x87 и в других распространенных архитектурах не применяется.section .bssx resd 1y resd 1z resq 1section .textfinitflddword [x]flddword [y]fsubpfstpqword [z]; резервируем 4 байта для первой переменной x; резервируем 4 байта для второй переменной y; резервируем 8 байт для сохранения результата;;;;;;;инициализируем сопроцессорst0 = xst0 = y, st1 = xВычисляем st1 – st0, освобождаем один регистр,результат записываем в верхний элемент стекаСнимаем со стека регистров x87 верхнее значениеи записываем его в переменную zВычисление разности не потребовало явного задания имен регистров x87.

Большинство учебных задач, связанных с x87, можно решить именно в таком стиле.76Пример 5-4 Ввод и вывод чисел с плавающей точкойТребуется ввести с клавиатуры число с плавающей точкой двойной точности, вычислить обратную величину и напечатать ее значение с точностью до 12 знака. Используйте для хранения числа автоматическую память (стек).РешениеНапрямую использовать команды ввода-вывода из файла io.inc для работы с плавающей точкой не представляется возможным – поддержки плавающей точки уних нет.

Поэтому ввод-вывод будет организован через функции scanf и printf. Использование этих функций потребует предварительно выровнять стек, подготовитьформатные строки и вычислить место на стеке, где будет размещена переменная.Для помещения на стек регистров величины 1.0 используется специальная команда FLD1. Вычисление обратной величины будет осуществлено командой FDIVP, которая делит ST1 на ST0, освобождает один регистр, а во второй регистр, ставшийверхушкой стека, помещает частное.77%include 'io.inc'section .rodatainput_fmt db `%lf`, 0; Вводим 8-ми байтовое число с плавающей точкойoutput_fmt db `%.12f\n`, 0 ; Требуем вывести 12 знаков после точкиCEXTERN scanfCEXTERN printfsection .textglobal CMAINCMAIN:mov ecx, espand esp, 0xfffffff0push ecxsub esp, 28;;;;;12 байт не хватает для размещения во фреймепеременной и аргументов вызова– добавляем еще 16esp+20 – адрес, по которому будет размещеноведенное число.

Для хранения числа потребуется8 байт.leaeax, [esp+20]movmovcallcmpjne[esp+4], eaxdword [esp], input_fmtscanfeax, 1.epilog; Ничего не было введеноfinitfld1fld qword [esp+20]fdivpfstp qword [esp+20]movmovmovmovmovcall;;;;Поместили на стек регистров 1.0Поместили на стек регистров введенное числоПоделили 1.0 на введенное числоВыгрузили обратную величину в памятьeax, [esp+20]; Копируем вычисленную величину в пространство[esp+4], eax; аргументов. Поскольку число состоит из 8 байтeax, [esp+24]; копируем его двумя частями по 4 байта каждый[esp+8], eaxdword [esp], output_fmtprintf.epilog:add esp, 28pop ecxmov esp, ecxxor eax, eaxret; восстанавливаем исходное состояние стекаПример 5-5 Сравнение чисел с плавающей точкойРеализовать функцию int cmp(double a, double b), возвращающую 1, если a большеb, -1, если b больше a, и 0, если параметры равны.РешениеСравнение чисел с плавающей точкой можно провести двумя способами.Первый способ предполагает использование команды FUCOMPP, которая изначальноприсутствовала в x87.

Результаты ее работы запоминаются в регистре состоянияx87 и не могут быть сразу же использованы для изменения порядка выполнения78команд. Для этого необходимо последовательно передать состояние в регистр AX(команда FNSTSW AX), а затем переслать старший байт в EFLAGS (команда SAHF). В итоге биты, показывающие результаты сравнения, окажутся помещенными в ZF и CF,что позволяет использовать коды условий для беззнаковых чисел. Для практического кодирования такой способ сравнения относительно неудобен, посколькуприходится запоминать мнемоники крайне редко используемых команд. Положительной стороной является то, что команда FUCOMPP после сравнения освобождаетоба регистра (на что указывает суффикс PP), приводя стек регистров к первоначальному состоянию. Следует отметить, что существуют две другие разновидности команды сравнения: с одним суффиксом P FUCOMP и без суффикса FUCOM.Второй способ использует команду FUCOMIP STi (FUCOMI STi), которая появиласьтолько в Pentium Pro.

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