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

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

Файл №1110587 Семинары по курсу «Архитектура ЭВМ и язык ассемблера» учебно-методическое пособие. Часть 1. - Е.А. Кузьменкова_ В.С. Махнычев_ В.А. Падарян (Семинары по курсу «Архитектура ЭВМ и язык ассемблера» учебно-методическое пособие. Часть 1. - Е.А. Кузьменкова_ В.С. Махнычев_ В.А. Падарян) 4 страницаСеминары по курсу «Архитектура ЭВМ и язык ассемблера» учебно-методическое пособие. Часть 1. - Е.А. Кузьменкова_ В.С. Махнычев_ В.А. Падарян (1110587) 2019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Тогда в регистре EAX будет размещено число0x01020304.РешениеТребуемый порядок размещения байтов является обратным по отношению к тому,который получится при считывании 32-разрядного числа с адреса a.Необходимо сформировать число в регистре с обратным порядком байтов.Воспользуемся для этого вспомогательной статической переменной и переместимотдельные байты таким образом, что при считывании из нее двойного слова будетполучаться необходимый порядок байтов в регистре.18section .bsstmp resd 1sectiona dbb dbc dbd db.data1234section .textmov al, byte [a]mov byte [tmp + 3], almov al, byte [b]mov byte [tmp + 2], almov al, byte [c]mov byte [tmp + 1], almov al, byte [d]mov byte [tmp], almov eax, dword [tmp]Средства ввода/выводаДля считывания данных, вводимых с клавиатуры, и печати данных на экран(консоль) предлагается набор команд, определенных в файле io.inc.

Онипозволяют считывать и печатать числа в шестнадцатеричном и десятичномформате, строки и отдельные символы. Фактически, приведенные командыявляются макросами, содержащими обращения к функциям стандартнойбиблиотеки ввода/вывода языка Си.Таблица 1. Сводная таблица макросов ввода/вывода.Имя командыОписание макросаPRINT_UDEC size,dataВывод числовых данных заданных параметром data в10-чном представлении. Параметр size – число,указывающее размерность данность в байтах;PRINT_DEC size, data допускаются значения 1, 2, 4. В качестве параметра dataможет выступать числовая константа, символьнаяконстанта, имя переменной, имя регистра или адресноевыражение (без спецификатора размера данных впамяти).

Если задается регистр большего размера, тоберется заданное параметром size количество младшихразрядов. PRINT_UDEC интерпретирует число какбеззнаковое, PRINT_DEC — как знаковое.PRINT_HEX size, data Аналогично предыдущему, но данные выводятся в 16чном представлении.19Имя командыОписание макросаPRINT_CHAR chПечатается символ, заданный параметром ch. Вкачестве параметра может выступать числоваяконстанта, символьная константа, имя переменной, имярегистра или адресное выражение (без спецификатораразмера данных в памяти). Печатается всегдасодержимое 8 младших разрядов.PRINT_STRING dataПечать строки текста, оканчивающейся символом скодом 0.

В качестве параметра можно передаватьстроковую константу, имя переменной или адресноевыражение (без спецификатора размера данных впамяти). В случае печати строковой константы, наличиесимвола с кодом 0 в конце строки необязательно.NEWLINEМакрос переводит печать на новую строку.GET_UDEC size, dataВвод числовых данных в 10-чном представлении склавиатуры. Размер вводимых данных ограниченпараметром size, который задается числом (1, 2, 4).Введенные данные обрезаются соответствующимобразом. Параметр data – либо имя переменной, либоимя регистра, либо адресное выражение (безспецификатора размера данных в памяти). Еслизадается регистр большего размера, то старшиеразряды заполняются знаковым битом в случаеGET_DEC и нулями в случае GET_UDEC.

GET_UDECсчитывает беззнаковое число, GET_DEC — знаковое.Запрещается использовать в качестве параметрарегистр ESP.GET_DEC size, data20GET_HEX size, dataАналогично предыдущему, но данные задаются в 16чном представлении с префиксом 0x.GET_CHAR dataАналогично предыдущему, но происходит считываниеодного символа, нажатие Enter не требуется. Болеетого, нажатие Enter будет расцениваться как вводуправляющих символов 0xD 0xA.

Если параметр –регистр, размер которого больше 1 байта, значениесчитанного символа будет дополнено нулями.GET_STRING data,maxszВвод последовательности символов, оканчивающейсясимволом перевода строки (включая этот символ), ноне более чем maxsz символов. Параметр data – либоимя переменной, либо адресное выражение (безспецификатора размера данных в памяти). Параметрmaxsz – числовая константа.

В конец строкидобавляется символ с кодом 0.Пример 1-4 Hello, World!Требуется написать программу «Hello, World!» на языке ассемблера.РешениеПрограмма расширяет Пример 1-1: помимо секции .text, используется секцияинициализированных статических данных .data, в которой размещенапоследовательность байт с текстом (строка 4). Для ссылки на этупоследовательность используется имя str, после которого идет двоеточие.Наличие двоеточия в данном случае является обязательным, если его убратьассемблер при трансляции кода выдаст ошибку со следующей диагностикойhello.asm:4: error: comma, colon or end of line expectedОбъясняется эта ошибка тем, что набор команд IA-32 содержит команду смнемоническим именем str. Запись объявления данных с именем str безсимвола двоеточия делает для ассемблера эту строку неотличимой от строки скомандой str.

