Главная » Просмотр файлов » Методическое пособие для выполнения лабораторных работ и КР

Методическое пособие для выполнения лабораторных работ и КР (1075934), страница 14

Файл №1075934 Методическое пособие для выполнения лабораторных работ и КР (Методическое пособие для выполнения лабораторных работ и КР) 14 страницаМетодическое пособие для выполнения лабораторных работ и КР (1075934) страница 142018-01-09СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

В нашем случае нулевой символ в строке находится на 14-й позиции, поэтому первым сработает счетчик на регистре CX. Если вывести исходные данные в отладчике QC25, то увидим:&StringS,s Œ "1234567890&StringD,s Œ "$"$"Отладчик заканчивает вывод по нулевому символу.

После работы программы получим:&StringS,s Œ "1234567890&StringD,s Œ "1234567890$"$"Было скопировано ровно 10 байт. Если установить счетчик циклов СХ = 15, то получим:&StringS,s Œ "1234567890&StringD,s Œ "1234567890…MOV CX, 15…$"$"В этом случае циклы будут завершены по условию конца строки в источнике (14 символравен 0). Если СХ = 3, то получим:&StringS,s Œ "1234567890&StringD,s Œ "123…MOV CX, 15…$"$"Если признак направления установлен в 1 (командой STD), то при пересылке цепочки регистры DI и SI на каждом шаге будут уменьшаться. Пусть исходные строки дляперемещения имеют вид:STRINGS dbSTRINGD db'1234567890$',0'$',0Тогда можно выполнить следующий фрагмент программы:;MOVSBбайты обратное направление STDSTD; Направление STRINGS => STRINGDLEA DI, STRINGD + 9LEA SI, STRINGS + 9MOV CX, 8REPMOVSBТак как установлен признак направления в 1 (STD) перемещение будет выполняться смладших байтов цепочки.

Результат будет таким:&STRINGS,s Œ "1234567890$"2010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”&STRINGD,s Œ " 34567890$"62Если префикс REP перед командой MOVSB отсутствует, то команда будет выполненаодин раз. Например:CLD…MOV CX, 10; Если REP нет, то 1 разMOVSBРезультат будет таким:&STRINGS,s Œ "1234567890&STRINGD,s Œ "1$"$"Даже при установке регистра СХ в 10. Для управления командой MOVSB могут использоваться и другие префиксы: REPE/REPNE и REPZ/REPNZ.

Эти признаки ориентируютсяна значения передаваемых данных и для команды MOVS не действуют.Команда COMPSB и ее разновидности используется для сравнения цепочек байтовых чисел. Синтаксис команды:COMPSB <приемник> , <источник>ИлиCOMPSBПусть мы имеем описание двух строк, которые равны:StrsStrddbdbdbdb…'123$'0'123$0'Тогда, после выполнения фрагмента программы:; Команда CMPSBPUSH DSPOP ESCLDLEA DI, StrdLEA SI, StrsMOV CX, 10REPCMPSBJE M5XOR AX,AXM5:; Обязательная загрузка ESБудет выполнен переход на метку M5, так как будут сравниваться строки до появления висходной строке нулевого символа.

