Главная » Просмотр файлов » Иванова Г.С., Ничушкина Т.Н. - Основы программирования на ассемблере IA-32

Иванова Г.С., Ничушкина Т.Н. - Основы программирования на ассемблере IA-32 (1075571), страница 5

Файл №1075571 Иванова Г.С., Ничушкина Т.Н. - Основы программирования на ассемблере IA-32 (Иванова Г.С., Ничушкина Т.Н. - Основы программирования на ассемблере IA-32) 5 страницаИванова Г.С., Ничушкина Т.Н. - Основы программирования на ассемблере IA-32 (1075571) страница 52017-12-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Команда перемещения и дополнения знаковым разрядом – команда выполняется аналогично предыдущей, но в старшие разряды заносятся знаковые биты:MOVSXПриемник, Источник4. Команда обмена данных – команда меняет содержимое операндов местами.ХCHGОперанд1, Операнд 2Допустимые варианты:xchg reg, regxchg mem, regxchg reg, mem5-6. Команды записи слова или двойного слова в стек и извлечения из стекаPUSHimm16 / imm32 / r16 / r32 / m16 / m32 ; записьPOPr16 / r32 / m16 / m32Оглавление; извлечение33Команды автоматически изменяют содержимое ESP. Если в стек помещается 16-тиразрядное значение, то значение ESP:= ESP-2, если помещается 32 разрядное значение,то ESP := ESP-4.Если из стека извлекается 16-ти разрядное значение, то значение ESP := ESP+2,если помещается 32 разрядное значение, то ESP := ESP+4.Примеры:pushSIpopword ptr [EBX]8-9.

Команды сложения – складывает операнды, а результат помещает на местопервого операнда. В отличие от ADD команда ADС добавляет к результату значение битафлага переноса CF. Команда устанавливает флаги CF, OF, ZF, SF и др.ADDОперанд1, Операнд2ADCОперанд1, Операнд2Допустимые варианты:add reg, regadd mem, regadd reg, memadd mem,immadd reg,immПример:add AX,BX ; складывает содержимое регистров AX и BX и помещает сумму в AX10-11. Команды вычитания – вычитает из первого операнда второй и результат помещает по адресу первого операнда.

В отличие от SUB команда SBB вычитает из результата значение бита флага переноса CF. Допустимые варианты те же, что и у сложения. Команда устанавливает флаги CF, OF, ZF, SF и др.SUBОперанд1, Операнд2SBBОперанд1, Операнд2Оглавление34Пример:sub AX,5 ; вычитает из содержимого AX число 5 и помещает результат в AX13. Команда сравненияСМPОперанд1, Операнд 2Команда выполняется как команда вычитания, но, в отличие от нее, не запоминаетрезультат, а только устанавливает флаги во флажковом регистре.14-15. Команды добавления/вычитания единицыINCreg/memDECreg/memПримеры:incAXdecbyte ptr 8[EBX,EDI]16-17. Команды умноженияВ команде записывается второй операнд. Первый операнд необходимо заранее занести в регистры AL/AX/EAX в зависимости от модификации команды: умножениебайтов, слов или двойных слов.

Результат имеет удвоенную длину и помещается в дварегистра (см. ниже).MUL<Операнд2>IМUL<Операнд2>Допустимые варианты:mul/imul r|m8; AX= AL*<Операнд2>mul/imul r|m16 ; DX:AX= AX*<Операнд2>mul/imul r|m32 ; EDX:EAX= EAX*<Операнд2>В качестве второго операнда нельзя указать непосредственное значение!!!Пример:movAX,4imulword ptr A;DX:AX:=AX*AОглавление3518-21. Команды «развертывания» чисел – операнды в команде не указываются.Операнд и его длина определяются кодом команды и не могут быть изменены. При выполнении команды происходит расширение записи числа до размера результата посредством размножения знакового разряда.Команды часто используются при программировании деления чисел одинаковойразмерности для получения делимого удвоенной длины.CBW; байт в слово AL -> AXCWD; слово в двойное слово AX -> DX:AXCDQ; двойное слово в учетверенное EAX -> EDX:EAXCWDE; слово в двойное слово AX -> EAXПримеры:cbw; чистит содержимое регистра AH знаковым разрядом регистра AL22-23.

Команды деленияКоманда деления реализована аналогично команде умножения. Первый операнддолжен иметь длину вдвое больше второго и должен быть заранее помещен в регистрыAX / DX:AX / EDX:EAX в зависимости от того, какой вид деления выполняется: делениеслова на байт, двойного слова на слово или учетверенного слова на двойное слово соответственно. Деление – целочисленное, поэтому получаем результат и остаток: результат вAL/AX/EAX и остаток – в AH/DX/EDX.DIV<Операнд2>IDIV<Операнд2>Допустимые варианты:div/idiv r|m8; AL= AX:<Операнд2>, AH – остатокdiv/idiv r|m16 ; AX= (DX:AX):<Операнд2>, DX – остатокdiv/idiv r|m32 ; EAX= (EDX:EAX):<Операнд2>, EDX – остатокВ качестве второго операнда нельзя указать непосредственное значение!!!Пример:movAX,40; загрузка делимогоОглавление36; развертывание делимого до 4-х байт в DX:AXcwdidivword ptr A ; деление AX:=(DX:AX):A, в DX – остатокПример.