Исправить ситуацию можно либо поместив двоеточие после имени,либо использовать имена, не пересекающиеся с мнемоническими именамикоманд.%include 'io.inc'section .datastr: db `Hello, World!\n`, 0section .textglobal CMAINCMAIN:PRINT_STRING [str]MOV EAX, 0RET;;;;;;;;;;;;(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)В записи значения строки используются обратные кавычки, что позволяет внестисимвол переноса строки непосредственно в последовательность байт.

Следуетотметить, что символ-ограничитель 0 должен явно дописываться в конец строк. Вслучае Си-кода этот символ автоматически добавляется компилятором, на уровнеязыка ассемблера это обязанность программиста.Последнее отличие от Примера 1-1 – наличие на строке 10 вызова командыPRINT_STRING. Ее аргументом является исполнительный адрес, ссылающийся на томесто памяти, где расположена строка «Hello, World!\n».21ЗадачиЗадачи, название которых подчеркнуто, снабжены ответом, приведенным в концепособия.Задача 1-1 Представление чиселРассматривается представление целых чисел в формате байта. Заполните всепустые ячейки таблицы, указав для каждого из приведенных чисел егопредставление в виде десятичного числа без знака, числа со знаком, а такжепредставление в виде шестнадцатеричного и двоичного кодов.Двоичноепредставление (байт)16-ричноепредставление (байт)Число десятичноесо знаком-67Число десятичноебез знака0111011028h135Задача 1-2 Определение переменныхДля каждой из указанных директив привести эквивалентную ей директиву, гденачальное значение переменной представлено в 16-ричном виде.sectiona dwb ddc dbd dwe ddf db.data-2076-1128256-15-100Задача 1-3 Директивы описания данныхИспользуя только директивы DB, привести описания, эквивалентные заданным.; aDW 185Ah; bDW 90; cDW 9000; dDW 10000, -10000; eDW 'AB'; fDW "NASM"; gDW "Hello"; hDW "w", "orld", "!"Задача 1-4 Ошибки в кодеДаны описания.22; iDD 97; jDD "x"; kDD 'CD'; lDD "Hello, world!"bwydresbreswreswresd1111Вычеркнуть синтаксически неверные инструкции.; amov; bmov; cmov; dmovb, 1byte [b], 1word [b], 1ax, bx; emov; fmov; gmov; hmovecx, cxbh, cldword [d], esibyte [w], ch; imov; jadd; ksub; lsubword[w], word[y]15, bxword [y], 8eax, dword [d]Задача 1-5 Определение значения регистраВыписать в шестнадцатеричном виде значение регистра EAX, после выполнениякаждой помеченной инструкции.

Следует отметить, что в каждойпоследовательности команд «а»-«ж» и «з»-«к» необходимо учитывать ужеимеющееся значение регистра EAX.sectiona dwb dwc dwd dw.data0xDEAD0xF00D0xCAFE0xBABEsection .textmovsx eax,movsx ax,movzx eax,movsx eax,movzx ax,movsx eax,movbx,movsx ax,wordbytewordbytebytewordwordbh[a +[b][c][b +[d +[b +[a +1] ;;;2] ;1] ;1] ;1] ;;(а)(б)(в)(г)(д)(е)(ж)23sectiona dwb dwc dwd dw.data0x0DEC0x4A6F0x79210xFEFFsection .textmovebx,moveax,movzx ax,movecx,moveax,movsx ax,moveax,bswap eaxdword-1bldworddwordcldword[b];;; (з)[a + 1] ;[b + 1] ;; (и)[c];; (к)Задача 1-6 Перемещение данныхПривести фрагмент кода, осуществляющего пересылку данных, как это указанно нарисунке.242.Арифметика и целочисленные типы данныхОсновные арифметические операции реализуются в языке ассемблераинструкциями ADD, SUB, NEG, MUL/IMUL, DIV/IDIV.

Помимо того, операцииуменьшения и увеличения числа на единицу поддержаны инструкциями DEC и INC.Сложение и вычитание чисел большей длины, чем размер регистров поддержаноинструкциями ADC и SBB. В определенных случаях для более быстрого вычисленияарифметических выражений допустимо использовать инструкцию LEA.Выполнение арифметических операций сопровождается выработкой флаговрегистра EFLAGS: CF – перенос, OF – переполнение, SF – знак, ZF – ноль, PF –четность.Таблица 2. Коды описания флагов .TMПустоЗначение флага влияет на выполнение инструкцииИнструкция меняет флаг (устанавливает или сбрасывает, в зависимостиот операндов)Влияние инструкции на флаг не определеноИнструкция не влияет на флагТаблица 3. Перекрестные ссылки регистра флагов.ADC,ADD,MUL,DIV,DEC,MOV,SBBSUB, NEGIMULIDIVINCXCHG, MOVSX, MOVZX, LEAOFSFZFPFCFMMMMMMMMMMMMMTMMM-Машинные данные и типы данных языка СиОбъявление переменной в ассемблерной программе требует указания объемавыделяемой памяти.

Интерпретация содержимого переменной определяетсяисключительно кодом операции.Перевод выражений языка Си на язык ассемблера сопровождается реализациейприведений типов, которые явно или неявно присутствуют в вычислениях.Приведение целочисленных типов языка Си можно реализовать путем расширенияразмера данных при пересылке значений с помощью команд MOVZX и MOVSX. Приэтом команда MOVZX выполняет беззнаковое расширение данных (число донужного размера дополняется слева нулями), а команда MOVSX – знаковое25расширение данных (число до нужного размера дополняется слева битами созначением знакового разряда исходного числа, т.е.

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

Список файлов семинаров

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