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

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

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

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

Написать фрагмент вычисления X=max(A,B):LESS:movax,Acmpax,BjlLESSmovX,axjmpCONTINUE ; переход на конец ветвленияmovax, BmovX,ax; сравнение A и B; переход по меньшеCONTINUE: ...Оглавление423.2.2 Программирование итерационных циклов (цикл-пока)Программирование циклических процессов осуществляется с использованием либокоманд переходов, либо – в случае счетных циклов – с использованием команд организации циклов.Так, чтобы реализовать цикл-пока необходим один условный и один безусловныйпереходы:СYCL:cmp... ; проверка условия выходаjneCOM ; выход из циклаОперации ; тело циклаjmpCOM:CYCL ; возврат в цикл...Пример.

Написать фрагмент суммирования чисел от 1 до 10, используя итерационный цикл.CYCL:; обнуление суммыmovax,0movbx,1cmpbx, 10jgCONTINUE ; выход из циклаaddax, bxincbx; следующее числоjmpCYCL; возврат в циклCONTINUE:...; первое слагаемое; слагаемое больше 10; суммирование; выход, сумма - в axОглавление433.3Команды организации циклической обработки. Организация счетных цик-ловВ качестве счетчика цикла во всех командах циклической обработки используетсярегистр ECX.1. Команда организации счетного цикла:LOOPАдрес переходаПри каждом выполнении команда уменьшает содержимое регистра ECX на единицу и передает управление по указанному адресу, если ECX не равно 0.Организация счетного цикла.

Для организации счетного цикла с использованиемкоманды LOOP необходимо записать количество повторений в регистр счетчика ECX.Тогда команда LOOP будет отсчитывать повторения, вычитая 1 из счетчика.Примечание. Если перед началом цикла в регистр ECX загружен 0, то цикл выполняется 232 раз. Такая ситуация называется «зацикливанием», поскольку программа надолго «зависает».movECX,nbegin_loop: Операцииloop; загрузка счетчика; тело циклаbegin_loopПример. Написать фрагмент суммирования чисел от 1 до 10, используя счетныйцикл.CYCL:movAX,0; обнуление суммыmovBX,1; первое слагаемоеmovECX,10addAX,BX; суммированиеincBX; следующее числоloopCYCL;continue: ...; загрузка счетчикавозврат в цикл; выход, сумма – в axОглавление442.

Команда перехода по обнуленному счетчику.JCXZАдрес переходаКоманда передает управление по указанному адресу, если содержимое регистраECX равно 0.Организация счетного цикла с проверкой счетчика.movECX,loop_count ; загрузка счетчикаjcxzend_of_loopbegin_loop: Операцииloop; проверка счетчика; тело циклаbegin_loopend_of_loop:...3. Команды организации цикла с условием.LООРEАдрес переходаLOOPNE Адрес переходаПри выполнении обеих команд содержимое регистра ECX уменьшается на единицу,после чего они передают управление по указанному адресу при условии, что содержимоеECX отлично от нуля, причем LООРE дополнительно требует наличия флага «равно»(ZF=1), а LOOPNE – «не равно» (ZF=0).Организация цикла со сложным условием. Конструкция Цикл со сложным условием позволяет эффективно реализовать поиск данных:movECX,loop_count ; загрузка счетчикаjcxzend_of_loopbegin_loop: Операцииcmploopneal,100end_of_loop:; проверка счетчика; тело цикла; проверка содержимого albegin_loop...Оглавление453.4Команда загрузки исполнительного адресаКоманда загрузки исполнительного адреса имеет следующий формат:LEAreg, memВ результате выполнения команды в регистр reg заносится исполнительный адресоперанда mem, размещенного в оперативной памяти.Операнд mem обычно задается следующим образом:Непосредственное смещение [База, Индекс*Масштаб] ,причем любая часть описания может быть опущена, а непосредственное смещение можетбыть записано в скобках или в виде символического имени.Возможны следующие варианты:|||||||||БазаEAXEBXECXEDXEBPESPESIEDIИндекс+EAXEBXECXEDXEBPESIEDI*МасштабСмещение1248отсутств.,8,16 или32 бита+|||||||||Исполнительный адрес рассчитывается по формуле:EA = (База) + (Индекс)*Масштаб + Непосредственное смещениегде (…) - содержимое указанного регистра.Примеры:leaEAX,[500] или leaEAX,500 ; в EAX загружается число 500leaEDX,[ECX]leaEBX,TABLE[ESI*4] ; в EBX загружается число из ESI, умноженное на 4leaEBX,Exword; в EDI загружается число из ECX; в EBX загружается смещение символического имени; Exword относительно начала сегментаleaEBX,[EDI+10]; в EBX загружается адрес l0-го байта относительно; точки, на которую указывает адрес в регистре EDI.Команда lea обычно используется определении адресов массивов, матриц и строк.Оглавление463.4.1 Обработка одномерных массивовМассив во внутреннем представлении – это последовательность элементов в памяти.