Разработать программу, вычисляющую X = (A+B)(B-1)/(D+8).Ниже показан текст, который добавляется к шаблону.В сегментах инициированных и неинициированных данных определяем все встречающиеся переменные:.DATAASWORD 25BSWORD -6DSWORD 11.DATA?XSWORD ?Примечание. Использование сегмента неинициализированных данных не являетсяобязательным.

Все переменные можно описать в сегменте инициализированных данных.В сегменте кода записываем фрагмент вычисляющей программы:.CODEStart:movCX,DaddCX,8movBX,BdecBXmovAX,AaddAX,D; AX:=A+DimulBX; DX:AX:=(A+D)*(B-1)idivCX; AX:=(DX:AX):CXmovX,AX; CX:=D+8; BX:=B-1. . .Оглавление37Контрольные вопросы1.Какие типы операторов могут использоваться в программах на ассемблере?Ответ.2.Какие типы сегментов включаются в программу на ассемблере? Что содержиткаждый сегмент?Ответ.3.Данными каких типов может оперировать программа на ассемблере?Ответ.4.Какие типы операндов применяются в командах ассемблера? Как определяетсядлина этих данных?Ответ.5.Назовите команды ассемблера, которые выполняют операции сложения и вычитания чисел? Какие ограничения накладываются на размещение их операндов?Ответ.6.Назовите команды ассемблера, которые выполняют операции умножения и деления чисел? Какие ограничения накладываются на размещение и длину ихоперандов?Ответ.Оглавление383Команды передачи управления.

Основные приемы программированияВ языке ассемблера отсутствуют операторы, реализующие основные алгоритмические конструкции, такие как ветвление и циклы. Указанные конструкции моделируются сиспользованием машинных команд условной и безусловной передачи управления, а также команд сравнения, организации счетного цикла и некоторых других.3.1Команда безусловного перехода (аналог GOTO)Команда безусловной передачи управления имеет следующий формат:JMPАдрес переходаКоманда имеет несколько модификаций в зависимости от длины адресной части,так в модели FLAT:short – используется при переходе по адресу, который находится на расстоянии-128..127 байт относительно адреса данной команды (длина адресной частикоманды перехода 1 байт);near ptr – при переходе по адресу, который находится в том же сегменте (длина адресной части 4 байта);far ptr – при переходе по адресу, который находится в другом сегменте (длина адресной части 6 байт).При указании перехода к командам, предшествующим команде перехода, ассемблерсам определяет расстояние до метки перехода и строит адрес нужной длины.

При программировании перехода к последующим частям программы необходимо для короткихпереходов вставлять указатель short для экономии памяти. Указывать ближний переходне обязательно, поскольку в пределах модели памяти flat все адреса находятся в том жесегменте, т. е. предполагают вариант near ptr, что и подразумевается по умолчанию.В качестве адреса перехода помимо символических имен машинных команд ассемблера могут использоваться метки трех видов:Оглавление39•<Имя > : nор; nор – команда «нет операции»•<Имя> label near; метка для внутрисегментных переходов•<Имя>; метка для внесегментных переходовlabel farПримеры:jmpshortb ; переход по адресу bjmp[EBX]; переход по адресу в регистре EBX (адрес определяется косвенно)blabelnear ; описание метки перехода «b»Оглавление403.2Команды условного переходаКоманды условного перехода используются после команд сравнения и арифметических команд.

Для принятия решения о том, осуществлять или нет переход, команды перехода анализируют различные комбинации флагов флажкового регистра, установленныепри выполнении предыдущих команд.Формат любой команды условного перехода выглядит следующим образом:Мнемоническая команда Адрес переходаМнемоника наиболее используемых команд условного перехода:JZ – переход по «ноль» – ZF=1;JE – переход по «равно» – ZF=1;JNZ – переход по «не нуль» – ZF=0;JNE – переход по «не равно» – ZF=0;JL – переход по «меньше» – SF=1;JNG, JLE – переход по «меньше или равно» – SF=1 или ZF=1;JG – переход по «больше» – SF=0;JNL, JGE – переход по «больше или равно» – SF=0 или ZF=1;JA – переход по «выше» (беззнаковое «больше»);JNA, JBE – переход по «не выше» (беззнаковое «не больше»);JB – переход по «ниже» (беззнаковое «меньше»);JNB, JAE – переход по «не ниже» (беззнаковое «не меньше»).Все команды имеют однобайтовое поле адреса (формат short), следовательно смешение имени перехода относительно команды не должно превышать -128...127 байт.Если смещение выходит за указанные пределы, то используется специальный прием:вместо jz zeroпрограммируется:continue:jnzcontinuejmpzero...Если флаг нуля установлен (ZF=1), то мы пропускаем условный переход и выполняем безусловный, а если сброшен, то выполняем условный переход, обходя безусловный.Оглавление413.2.1 Программирование ветвленийВетвления программируются с использованием команд условной и безусловнойпередачи управления.В начале выполняем сравнение.

В результате будут установлены флаги. Затем, еслиусловие не выполняется, то переходим на метку ELSE. Если условие выполняется, топереход не осуществляется, и управление переходит к следующей команде, т.е. выполнению команд, помеченных как Операции1. По завершению Операций1 передаем управление на команду, следующую за ветвлением, иначе будут выполняться команды, помеченные как Операции2, переход на которые был обозначен меткой ELSE. Если переход былосуществлен, то после Операций 2 переходим на команду, следующую за ветвлением:cmp...j<условие >ELSEОперации1jmpCOMELSE:Операции2COM:...Пример.

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

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

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