Если мы специально нарушим равенство строк, какэто сделано в следующем фрагменте:; CMPSBREPCLDLEA DI, StrdLEA SI, StrsMOV Strd + 1 ,'*'MOV CX, 10REPCMPSBJE M6XOR AX,AXM6:то переход на метку M6 не произойдет. При использовании префикса REPNE процесспроверки остановиться на первом отличном символе:; CMPSB REPNECLDLEA DI, StrdLEA SI, StrsMOV Strd + 1 ,'*'2010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”MOV CX, 10REPNECMPSBJNE M61XOR AX,AXM61:63в регистре СХ мы получим значение 9, которое показывает, что в строках равны толькопервые символы (10 - 9). После восстановления строки (возвращаем ‘2’ на место) припрефиксе REPE ( проверка эквивалентности строк) получим переход на метку М62:; CMPSB REPECLDLEA DI, StrdLEA SI, StrsMOV Strd + 1 ,'2'MOV CX, 10REPECMPSBJE M62XOR AX,AXM62:Команда SCASB и ее разновидности используется для поиска в цепочке значенияпомещенного в регистре AL(AX). Синтаксис команды:SCASB <приемник>ИлиSCASBПри поиске символа или числа (SCASW) в регистр AL (AX) предварительно заносим значение для поиска и выполняем команду с префиксом повторения:; SCASBREPCLDLEA DI, StrdMOV CX, 10MOV AL, '2'MOV CX , 10REPSCASBПосле ее выполнения в регистре DI получим адрес найденного символа.

Для следующейпрограммы с префиксом REPNE:; SCASBREPNECLDLEA DI, StrdMOV CX, 10MOV AL, '3'MOV CX , 10REPNESCASBВ DI получим значение адреса символа следующего после ‘3’.; SCASBREPECLDLEA DI, StrdMOV AL, '2'MOV CX , 10REPESCASBПри использовании REPE также в регистре DI получим адрес найденного символа.Команда LODSB и ее разновидности используется для загрузки в AL(AX) значенияиз цепочки символов. Синтаксис команды:LODSB <источник>ИлиLODSB; LODSCLD642010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”LEA SI, StrsLODSB; Загрузка 1-го байта строки в AL…LODSB; Загрузка 2-го байта строки в ALТакие команды можно использовать в цикле для последовательной обработки отдельныхсимволов (можно с успехом применить в 5-й ЛР) для обработки введенной строки.Команда STOSB и ее разновидности используется для записи в цепочку значенияиз AL(AX).

Синтаксис команды:STOSB <приемник>ИлиSTOSBПример фрагмента программы с повторением для записи в строку:; STOSBCLDLEA DI, StrdMOV AL , '#'MOV CX, 4REPSTOSBПосле выполнения данного фрагмента в строке Strd мы получим:&Strd,s Œ ”####”Такие команды можно использовать в цикле для последовательной обработки отдельныхсимволов (можно с успехом применить в 5-й ЛР) для запоминания строки.16.3. MUL/IMUL и DIV/IDIVКоманды MUL/IMUL и DIV/IDIV используются для выполнения операций умножения и деления целых чисел.

Особенностью команды умножения является то, что полученный результат может иметь двойную размерность (8 - > 16 и 16 -> 32). Особенностьюкоманды деления является наличие двух результатов (частного и остатка). Это влияет навыполнение команд, в частности на использование регистров. Парные командыMUL/IMUL и DIV/IDIV отличаются учетом (IMUL, IDIV) или не учетом (MUL, DIV) знаков чисел при выполнении операций. Для примеров программ выполнения операций намнужны следующие описания:WORD1BYTE1REZREZOREZDDWDBDWDWDD100100000Команда для умножения MUL слов (16 бит)без учета знака имеет вид:; Тест командыMOV AX ,MOV BX ,MUL BXMOV WORDMOV WORDMUL10001000( на слово); умножениеPTR REZD , AXPTR REZD+2 , DXРезультат операции получается на двух регистрах: в AX – младшие байты, а на DX –старшие байты. Напомню, что в оперативной памяти они записаны в обратном порядке!Результат получается в виде:REZD,d Œ 1000000Умножение слов можно выполнить с использованием переменной из памяти:; Память WORDMOV AX , 1000MUL WORD1; 100MOV WORD PTR REZD , AX2010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”MOV WORD PTR REZD+2 , DX65Результат получается в виде:REZD,d Œ 100000При умножении на байтовую переменную в регистре (BL) результат должен поместитьсяв регистр слова (AX), при этом множимое расположено в регистре AL:; умножение на регистр BLXOR AX,AXMOV AL , 200MOV BL , 200MUL BLMOV REZ , AXРезультат получается в виде:REZ,u Œ 40000Если после выполнения операции старший регистр не нулевой (AH != 0), то формируютсяфлаги OF (переполнения) и CF (переноса).

