Главная » Просмотр файлов » В.Н. Пильщиков - Программирование на языке ассемблера IBM PC

В.Н. Пильщиков - Программирование на языке ассемблера IBM PC (1110551), страница 5

Файл №1110551 В.Н. Пильщиков - Программирование на языке ассемблера IBM PC (В.Н. Пильщиков - Программирование на языке ассемблера IBM PC) 5 страницаВ.Н. Пильщиков - Программирование на языке ассемблера IBM PC (1110551) страница 52019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Итак, при сложении и вычитании как беззнаковых, так и знаковых чисел возможны особые случаи, когда настоящий (в математическом смысле) результат выходит за диапазон представимых чисел, и тогда результат искажается. Такое искажение результата фиксируется в флагах СР и ОР. Распознать такую ошибку можно лишь последующим анализом этих флагов. диндог-мими" 00 Программирование не юмге ессемдрере >Вы РС 9-9 = 0 = 00000000Ь = > ХР=1, аР=О в-9 -1 11111111Ь => гР=О, ОР 1 9-9 1 00000001Ь > гР О, вР 0 ЭЗ.2. Команды сложениям вычитания В ПК имеется несколько команд сложения и вычитания. Основными из низ являются следующие: Саояееее: адв ор1,ор2 Вечетаеяе <еиЬЕгесс> ° апя ор1,ор2 В этих командах допустимы следующие комбинации операндов: ору Орз 18, г8, ш8 18, г8 116, г16, т16 116, г16 сложение/вычитание байтов сложение!вычитание слов г8 ш8 г16 ш16 Команда А1>1> складывает операнды и записывает их сумму на место первогз операнда: ор1:мор1+ор2.

По команде Я)В из первого операнда вычитается вто рой операнд и полученная разность записывается вместо первого операнда ор1:мор1-ор2. Например: ; ая: -ля+1 2 ;Яхг-01-г ;г: г+<-зоо> хвп ая,12 япв ях,г апп г,-зоо И еще одно замечание. Поскольку сложение и вычитание беззнаковых и знаковых чисел производятся по одним и тем же ю>горитмю< и поскольку ПК заранее не знает, какие именно числа он складывает или вычитает, то при выполнении этих операций ПК одновременно фиксирует в флагах СР и ОР особенности операций для обоих классов чисел.

Какие именно числа складываются (вычитаются), знает только автор программы, он и должен решать, на какой из этих двух флагов следует реагировать. Если он считает, что складываются беззнаковые числа, то для него представляет интерес флаг СР (был ли перенос) н безразличен флаг ОР, но если, по его мнению, складываются знаковые числа, то он должен интересоваться флагом ОР (было ли переполнение ма>писсы) и не должен обращать внимание на флаг СР. При сложении и вычитании чисел меняются также флаг нуля ЕР и флаг знака ЗР. Флаг ЕР получает значение 1, если результат оказался нулевым, и значение О, если результат ненулевой; этот флаг представляет интерес при работе как со знаковыми, так и беззнаковыми числами. В флаг же ЗР заносится знаковый (самый левый) бнт результата; этот флаг полезен при работе со винтовыми числами, т.

к. он получает значение 1, если результат оказался отрицательным, и значение 0 иначе. Примеры (ячейки размером в бюп): 62 Прогдвммировенив на ивине ассемблера !ВЫ рп Х 1204 гооз т 0052 зоог 9250 12О12 9257 2012 Если для определенности считать, что число Х размещается в двух регистрах АХ (старшие цифры) и ВХ (младшие), а число У - в регистрах СХ (старшие цифры) и ОХ (младшие), и если суьпгу этих двух чисел надо записать вместо числа Х, т. е.