В ассемблере такую последовательность можно определить, например, так:SWORDA10,13,28,67,0,-1; массив из 6 чисел длиной слово.Программирование обработки выполняется с использованием адресного регистра, вкотором хранится либо смещение текущего элемента относительно начала сегмента данных, либо его смещение относительно начала массива. При переходе к следующему элементу и то и то смещение увеличиваются на длину элемента. Если длина элемента отлична от единицы, то можно использовать масштаб.Пример. Написать процедуру, выполняющую суммирование массива из 10 чиселразмером слово.Вариант 1 (используется адрес):Вариант 2 (используется смещение):movAX,0movAX,0leaEBX,MASmovEBX,0movECX,10movECX,10CYCL: addAX,[EBX]CYCL: addAX,MAS[EBX*2]addEBX,1addEBX,2loop CYCLloop CYCLВторой вариант позволяет получать более наглядный код и потому является предпочтительным.В том случае, если элементы просматриваются не подряд, адрес элемента можетрассчитываться по его номеру (числа нумерованы с единицы):Aисп = Aначала+(<Номер> - 1)*<длина элемента>.Полученный по формуле адрес записывается в 32-х разрядный регистр и используется для доступа к элементу.Пример.

Написать фрагмент, который извлекает из массива, включающего 10 чисел размером слово, число с номером n (n≤10).movEBX,N; номер числаdecEBX; вычитаем 1movAX,MAS[EBX*2] ; результат в AXОглавление473.4.2 Обработка матрицЗначения матрицы могут располагаться в памяти по строкам и по столбцам. Дляопределенности будем считать, что матрица расположена в памяти построчно, как в Паскале и С++.При обработке элементов матрицы следует различать просмотр по строкам, просмотр по столбцам, просмотр по диагоналям и произвольный доступ.Если матрица расположена в памяти по строкам и просмотр выполняется по строкам, то обработка может выполняться так, как в одномерном массиве, без учета переходаот одной строки к другой.Пример. Написать фрагмент определения максимального элемента матрицы A(3,5).CYCL:NEXT:movEBX,0; номер элемента 0movECX,14; счетчик циклаmovAX,A; заносим первое числоcmpAX,A[EBX*2+2] ; сравниваем числаjgeNEXTmovAX,A[EBX*2+2] ; если меньше, то запомнитьaddEBX,1loopCYCL; если больше, то перейти к следующему; переходим к следующему числуПросмотр по строкам при необходимости фиксировать завершение строки и просмотр по столбцам при построчном расположении в памяти выполняются в двойном цикле.Пример.

Определить сумму максимальных элементов столбцов матрицы A(3,5).movAX,0; обнуляем суммуmovEBX,0; смещение элемента столбца в строкеmovECX,5; количество столбцовCYCL1: push ECX; сохраняем счетчикmovECX,2; счетчик элементов в столбцеmovDX,A[EBX]; заносим первый элемент столбцаОглавление48movCYCL2: cmpESI,10; смещение второго элемента столбцаDX,A[EBX]+[ESI] ; сравниваем; если больше или равно - к следующемуjgeNEXTmovDX,A[EBX]+[ESI] ; если меньше, то сохранилиESI,10; переходим к следующему элементуloopCYCL2; цикл по элементам столбцаaddAX,DX; просуммировали максимальный элементpopECX; восстановили счетчикaddEBX,2; перешли к следующему столбцуloopCYCL1; цикл по столбцамNEXT: addПри просмотре по диагонали обычно используют один цикл, через переменную которого рассчитываются смещения элементов массива.

Однако проще использовать специальный регистр смещения, который должен соответствующим образом переадресовываться.Оглавление493.5Команды обработки строкКоманды обработки строк используются для организации циклической обработкипоследовательностей элементов длиной 1, 2 или 4 байта. Адресация операндов при этомвыполняется с помощью пар регистров: DS:ESI – источник, ES:EDI – приемник.

Команды имеют встроенную корректировку адреса операндов согласно флагу направленияDF: DF=1 – автоматическое уменьшение адреса на длину элемента, DF=0 – автоматическое увеличение адреса на длину элемента. Автоматическая корректировка осуществляется после выполнения операции.Установка требуемого значения флага направления производится специальными командами: STD – установка флага направления в единицу,CLD – сброс флага направления в ноль.1. Команда загрузки строки LODS.LODSB(загрузка байта),LODSW(загрузка слова),LODSD(загрузка двойного слова),Команда использует адрес операнда по умолчанию в DS:ESI. Она загружает байт вАL, слово в AX или двойное слово в EAX.2.

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

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

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