Значения этих флагов можно использовать вкомандах условной передачи управления. Можно умножать на байт из памяти, например:; ПамятьMOVMULMOVBYTEAL , 200BYTE1; 100REZ , AXРезультат получается в виде:REZ,u Œ 20000Если при умножении важен знак, то нужно использовать команду IMUL. Например:;IMULсо знакомMOV AX , -100IMUL WORD1; 100MOV REZ , AXРезультат получается в виде:REZ,d Œ -10000При знаковом умножении слов;IMUL словаMOV AX , -1000IMUL WORD1; 100MOV WORD PTR REZD , AXMOV WORD PTR REZD+2 , DXРезультат получается на регистрах AX:DX в виде:REZD,d Œ -100000Команда деления может выполняться без учета знака (DIV) и с учетом знака(IDIV).

При операции короткого деления делимое располагается на регистре AX (16 бит),а делитель на заданном регистре размером 8 бит (в примере BL) или в памяти. Результатполучаем в регистрах AL(частное) и AH(остаток). В примере ниже:; DIVкороткоеMOV AX , 105MOV BL, 10DIV BLMOV REZCH , ALMOV REZOC , AHПолучим результат:REZCH,u Œ 10REZOC,u Œ 5При операции длинного деления делимое располагается на регистрах AX:DX (32бит), а делитель на заданном регистре размером 16бит (в примере BX).

Результат получаем в регистрах AX(частное) и DX(остаток). В примере ниже:; DIVдлинноеMOV AX , WORD PTR REZD; 100005 - DD2010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”MOV DX , WORD PTR REZD+2MOV WORD PTR REZD , AXMOV WORD PTR REZD+2 , DXMOV BX, 100DIV BXMOV REZOCD , DXMOV REZCHD , AX66Получим результат:REZCHD,u Œ 1000REZOCD,u Œ 5Операции деления выполняются и над знаковыми числами (IDIV), при этом знакустанавливается у частного.

Надеюсь, что Вы сами придумаете и отладите примеры дляизучения работы этой команды. Нужно также учитывать, что в современных микропроцессорах (старше 386) появились и новые возможности команд деления и умножения.Изучите эти возможности самостоятельно.16.4. Команды: TEST, CMP и ANDКоманды TEST, CMP и AND используются часто для подготовки ветвления в программах на языке Ассемблер.

Команда сравнения CMP позволяет сравнить два значения иподготавливает флаги для команды, следующей за ней. Это обычно команда условногоперехода (JE, JNE, JL и других). Пример ниже иллюстрирует сравнение двух байтовыхчисел (5 и 7) на регистре AL:; Команда CMPXOR AX,AXMOV AL , 5CMP AL, 7JNE M3MOV AH , 5M3:Так как числа неравны, то выполняется переход на метку M3.

В следующем примере:; Команда CMPXOR AX,AXMOV AL , 5CMP AL, 5JE M4MOV AH , 5M4:Числа равны (5 и 5) и в этом случае тоже выполняется переход но на метку М4.Команда AND является командой поразрядного логического умножения. В примере логического умножения:; Команда ANDXOR AX,AXMOV AL, 00AhAND AL, 0A0hJZ M1MOV AL, 0AhM1:После выполнения на регистре AL получится 0, поэтому выполнится переход на меткуМ1. Команда TEST работает также как и команда AND, но значение регистра не изменяется (не портится). Поэтому в примере:; Команда TESTXOR AX,AXMOV AL , 5TEST AL , 2JZ M2MOV AH , 52010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”67M2:Переход на метку М2 выполнен не будет, а значение регистра AL останется прежним.16.5.

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

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

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

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