надо реализовать (АХ,ВХ):в(АХ,ВХ)+(СХ,ОХ), тогда это делается так: ;эх: хмв+тмв, сг перевес ;ьх: хеэ+тет+сг ьпц вх,пх ьвс ьх,сх (Отьгетим, что при сложении старших частей также может появиться еднницз переноса, однако ыы ее уже не будем учитывать.) Аналогичным образом реализуется вычитание беззнаковых чисел размероМ в двойное слово, для чего используется команда ЗВВ. Например, вычитание (АХ,ВХ):=(АХ,ВХ)-(СХ,ОХ) реализуется так: авв вх,вх;вх: хмв-хмв, св заец еяиввпв ввв ьх,сх гьх: хет-хее-сг С помощью команд АОС и 0ВВ можно реализовать сложение и вычитание чисел любого размера, причем эти операции для беззнаковых и знаковых чисея реализуются одинаково.

бавляется значение флага переноса СР: ор1:=ор1+ор2+СР, а в команде ЗВВ из разности операндов еще вычитается значение этого флага: ор1:=ор1-ор2-СР. Зачем это нужно'? В ПК одной коыандой можно сложнтэ (вычесть) только числа рамгероьг в байт или слово. Сложение же (вычитание) чисел других размеров, например двойных слов, приходится реализовывать нам саыим через сложение (вычитание) чисел размером в слово или быйп Здесь-то и оказываются полезными коывнды АОС и БВВ. Рассмотрим, для примера, как ьюжно сложить следующие два числа размером в двойное слово: Хм1204РООЗВ и гв8052300Рй.

Условно разбиваем каждое число на два слова. Сначала складываем ыладшие (правые) части их, используя комацзу АОО. Может получиться единица переноса, которую надо учесть при сложении старших (левых) частей чисел. Как это сделать". Вспоыннм, что единица переноса попадает в флаг СР, позтоыу к сумме старших частей надо добавить и значение этого флага (если единицы переноса не было, то Срвй, поэтому и здесь можно прибавлять СР), а такое сложение кэк раз и осуществляет команда АОС.

Следовательно, старшие части чисел надо складывать по команде АОС. $4 Пряраммироианив нв юмив ассвмбичоа >Вы РС двойной формат нлн ему достаточно и одннарного формата. Иногда об этом нзвестно заранее (ыы заранее знаем, что перемножаются небольшие числа), но иногда это ьюжно установить только после умножения. В послелнем случае вопрос о том, умещается лн результат умноження в формат соыножнтелей нлн нег, решается с поыошью анализа флагов переноса СР и переполнення ОР, которые в обенх командах умножения ыеняются синхронно и по следующеыу правилу: СР=ОР=1 - если произведение занимает двойной формат СР=ОРой - если произведению достаточен форыат сомножителей Прн Срмй (одновременно и ОРой) можно считать, что произведение бинов заннмает только регистр АЬ, а пронзведенне слов - только регистр АХ, и дачьше можно работать только с этими регистрами.

Но еслн СЕ=1, то далее приходится работать с произведением как с чнслоы удвоенного формата. ЗА.2. О команде умножеппя в процессорах 80186 п старше Фиксированность местонахождения первого операнда н результата и невозьюжность указывать непосредственный операнд в командах умножения делают этн команды не очень удобными.

Поэтому в процессоре 80186 была введена новая коыанда умножения с тремя операндами, где некоторые нз этих неудобств устранены. В ЯА эта команда допускает две эквнвэлентные формы записи: 1МВЬ ор1,ир2,орЗ ЮИ. ор1,ор2,орЗ ИЛИ и реачнзует следующее действне: ор1:мор2*орЗ. Допустнмые типы операндов: ор1: г16; ор2: г16, п116; орЗ: Пб.

Таким образоы, результат умножения можно поместить в любой регистр общего назначения, первый соыножнтель может находнться как в регистре общего назначения, так и в любом слове памяти, а второй сомножнтель обязательно задается как непосредственный операнд. Например: х вв г юп. Вг,вх,з гвг: вх*з ХЮЗЬ ВХ,Х,-гэ >ВХ:-Х*г-гв> Ванная команда умножения предназначена для умножения только чнсел размером в слово и только прн условнн, что пронзведенне умещается в слово. При этом условны нет разницы между уьпюженнем чисел со знасоы и чисел без знаке, поэтоыу-то в ЯА и можно попользовать любое нз двух названий этой команды.

Если укюанное условие действнтельно выполняется, тогда флаги СР и ОР пса>- чают значенне О, но если результат превосходит рапгер слова, тогда левые, нанболее значнмые, биты пронзведення теряются, в регистр ор1 запнсывиотся последнне 16 битов, а флаги СР и ОР устанавливаются в 1. )«опускается следующее сокращение в записи рассмазрнваемой команды умно. ження: если ор1=ор2, т. е. если первый сомножнтель берется нз регистра, в кото. бо Программирование не языке ассемблере 1ВМ РС Пример 2 я вв зззоь Определить значення регистров АХ и ВХ после выполнения команд моо ьх,в моя вн,вттк втя я ноя вь,вгтв втя в+1 Региеиие Ответ здесь такой: АХ=1234Ь, ВХ=3412Ь. Казалось бы значения репгстров АХ и ВХ дошкны совпадать, а онн рылнчаются. Почему? Напомним, что в паьитн ПК слова хранятся в "перевернутом" вше; в папам случае в байте с адресом % находится величина 34Ь, а в баГпе с адресом %+1 - величина 12Ь.

Поэтому вторая нз приведенных команд записывает в старшую часть регистра ВХ (в ВН) млазшне цнфры числа %, а в третьей команде в ыладшую часть регистра ВХ (в В(.) запнсываются старшие цнфры числа, и потому в регистре ВХ число зк' оказывается в "перевернутом" виде, Во всех же командах, работающих со ачовамн как с елнным целым, такая особенность представления слов в памяти учитывается, и этн команды "переворачнвыот" слова автоматнческн.

Поэтому первая нз наших команд сама "перевернет" слово % и запишет его в репгстр АХ в нормальном, неперевернугом виде. Прн использовании таких команд можно забыть о "перевернутом" представлении слов в паьытн, но если ыы обрабатываем слово по частям (по бюпач), тогда автоматического "переворачнвання" нет и мы обязаны помнить о "переверн)тоьг" представленнн. Пример 3 Пусть Х - байтовая переыенная, значение которой трактуется как знакомя число, а г' - переыенная размером в слово. Вычислить 1мХ*Х*Х прн условии, что результат ныеет размер слова.

Рвигвиив Прн использовании арифметических команд ПК надо внимательно следнть м размерамн операндов, за правильностью расширения чисел (со знаком нлн без], а если используются команды умножения, деления и расшнрення со знаком, то надо следить и за тем, чтобы нх операнды находились в нужных регистрах. В нашеы прнмере мм сначюга умножнм байт Х на себя. Поскольку один я1 операндов команды 1М()1.

должен находиться в регистре А1, то прежде всего зз. писываем Х в этот регнсгр. Получив в регистре АХ пронзведенне Х*Х, мы доз. жны умножить его на байт Х. Поскольку в ПК нельзя умножать слово на байт, зо приходится расширять быгг Х до слова, прячем расширять со знаком, для чеб воспользуемся командой СВ%. Поскольку зта команда использует регистр АХ, тк предварительно этот регистр надо освободить.

Произведение Х*Х "Х уже буде иметь размер двойного слова и будет находиться в регистрах 1)Х и АХ. Однако согласно условию задачи, для нашего произведения достаточно лишь слова„поз 64 Программирование нв языка вссвмбиврв!ВМ рС Вообще говоря, на этом ьюжно было бы и закончить рассказ про прямой переход, однако для полноты картины следует раскрыть подноготную этой, казалось бы, простой команды. Напомним, что в ПК имеется регистр 1Р (указатель команд), в котором всегда хранится алрес той колюнды, что должна выполняться следующей. Поэтому сделать переход'по алресу - значит записать данный адрес в регистр 1Р. Казалось бы, в команде перехода должен задаваться югенно адрес перехода. Олнюго в ПК машинная команда прямого перехода устроена так, что в ней указывается не этот адрес, а разность между ним и адресом команды перехода. Другими словами, отсчет адреса перехода ведется от команды перехода, в связи с чем такой переход называют относительным.

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

Тип файла
DJVU-файл
Размер
4,55 Mb
Тип материала
Высшее учебное заведение

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

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