Методическое пособие на тему "Использование Ассемблера при решении задач"
Оценка 5

Методическое пособие на тему "Использование Ассемблера при решении задач"

Оценка 5
Раздаточные материалы
doc
информатика
Взрослым
02.03.2017
Методическое пособие на тему "Использование  Ассемблера при решении задач"
Методическое пособие по теме «Использование Ассемблера в Паскале при решении задач» предназначено для теоретической и практической, а также самостоятельной подготовки студентов по специальности: 09.02.03 «Программирование в компьютерных системах», 09.02.05 «прикладная информатика (по отраслям)» среднего профессионального образования. Методическое пособие формирует базовые знания: - основные понятия языка Ассемблер; - команды и операторы языка Ассемблера;
Методическое пособие Ассемблер.doc
Министерство образования Московской области Государственное образовательное учреждение высшего образования Московской области «Государственный гуманитарно­технологический университет» (ГГТУ) Ликино­Дулевский политехнический колледж – филиал ГГТУ Методическое пособие Тема: «Использование Ассемблера в Паскале при решении задач» Составил: преподаватель  спец.дисциплин  Пронина А.Ю. Ликино­Дулево, 2016 г. Содержание. ПОЯСНИТЕЛЬНАЯ ЗАПИСКА........................................................................................................2 ТЕОРЕТИЧЕСКАЯ ЧАСТЬ...............................................................................................................4 ТЕМА №1 «ЯЗЫК ПРОГРАММИРОВАНИЯ АССЕМБЛЕР. ИСПОЛЬЗОВАНИЕ АССЕМБЛЕРА В ПАСКАЛЕ»..............................4 ТЕМА №2 «РЕГИСТРЫ ПРОЦЕССОРА»...................................................................................................................................6 ТЕМА №3 «ИДЕНТИФИКАТОРЫ. ЦЕЛЫЕ ЧИСЛА, ПРЕДЛОЖЕНИЯ И СИМВОЛЬНЫЕ ДАННЫЕ В АССЕМБЛЕРЕ»..................8 ТЕМА №4 «АДРЕСАЦИЯ»....................................................................................................................................................13 ТЕМА №5 «СИСТЕМА КОМАНД АССЕМБЛЕРА».................................................................................................................15 ТЕМА №6 «ФУНКЦИИ ПРЕРЫВАНИЯ 21Н».........................................................................................................................27 ТЕМА №7 «МЕТКИ»............................................................................................................................................................32 ТЕМА №8 «ИСПОЛЬЗОВАНИЕ ПОДПРОГРАММ В АССЕМБЛЕРЕ»........................................................................................33 ТЕМА №9 «АССЕМБЛИРОВАНИЕ ПРОГРАММ»....................................................................................................................35 КОНТРОЛЬНЫЕ ЗАДАНИЯ...........................................................................................................37 КОНТРОЛЬНАЯ РАБОТА №1................................................................................................................................................37 КОНТРОЛЬНАЯ РАБОТА №2................................................................................................................................................39 ПРАКТИЧЕСКАЯ ЧАСТЬ...............................................................................................................43 ЛАБОРАТОРНАЯ РАБОТА №1. ПО ТЕМЕ «РАБОТА С КОМАНДАМИ АССЕМБЛЕРА»...........................................................43 ЛАБОРАТОРНАЯ РАБОТА №2. ПО ТЕМЕ «ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ ПРЕРЫВАНИЯ 21H В РЕАЛИЗАЦИИ ЗАДАЧ»........44 ЛАБОРАТОРНАЯ РАБОТА №3. ПО ТЕМЕ «ИСПОЛЬЗОВАНИЕ МЕТОК И ПОДПРОГРАММ»...................................................45 САМОСТОЯТЕЛЬНАЯ РАБОТА СТУДЕНТА...........................................................................46 СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ............................................................................47 ПОЯСНИТЕЛЬНАЯ ЗАПИСКА 2 Методическое   пособие     по   теме   «Использование   Ассемблера   в   Паскале   при   решении задач» предназначено для теоретической и практической, а также самостоятельной подготовки студентов   по   специальности:  09.02.03   «Программирование   в   компьютерных   системах», 09.02.05 «прикладная информатика (по отраслям)» среднего профессионального образования. Методическое пособие  формирует базовые знания: ­  основные понятия языка Ассемблер; команды и операторы языка Ассемблера; ­ Для   закрепления   теоретических   знаний   и   приобретения   необходимых   практических навыков и умений предусматривается проведение практических занятий и лабораторных работ. Для лучшего усвоения учебного материала его изложение необходимо проводить с применением технических и аудиовизуальных средств обучения. Для проверки и контроля по теоретическим знаниям методическое пособие содержит контрольную работу. 3 Тема №1 «Язык программирования Ассемблер.  Использование Ассемблера в Теоретическая часть. Паскале» Язык   программирования   Ассемблер   ­   символьная   форма   записи   машинного   языка,   его использование существенно упрощает написание машинных программ.  На  языке Ассемблер пишут:   Все что требует максимальной скорости выполнения (компоненты компьютерных игр, ядра операционных систем реального времени).  Все что взаимодействует с внешними устройствами (драйвера, программы, работающие на прямую с портами, звуковыми и видео платами).  Все   что   использует   полностью   возможности   процессора   (ядра   многозадачных операционных   систем   и   любые   программы,   переводящие   процессор   в   защищенный режим).  Все   что   полностью   использует   возможности   операционной   системы   (вирусы   и антивирусы,   защиты   от   несанкционированного   доступа,   программы     обходящие   эти защиты).  Многое   другое   (как   оказывается,   что   многое   из   того,   что   обычно   пишут   на   языке высокого уровня лучше, проще, быстрее записать на Ассемблера). Выполнение программы написанной на языке Ассемблере осуществляется в 2 этапа: 1. Трансляция – переводит программу на машинный язык. 2. Счет – выполнение программы. Команды   языка   Ассемблера   обычно   представляют   совокупность   нескольких   программ процессора.   При   использовании   Ассемблера   в   Паскале   результирующим   компилятором добавляются   компоненты,   обеспечивающие   корректную   работу   программы,   а   значит   и командного процессора. Все это позволяет  быстро и качественно разрабатывать программные продукты. Однако лишние компоненты в результирующей программе увеличивают ее объем. Ее объем   снижает   быстродействие   компьютера.   При   разработке   программных   продуктов используется только те команды, которые предусмотрены разработчиками языка, в то время как процессор может иметь более широкие возможности.    4 Каждая   команда   ассемблера   сопоставляется   одной   команде   процессора   и   эти   команды можно разделить на следующие группы: 1. операции перемещения информации между ячейками оперативной памяти и ячейками памяти процессора (регистры) 2. выполнение команд процессора над информацией находящейся в его регистре 3. вызов системных функций О.С. (прерывание) В   результате   компиляции   и   построения   программ   на   Ассемблере   получается результирующий исполняющий файл. Такие программы отличаются высоким быстродействием и малым объемом занимаемой оперативной памяти. Исходные тексты программ на Ассемблере имеют размер, значительно превосходящий размер текстов программ на языке высокого уровня. Таким образом, очень удобно сочетать язык высокого уровня и Ассемблер в одной программе. Использование команд Ассемблера в программе Паскаль.                          Встроенный ассемблер в Паскале позволяет непосредственно в программах Паскаля записывать код ассемблера. Команды Ассемблера могут использоваться в любом месте программы   наравне   с   обычными   командами   Паскаля.   Каждая   команда   Ассемблера   должна находится в отдельной строке, и не отделятся точкой запятой в отличие от Паскаля.   Встроенный ассемблер становится доступным с помощью оператора: Asm end; <Команда Ассемблера> … Различие между Ассемблером и Паскалем. Большинство важных различий между выражениями встроенного ассемблера состоит в том,   что  выражение   встроенного   ассемблера,   должны   при   вычислении,   сводится   к  значению константы, другими словами к значению которые можно вычислять на этапе компиляции Например, с учетом описания переменных как констант Const x:=10; y:=20; Var  z: integer; Begin 5 asm mov z,x+y end; Поскольку  X  и  Y  это константы выражение  x+y  представляет собой удобный способ записи константы 30 и получается в результате инструкции, помещает значение 30 в переменную Z.   Если   описать  Y  и  X  как   переменные   то   встроенный   Ассемблер   не   сможет   на   этапе компиляции вычислить значение x+y, тогда запись будет следующей: Var x,y,z :integer; Begin  x:=10; y:=20; asm mov Ax,x Add Ax,y mov z,Ax end; end. Другим   важным   отличием   выражений   паскаля   и   встроенного   Ассемблера   является способ   интерпретации   переменных.   В   выражение   в   Паскале   ссылка   на   переменные интерпретируется   как   содержимое   переменной.   Но   в   Ассемблере   ссылка   на   переменную означает адрес переменной. Например, в Паскале выражение х+4 где х переменная означает содержимое суммы х и 4 ,а в Ассемблере х будет находиться на 4 байта выше.   Тема №2 «Регистры процессора» Процессор   имеет   собственную   область   памяти   ячейки,   в   которой   хранят   информацию необходимую   для   выполнения   команд   процессора.   Эти   ячейки   называются  регистрами  и представляют собой двухбайтовые ячейки памяти.  Регистры делятся на следующие группы: 6  Регистры   данных  –   предназначены   для   временного   хранения   любой   информации   и обмена системными функциями Ms – Dos. Регистры данных имеют название Ах, Вх, Сх, Dx. Особенностью регистров данных являются возможность разделения обращения их к старшим и младшим байтам. Старший байт имеет значение АH,BH,CH,DH, а младший – AL ,BL,CL,DL   Регистры указатели  – предназначены для хранения адресов ячейки памяти в формате <сегмент> : <смещение>. При передачи параметров данных системных функций  Ms  – Dos. BP,SP,SI,DI  Сегментные   регистры   –  определяют   расположение   программы   в   сегментах   памяти. Делятся на 4­е группы: 1.регистр сегмента команд CS 2.регистр сегмента данных  DS 3.регистр дополнительного сегмента данных ES 4.регистр сегмента стека SS  Регистр   указания   команд  IP  –  предназначен   для   указания   относительного   адреса команды следующей за выполняемой в данный момент команды.  IP  не имеет прямого доступа к адресам команд.  Регистр флагов – Flags Эти   регистры   содержат   некоторые   результат   последней   выполняемой   команды, используется при выполнении большинства команд. Флаг – это бит принимающий значение 1(истина), если флаг установлен и 0(ложь) если флаг не установлен. Флаги делятся на две категории: 1. флаги условий – автоматически меняются при выполнении программы и фиксирует результаты, что позволяет проанализировать результаты команды. К этой категории относятся следующие флаги AF, PF, SF, ZF, OF, CF 2. Флаги состояния – сами по себе они не меняются, а меняет их программа. Состояние этих   флагов   оказывает   влияние   на   дальнейшее   поведение   процессора.   К   этой категории относятся следующие флаги   DF, IF, TF 7 Тема №3 «Идентификаторы. Целые числа, предложения и символьные данные в Ассемблере» I. Идентификаторы.   Это последовательность из латинских букв, цифр и некоторых знаков для обозначения различных объектов программы (переменных, операций, меток, регистров). На идентификаторы  накладываются следующие ограничения: 1. Длина идентификатора может быть любой, но в программе учитываются только первый 31 символ. 2. Они не могут начинаться с цифры. 3. Только может быть только первым символом идентификатора. 4. В идентификаторах большие и малые буквы являются эквивалентными. 5. В идентификаторах нельзя использовать буквы русского алфавита. Идентификаторы делятся на две группы:     1.служебные слова (операции, регистры)     2.имена – все остальные индефикаторы. II. Целые числа  могут   быть   записаны   в   десятичной,   двоичной,   восьмеричной   и   шестеричной   системах счисления.     Десятичная   система   счисления   записывается   без   всяких   спецификаторов,   но   в других системах счисления в конце числа ставится спецификатор.  Спецификатор – буква, которая указывает систему счисления, к которой относится это число. B – двоичная система Q – восьмеричная система H – шестнадцатеричная система  III. Символьные данные. В   качестве   символов   могут   быть   использованы   буквы   латинского   алфавита. Последовательность символов составляет строку, символы заключаются либо в одинарные, либо 8 в двойные кавычки; так же и строки заключаются в кавычки. В строке одноименные большие и малье буквы  не эквивалентны.  Если  в качестве символа внутри строки нужно указать кавычку, то строку заключают в одинарные кавычки, а внутри ставят двойные  (‘ABC ”K” ’). IV. Предложения. Программа на ассемблере, это последовательность предложений, которые записываются в отдельной   строке.   Переносить   предложения   на   следующую   строку   или   записывать   в   одной строке два предложения нельзя.  Все предложения делятся на три группы: 1. комментарии – предназначены для пояснений нужной команды или действия. Комментарии не влияют на смысл программы, и при трансляции ассемблер их не читает. Комментарии начинаются с    “ ; ” Пример:                ;сложение числа                mov ax,5                add 10                mov z, ax   2. Команда   предложения   –   это   символьная   форма   записи   машинных   команд.   К   ним   в основном относятся метки, которые предназначены для ссылок на команды из других мест программы. Пример: Lab:  add SI ,2 ; изменение индекса 3. Директивы – представляют собой приказы ассемблера. Пример: X DX 10,­5,6 ; присвоит массиву Х значения 10, ­ 5, 6  Выражения встроенного ассемблера строятся из элементов выражений и операций,   а каждая операция имеет соответствующий  класс выражения  и  тип выражения. Выражения. 9 Основными элементами  выражения являются константы, регистры  и идентификаторы.              Выражения встроенного ассемблера подразделяются на три класса:   Классы выражений 1. регистровые  значения,   2. ссылки  на память   3. непосредственные        значения. Выражение, состоящее только из имени регистра,  является регистровым значением. Примерами   регистровых   значений   являются   AX,   CL,   DI   и   ES.   Используемые   в   качестве операндов,   регистровые   выражения   указывают   ассемблеру   на   необходимость   генерировать инструкции, которые работают с регистрами ЦП.                          Выражения, обозначающие адреса памяти,   являются ссылками на память. К этой категории   относятся   метки   Паскаля,   переменные,   типизованные   константы,   процедуры   и функции.                    Выражения, которые не являются регистровыми и не  связаны  с ячейками памяти, представляют  собой  непосредственные значения. Эта группа включает в себя нетипизированные константы и идентификаторы типа.                          Непосредственные значения и ссылки на память при использовании их в качестве операндов приводят к генерации различного кода.         Например:              const                Start = 10;              var                Count: Integer;                 …                 …                 …              asm                mov        ax,Start           { MOV AX,xxxx }                mov        bx,Count           { MOV BX,[xxxx] }                mov        cx,[Start]         { MOV CX,[xxxx] }                mov        dx,OFFSET Count    { MOV DX,xxxx }              end;               10 Поскольку   Start   ­   это   непосредственное   значение,   первая   инструкция     MOV ассемблируется   в   непосредственную   инструкцию.   Однако   вторая   инструкция   MOV транслируется в инструкцию,  ссылающуюся на память,  так как Count ­ это ссылка на память. В третьей инструкции  MOV для преобразования Start  в ссылку  на  память  (в  данном         случае слово   со   смещением   10   в   сегменте   данных)   используется   операция   квадратных   скобок.     В четвертой инструкции MOV для преобразования  Count в непосредственное значение (смещение Count в сегменте данных) используется операция OFFSET.              Как вы  можете  видеть,  квадратные скобки и операция OFFSET  дополняют друг друга. В терминах результирующего машинного   кода   следующий   оператор asm идентичен первым двум строкам предыдущего оператора asm:              asm                mov       ax,OFFSET [Start]                mov       bx,[OFFSET Count]              end;              Ссылки на память и непосредственные значения классифицируются, в свою очередь,  как перемещаемые   и   абсолютные   выражения.   Перемещаемое   выражение   обозначает   значение, которое   требует   на   этапе   компоновки   перемещения,   а   абсолютное   выражение   обозначает значение, которое такого перемещения не требует. Обычно выражение со ссылкой на метку, переменную процедуру или  функцию является  перемещаемым,    а выражение,    где операции выполняются исключительно с  константами ­ абсолютным.                          Перемещение является процессом, с помощью которого компоновщик присваивает идентификаторам абсолютные адреса.  На этапе компоновки компилятору неизвестны конечные адреса   метки,   переменной,   процедуры   или   функции.   Они   не   будут   известны   до   этапа компоновки,  на  котором компоновщик присваивает идентификатору конкретный абсолютный адрес.                          Встроенный ассемблер   позволяет вам выполнять любую операцию с абсолютным значением,     но   операции   с     перемещаемыми     значениями   ограничиваются   сложением   и вычитанием констант.               Каждое выражение встроенного ассемблера имеет  соответствующий тип,  или, если говорить   точнее,   размер,   поскольку   встроенный   Ассемблер   рассматривает   тип   выражения Типы выражений 11 просто как его размер в памяти.   Например, тип (размер) переменной Integer равен 2, так как она занимает два байта.              Там, где это возможно,  встроенный ассемблер выполняет  проверку типов, поэтому в инструкциях:              var                QuitFlag: Boolean;                OutBufPtr: Word;                 …                 …                 …              asm                mov       al,QuitFlag                mov       bx,OutBufPtr              end;          встроенный ассемблер  проверяет,   что   размер   QuitFlag     равен     1 (байт), а размер OutBufPtr ­ двум (слово). Если проверка типа обнаруживает несоответствие,  возникает ошибка. Например, следующее  недопустимо:              asm                mov     dl,OutBufPtr              end;                так как DL ­ это байтовый регистр, а OutBufPtr ­ слово. Тип ссылки на память можно изменить с помощью назначения типа. Корректным   способом записи предыдущих инструкций будет следующий:              asm                mov     dl,BYTE PTR OutBufPtr                mov     dl,Byte(OutBufPtr)                mov     dl,OutBufPtr.Byte              end;              Все эти инструкции ссылаются на первый (менее значащий) байт переменной OutBufPtr.              В некоторых случаях ссылка на память является нетипизированной,  то  есть не имеет соответствующего типа.   Приведем пример с    непосредственным значением, заключенным в квадратные скобки: 12 asm                mov     al,[100H]                mov     bx,[100H]              end;              Встроенный ассемблер  допускает обе этих функции,  поскольку выражение [100H] не имеет соответствующего типа, оно просто означает   "содержимое по адресу 100H в сегменте данных",   а тип можно   определить из первого операнда (байт для AL, слово для BX). В том случае, когда тип нельзя определить из другого операнда, встроенный ассемблер требует явного назначения типа:              asm                mov     BYTE PTR [100H]                mov     WORD PTR [100H]              end; Тема №4 «Адресация» Архитектура процессора позволяет использовать 7 различных способов адресации: 1. Регистровая – извлекает операнд из регистра или помещает его в регистр Пример: Mov AX, BX; извлекает из регистра ВХ содержимое и помещает его в АХ     Add AX, BX; добавляет в регистр АХ содержимое ВХ      Push CX ; помещает содержимое регистра СХ в стек. 2. Непосредственная – операнд содержится непосредственно в теле команды. Пример: Mov АХ, 5 ; поместить число 5 в регистр АХ Add АХ, 100 ; добавить в регистр АХ  число 100  3. Прямая – смещение операнда задается в теле программы и складывается с регистром. Пример: Mov АХ, Х ; поместить в АХ значение переменной Х Add АХ, В ; добавить в регистр АХ значение В  4. Косвенная 5. Адресация по базе 13 6. Индексная 7. Адресация по базе с индексированием Примеры: 1) Var Z: integer; Begin                Z: =10;      asm                Mov  Ax, 5 ; поместить 5 в регистр Ax                Push Ax ; содержимое Ах поместить в стек                Pop Z ; извлечь содержимое стека в переменную Z     end;     writeln (‘Z=’,Z);     end. 2) Var Z : integer; Begin                Z:=10;      asm              Mov Ax, Z ; поместить значение переменной Z в регистр Ax              add Ax, 5; добавить в регистр число 5              Mov Z, Ax ; поместить значение регистра Ах в переменную Z     end;     writeln(‘Z=’,Z);     end. 3) Осуществить вычитание двух чисел 10 и 5 через прямую адресацию Var Z : integer; Begin           Z:=10; asm        Mov Ax, Z 14 Sub Ax, 5        Mov Z, Ax end; writeln (‘Z=’,Z); end. Тема №5 «Система команд Ассемблера» Для   удобства   использования   все   команды   Ассемблера   можно   разделить   на   6 функциональных групп: 1. Команды пересылки данных 2. Арифметические команды 3. Битовые команды 4. Строковые команды 5. команды передачи управления 6. Команды прерываний I.  Команды пересылки данных.    Формат Mov приемник , источник Push источник Pop приемник XCHG приемник, источник Команды                               1. команды общего назначения Mov Push Pop XCHG 2. Команды ввода ­ вывода In Out 3. команды пересылки флагов Lahf Sahf Pushf Popf In аккумулятор, порт Out Порт , аккумулятор Описание пересылка данных поместить в стек извлечь из стека обменяться значениями читать из порта записать в порт Загрузить флаг в регистр АН извлечь флаги из АН  поместить флаги в стек извлечь флаги из стека 15 Одна   из   наиболее   часто   используемых   команд   это   команда  Mov  которая   позволяет переслать байт или слово из регистра в регистр, из память в регистр или из регистра в память. Тип пересылаемых данных определяется регистром участвующем в пересылке.  С помощью команды Mov нельзя пересылать: 1. из памяти в память 2. из регистра в тот же регистр 3. в регистр CS Mov AX, Table; переслать слово Table из памяти в регистр Ах Mov Table, Ah ; переслать байт из регистра АН в переменную Table Mov DS, Ax ; переслать данные из регистра Ах в сегментный регистр DS Для временного сохранения регистров и данных, а так же для обмена  значениями между регистрами   широко   используются   стековые   команды  Push  и    Pop.   Каждая   из   этих   команд работает только с данными, а не с байтами, поэтому нельзя поместить в стек одиночный байт.  Стек ­ Это специально отделенная область памяти для хранения промежуточных данных. Стек  пополняется снизу вверх (последний пришел – первым вышел).  Примеры: 1) Поместить значение Х в регистр Ах.  Задание: осуществить регистровую адресацию из регистра Ах в регистр Вх и вывести результат в переменную У. Var X,У:integer; Begin       x:=200;           asm                  mov ax,x                  mov bx,ax                  mov у,bx          end;          writeln(‘у=’,у);          end. 16 Поместить значение Х в регистр Ах.  2) Задание: поместить содержимое  регистра Ах в  стек.                       Var X:integer; Begin       x:=200;           asm                 mov ax,x                push ax           end;           end. 3)  Поместить значение Х в регистр Ах.  Задание: поместить содержимое  регистра Ах в  стек и    извлечь значение в переменную Х из стека.                     Var X:integer; Begin       x:=200;           asm                mov ax,x                push ax           pop x           end;            writeln(‘x=’,x);           end. II.  Арифметические команды     Команды Формат 1.Команды сложения Add  Ing 2. Команды вычитания Sub Add приемник, источник Ing приемник Sub приемник, источник Описание Сложение чисел Увеличение на единицу Вычитание чисел 17 Deg приемник CMP приемник, источник Mul источник Deg CMP 3. команды умножения Mul 4. команды деления Div Aad Div источник Aad Уменьшение на единицу Сравнение чисел Умножение чисел Деление чисел Кодировка Примеры: 1) Сложить три числа 5,10,20 в регистре Ах, вывести результат в переменную Х. Var X: integer; Begin          X:=5; asm         Mov Ax, x        Add Ax, 10        Add Ax, 20         Mov X, Ax end; writeln (‘X=’,X); end. 2) Осуществить умножение двух чисел 20 и 50, вывести результат в переменную Х. Var y,z :integer; Begin X:=20; Y:=50; asm mov Ax,x mul y mov x,Ax end; writeln(‘x=’,x); end. 18 3) Осуществить вычитание четырех чисел 50,13,4,20 в регистре Ах и вывести результат в переменную Х. Var x:integer; Begin     X:=50; asm       mov ax,x       sub ax,13       sub ax,4       sub ax,20       mov x,ax end; writeln(‘x=’,x); end. 4) Осуществить деление числа 88 на 2, используя регистр Ах и  Bl. вывести результат в переменную Х. Var x:integer; Begin      x:=0808h; asm      mov ax,x      mov bl,2      aad      div bl      mov x,ax end; writeln(‘x=‘,x); end. 5) Осуществить деление чисел 100 и 25, используя регистр Ах и  Bl, вывести результат в переменную Х. Var X: integer; 19 Begin          X:=100; asm        Mov ax, X        Mov bl, 25        Aad                       Div Bl        Mov X,Ax end; writeln (‘X=’,X); end. III.  Битовые команды. Команды 1. логические команды And Or Xor Not Test Формат Описание And приемник, источник  Or  приемник, источник Xor  приемник, источник Not  приемник, источник Test  приемник, источник логическое умножение логическое сложение сложение с инверсией логическое отрицание проверить Битовые   команды   используются,   при   исчислении   логических   выражений,   а   так   же   в   тех случаях, когда необходимо изменить отдельные разряды операнда. Команды   And,  Or,  Xor,  Not соответствуют операциям поиска в случае, когда операнд является целочисленным выражением. Test  выполняет целочисленную операцию по разрядному суммированию и устанавливанию флагов в соответствии со значением результата сравнения. Формат Команды Операции над битами и байтами BT BTS BTR BSF Bt база смещения Bts база смещения Btrбаза смещения Bsf приемник, источник Описание проверка бита проверка и установка бита проверка и сброс бита прямой поиск бита Команда ВТ  считывает  во флаг  CF  значение бита из битовой строки указанной первым операндом (т.е. битовой базой  ­ это регистр или переменная). Далее указывается второй операнд, 20 т.е. битовое смещение (число). Если бит, найден в заданной битовой строке, то на экран выводится единица в противоположном случае ноль.  Команда    BTS  использует   такие   операнды,   как   и   ВТ,   но   после   проверки   он   либо устанавливает не найденный бит и выводит ноль, либо выводит единицу в противоположном случае.  Команда  BTR  после   нахождения   нужного   бита   его   удаляет   и   выводит   единицу,   ноль выводится в противоположном случае. Команда BSF сканирует источник (регистр, переменная) начиная с самого младшего бита и записывает в приемник(регистр)номер найденного бита и выводит – 1, иначе – 0. Примеры: 1) Сложить два двоичных числа 00111011 и 00001111, используя  регистр AL. Результат вывести в переменную А. Var a;integer; begin asm Mov AL,00111011b Or Al,00001111b Mov a,AL end; Writeln(‘A=’,A); end. 2) Умножить   два   числа     00111011   и   00001111,   используя     регистр  AL.   Результат вывести в переменную А.                 Var a:integer;                 Begin                 asm mov al,00111011b and al,00001111b mov a,al end; 21 writeln(‘a=’,a); end. 3) Сделать отрицание числа 1101101011, используя   регистр  AL. Результат вывести в переменную А.                 Var a:integer;                 Begin                 asm mov al,1101101011b not al mov a,al end; writeln(‘a=’,a); end. 4) Код программы проверки подключения принтера. Var a:integer Begin asm mov al,2 ; функция чтения состояния принтера int 17h ; вызов из Bios функции прерывания 17h которая проверяет  состояния принтера и возвращает значение в регистр AL  test al,00100000b ; ZF=0, принтер не подключен mov a,al end; writeln(‘a=’,a); end. IV.  Команды передачи управления Формат Команды Команды безусловного перехода CALL RET JUMP CАLL имя RET  параметры JUMP  имя Описание войти в процедуру выйти из процедуры переход на метку 22 JA   близкая метка JAE близкая метка JB близкая метка JBE близкая метка JXCZ  близкая метка JG  близкая метка JGE  близкая метка JL  близкая метка JLE  близкая метка JNE  близкая метка JNP  близкая метка  JP  близкая метка JS  близкая метка Команды условного перехода JA JAE JB JBE JXCZ JG JGE JL JLE JNE JNP JP JS Команды управления циклами LOOP   метка LOOP LOOPE   метка LOOPE LOOPNE LOOPNE   метка    перейти если выше перейти если выше и равно перейти если ниже перейти если ниже и равно перейти если равно  перейти если регистр СХ=0 перейти если больше перейти если больше и равно перейти если меньше перейти если меньше и равно перейти если не четное перейти если четное перейти если отрицательное повторять цикл повторять пока не будет равно повторять пока не будет не равно Команды безусловного перехода могут использовать дальнюю или ближнюю модель памяти, в то время как команда условного перехода могут использовать только ближнюю модель памяти в пределах 121 байта. Инструкция  Call  работает   следующим   образом.   В   начале,   адрес,     следующий   за  Call инструкцией,  помещается в  стек, за тем в регистр  IP помещается адрес точки кодов процедуры, таким образом, сразу за командой Call будет исполняться уже первая команда процедуры. Процедура ­ это функция, которая возвращает значение. Все процедуры и функции Паскаля содержат зарезервированное слова в заголовке, которое будет вызывать, как ближние, так и дальние процедуры. Этим, словом является слово FAR.  Пример: ………………………….. procedure MyProg; …………………………. asm Call Far MyProg ………………………… end; ………………………… 23 end. Команда условного перехода способна передавать управление на метку расположенную в пределах 121 байта от самой команды. Если нужно передать управление на метку расположенную дальше, то сразу за командой условной передачи следует расположить безусловную команду Jump или CALL.  Поскольку   условные   передачи   реализуют   ветвление   от   программы   на   основе   проверки флагов, то обычно непосредственно перед ними располагается команда изменяющая эти флаги – СМР.  Если   переход   делается   только   тогда,   когда   выполняются   некоторые   условия,   называют условным. Пример: 1) Сравнить 2 числа и выбрать из них наибольшее. Данные числа хранятся в регистрах Ах и Вх соответственно. Найденное наибольшее значение поместить в регистр  Dx. Mov dx, ax;       предположим, что в Ах храниться большее число cmp ax, bx;        если Ах больше или равно Вх тогда jaе Li;                 переход на метку Li Mov dx, bx;       иначе помещается Вх в Dx Li:      mov dx,ax 2) Нахождение наименьшего из трех чисел, они хранятся в AL,BL,CL. Наименьшее значение поместить в переменную Small. L1: mov Small, al ; предположим что в Al наименьшее число       cmp small, bl       jbe L2 ; если small  <  или  = bl тогда переходим на L2 иначе помещаем в  small      mov small, bl L2: cmp small, cl ; если small < или  = CL тогда переход на L1      jbe L1      mov small, cl 24 Команда Loope и Loopne служат для организации циклов. Цикл­ это определенное число действий, которое выполняется несколько раз. Все команды циклов используют регистр Сх, как счетчик числа повторений. Команда Loope уменьшает Сх на 1 и передает управление на метку начало цикла, если содержимое регистра Сх отлично от нуля. Команда Loopne также уменьшает счетчик на 1, но передает управление не начало цикла, а на определённое место в прорграмме при совместном условии установки флага  ZF и неравенства нулю счетчика Сх.    V. Строковые команды. Команды MOUSB MOUSW CHPSB CHPSW SCASB SCASW LODSB LODSW STOSB STOSW Формат Пересылка строк Сравнение строк Команды сканирования строк Загрузка строк Сохранение строк Описание переслать байт переслать слова сравнить байт сравнить слово искать байт искать слово загрузить байт загрузить слово сохранить байт сохранить слово Строковые команды, рассчитанные на обработку строк. Строка обозначает произвольную цепочку   байт   или   слов   длинной   до   64   Кбайт.   При   использовании   строковых   команд   важно помнить два обстоятельства: 1) Эти   команды   берут   адрес   строки   источника   из   регистров  SI  и  DS.   А   адрес   строки приемника из регистров  ES  и  DH. Таким образом, для исполнения строковой команды необходимо организовать сегментные регистра нужным образом. 2) Строковые   команды   используют   индексную   адресацию   с   автоматическим   поиском смещения в регистрах  SI и DI VI. Команды прерывания. 25 Одной из важных частей функционирования компьютера является процессы прерывания. Прерывание  –   процессы   остановки   работающей   в   данный   момент   программы   и   передача управления, в какие – либо другие подпрограммы. Прерывания могут возникать тремя путями : 1) аппаратные прерывания – возникают при изменении состоянии какого­либо устройства 2) Внутренние прерывания – возникают при выполнении некоторых операций процессора в основном при возникновении ошибки деления на 0 3) Программное   прерывание   –   вызывается   выполнением   программы   для   обеспечения собственной функциональности. Векторы прерываний – это указатели на адреса памяти, в которой хранятся специальные подпрограммы, которые называются обработчики прерываний. Обработчики прерываний используются в программах в двух случаях: 1.Когда необходимо переопределить поведение системы при вызове, какого – либо прерывания. Так пишутся резидентные программы и команды. 2.Когда необходимо воспользоваться обработчиком прерываний. Второй случай называется вызовом системных функций MS­Dos.  Подпрограмма Bios выполняет множество задач распределяющих прерывания и их можно вызвать с помощью команды int <номер прерывания> Прерывания   могут   объединять   в   себе   несколько   подпрограмм,   какую   из   них   следует вызвать, определяется значением регистра.  Например: прерывания 16H содержит подпрограмму с номером 02Н, которая при вызове функции должна быть занесена в регистр АН. В качестве результата после работы функции в регистр   АL  возвращается   флаг   состояния   клавиатуры   каждый   вид,   которого   определяет соответствие клавиш и их состояние (1­клавиша нажата, 0 – нет) Таблица соответствия клавиш номерам бита проверки.  Клавиша  правый Shift  левый Shift Ctrl Alt Scroll Lock Num Lock Caps Lock номер бита 1 2 3 4 5 6 7 Пример.  26 Проверка состояния клавиши левый shift: program KLAV; uses crt; function lshiftpressed:boolean; var status:byte; begin asm mov AH,0.2h int 16h mov status,AL end; if (status and 2)>0 then Lshiftpressed :=true else Lshiftpressed:=false; end; begin clrscr; repeat gotoxy(10,10); if lshiftpressed then write ('leviy SHIFT nagat') else write ('ne nagat'); until keypressed; end. Тема №6 «Функции прерывания 21Н» Прерывание  int  21Н предназначено для вызова функций  MS­Dos. Здесь насчитывается около 90 различных функций, которые могут быть вызваны по прерываниям, при этом номер прерывания функции помещаются в регистр АН. Эти функции разделяются на 2 группы: 1.функции ввода 27 2.функции вывода Каждой функции приводятся необходимые параметры, определяющие регистр, который должен быть инициализирован перед вызовом прерывания 21Н. Рассмотрим основные функции вывода и функции даты и времени. Функции вывода 02Н  – это функция вывода символов на стандартный вывод и устанавливает курсор в первой позиции. При этом в регистр DL должно быть занесено значение символа или код символа. Примеры:   1)вывести  звездочку.   Mov Ah,02h   Mov Dl,’*’   int 21h 2)Вывести на экране символ «рожица»,код которой 1   Mov Ah,02h   Mov Dl,1   int 21h 05Н ­ вывод информации на печать. Эта функция посылает первый символ на принтер. При этом Dos  ожидает,   когда   принтер   будет   готов   принять   символ.   Можно   прервать   ожидание комбинацией   клавиш  Ctrl+Break.   Выходом   по   умолчанию   является   порт   принтера.   Для немедленной   печати   необходимо   послать   символ   конца   строки(0dh)   или   символ   конца страницы(0ch). Так как многие принтеры собирают символы для печати, во внешнем буфере и не производят печать, пока буфер не заполнится или не встретится символ конца строки или конца страницы. Пример: 1)вывести на принтер заданную страницу, в которой последний символ $ Mov Ah,05h Mov Dl,’$’ int 21h Mov Dl,0ch 2)вывести на принтер заданную строку последней символ которой, «рожица» с кодом 1. Mov Ah,05h Mov Dh,1 28 int 21h Mov Dl,0dh 09Н­вывод строки. Эта функция передает строку символов на стандартное устройство вывода. При этом регистре Dx необходимо занести адрес строки. Строка должна заканчиваться знаком $ т.к. он будет являться управляющим символом для распознавания строки системой Dos. Пример: 1)Код программы, в которой задана строка переменной str, следует вывести ее на экран.  Mov Ah,09h Mov Dx,offset str int 21h 2) Код программы, которая выводит заданную строку 3 раза. Var   str:=’203 gruppa$’; asm Mov Cx,3 @Lab: Mov Ah,9 Mab Dx,offset str int 21h Loop @Lab end; readln; end. Функции даты и времени. 2АН – возвращает текущую системную дату, помещая год из регистра СХ, месяц – DH, день – DL, день недели – AL. Пример. Код программы вывода текущей даты, устанавливаемой автоматически. 29 Var year,month,dayofweek,day:integer; Begin asm mov Ah,2ah mov year,cx mov month,dh mov dayofweek,al int 21h end; writeln(‘год’,year); writeln(‘месяц’,month); writeln(‘день’,day); writeln(‘день недели’,dayofweek); end. 2ВН – устанавливает  текущую дату, вводимую пользователем. Использует те же регистры что и функция 2АН. Пример: Код программы вывода текущей даты, вводимую пользователем. Var year,month,dayofweek,day:integer; writeln(‘введите год’); read(year); writeln(‘введите месяц’); read(month); writeln(‘введите день’); read(day); writeln(‘введите день недели’); read(dayofweek); asm mov ah,1bh mov cx,year mov dh,month mov dl,day mov al,dayofweek end; end. 30 2СН  – возвращает   текущее системное время, помещает часы из регистра  CH, минуты из  CL, секунды – DH, сотые доли из DL. Пример: Код программы вывода текущего времени, устанавливаемого автоматически. Var  hour,minuts,seconds :integer; asm  mov ah,2ch mov hour,ch mov minuts,cl mov seconds,dh int 21h end; writeln(‘час’, hour); writeln(‘минуты’, minuts); writeln(‘секунды’, seconds,); end. 2DH  –   устанавливает   текущее   системное   время,   вводимые   пользователем   использует   те   же регистры что и 2СН.  Пример: Код программы вывода текущего времени, вводимого пользователем. Var  hour,minuts,seconds :integer; writeln(‘введите час’); read (hour); writeln(‘введите минуты’); read(minuts); writeln(‘введите секунды’); read(seconds); asm mov ah,2dh mov ch,hour mov cl,minutes mov dh,seconds 31 int 21h end; end. Тема №7 «Метки» Метки   в   ассемблере   определяются   также,     как   в   Паскале:   перед   оператором   записывается идентификатор метки и двоеточие.  Как и в Паскале, метки в ассемблере должны описываться в объявлении label того блока, который содержит оператор asm. Однако из этого правила есть одно исключение. Это локальные метки. Локальные метки ­ это метки, которые начинаются с символа @. Поскольку этот   символ не может быть частью идентификатора Паскаля,   такие локальные   метки   автоматически   ограничиваются   использованием   их   в   операторах   asm. Локальная метка известна только в определяющем ее операторе asm (то есть область  действия локальной метки   начинается от ключевого слова asm и заканчивается ключевым словом end оператора asm, который ее содержит).              В отличие от обычной метки, локальную метку перед ее использованием не требуется описывать в объявлении label.              Идентификатор локальной метки состоит из символа @, за которым  следует одна или более  букв (A..Z) цифр (0..9) символов  подчеркивания или  символов  @.    Как и все метки, идентификатор завершается двоеточием. Метка – это переход в нужное место в программе. Любой команде Ассемблера может предшествовать одна или несколько меток. В ассемблере используется два вида меток: 1. Глобальная – эта метка задаётся в Паскале после слова Label 2. Локальная   –   объявляются   не   посредственно   внутри   Ассемблера.   Такие   метки обязательно начинаются со знака @ для того, чтобы Паскаль мог отличить локальную метку от глобальной метки. Пример: Код программы вывода заданной строки три раза. Program primer; Var str:=string; Begin      str:=’Hello, world!!!!$’; 32 asm     mov Cx,3 @ Lab:     mov Ah,9     mov Dx,offset str     loop @ lab          end;          readln;          end. Тема №8 «Использование подпрограмм в Ассемблере» Вызов подпрограммы осуществляется с помощью команды.   CALL <имя подпрограммы > <имя подпрограммы> proc    команда ассемблера <имя подпрограммы> endp Так же может записываться в подпрограмме команда RET. RET – передает управление на следующую после call строку.                          Инструкция RET  генерирует код машинной   инструкции   возврата ближнего или дальнего типа,  в зависимости от модели вызова текущей процедуры или функции. Например:               procedure NearProc; near;              begin                asm                  ret      { генерируется ближний возврат }                end;              end;             procedure FarProc; far              begin                asm                  ret      { генерируется дальний возврат } 33 end;              end;                 С другой стороны,   инструкции RETN и RETF всегда   генерируют ближний или   дальний возврат соответственно,  независимо от модели вызова текущей процедуры или функции. Пример. Вывести на экран строку, используя подпрограммы вывода на экран и ожидания нажатия клавиши. Var str1,str2:string; begin         Str1:=’нажмите любую клавишу’;         Str2:=’вы нажали клавишу’; asm mov Dx,offset str1 call out_string call wait_key jmp lab out_string proc mov Ah,9 int 21h ret out_string endp wait_key proc mov Ah,10h int 16h ret wait_key endp end; lab: end. 34 При вызове подпрограммы командой  CALL  процессор запоминает адрес следующей за этой командой строки и помешает этот адрес в стек. При выполнении команды RET процессор извлекает из стека адрес и переходит на соответствующую строку. Тема №9 «Ассемблирование программ» Общий принцип ассемблирования программ включает в себя два этапа: 1   этап   ассемблирование.   Программа   ассемблера   создает   объектный   файл   с расширением   .obj.   Данай   файл   является   переходным   между   ассемблерным   файлом   с расширением   .asm    и   файлом   типа.com  или   .exe.   В   случае   если   ассемблированный   листинг слишком   большой,   то   программа   разбирает   на   несколько   частей.   В   большинстве   случает, применяются директивы include. Однако если файла присоединяемые указанной директивой большие и в основном не изменяемые (готовые   процедуры)   то   постоянное   Ассемблирование   этих   процедур   может   занять   много времени.   В   таком   случае   каждая   отдельно   взятая   часть   программы   ассемблируется   по отдельности, при этом создается один или несколько объектных файлов, который не требует постоянного ассемблирования, а только компоновки.   2этап компоновка  если в процессе ассемблирования  не было выявлено ошибок, то программа   ассемблер   создает   объектный   файл   за   тем   не   обходимо   воспользоваться компоновщиком,   который   входит   в   комплект   программ   ассемблера.   Данная   процедура выполняется гораздо быстрее, чем ассемблирование. Именно компоновщик создает готовый к запуску файл  .exe или .com из объектного файла. Тип   .com  не может превышать 64 Кбайт и используется только в  MS­Dos,  однако он очень компактный и удобный для написания не больших программ и резидентных команд под MS­Dos. В   большинстве   случаев,   если   программа   написана   на   чистом   ассемблере,   под  MS­Dos,   нет необходимости создавать файл типа   .exe. Для создания стандартных программ типа . exe нет необходимости указывать, какие – либо параметры при компоновке в отличие от типа . com Компоновщик   так   же   проверяет,   нет   ли   ошибок   в   объектном   файле,   но   грамматических,   а логических. Если ошибок не было обнаружено, то компоновщик создает машинный код, т.е. программу типа . com или . exe, которую можно запускать на выполнение. 35 36 Контрольные задания. Контрольная работа №1 1 Вариант. 1. Дать определение понятию Ассемблер. Два этапа выполнения программ на Ассемблере. 2. Рассказать про регистры указатели. 3. Рассказать про целые числа. 4. Команды пересылки. 5. Дать определение понятию прерывания. Виды прерываний. 6. Составить программу на сложение 3 чисел: 12, 10, 40. 7. Даны команды, следует определить к какой группе они относятся: ­ Add ­ Movsb ­ Loop ­ Sub ­ out ­ int ­and ­ call ­ ­ not      8. Что такое цикл. Команда циклов.  JL 2 Вариант. 1. Использование Ассемблера в Паскале. 2. Рассказать про регистры данных. 3. Рассказать про символы. 4. Арифметические команды. 5. Дать определение понятию метка. 2 вида меток. 6. Составить программу, которая должна поместить число 10 в стек и произвести замену  данного числа на число 20 и извлечь его из стека. 7. Указать где идентификатор, а где число: ­ 0CH ­ 13H ­ A5H ­ SED  ­ CX ­ 101B ­ A4 ­ 2DH      8. Перечислить группы команд Ассемблера. 37 3 Вариант. 1. На какие группы можно разделить команды Ассемблера  относительно команд  процессора. 2. Рассказать про сегментные регистры. 3. Рассказать про идентификаторы. 4. Битовые команды. 5. Перечислить виды адресации. 6. Составить программу вычитания 3 чисел: 40, 35, 2, используя регистр Ах и вывести  результат в переменную Х. 7.Даны регистры, следует определить к какой группе они относятся: ­ AL ­ CF ­ BX ­ DI         ­     CS  ­ DF ­ BP ­CH ­ IP ­ SS 8. Дать определение понятию регистр. 4 Вариант. 1. Назовите программы, которые пишут на Ассемблере. 2. Рассказать про регистры флагов. 3. Рассказать про предложения. 4. Строковые команды. 5. Дать определение понятием условный и безусловный переходы.  6. Составить программу умножения 3 чисел: 20, 10, 5, используя регистр Ах и вывести  результат в переменную У. 7. Указать где служебное имя, а где нет: ­ 2D5 ­ DIV ­ BX ­ Lab ­ D ­ S.500 ­ ADD ­ A5 38 8. Назвать 2 случая использования прерываний в программе.  Контрольная работа №2 Вариант I 1. Использование подпрограмм в ассемблере. 2. Функция 02h. 3. Различие между Паскалем и Ассемблером. 4. Составить программу вывода на экран символа «!» 2000 раз. 1. Составить программу вывода времени на экран, которое устанавливается автоматически. 2. Определите ошибки в написанной программе. Напишите программу правильно. program prim; var str: string; begin str:­,luchaya gruppa tehnikuma!!!!!'; asm mov Ah,02h mov dx, str int21h end; readln; end. 39 Вариант II 1. Дать определение понятию стек. Команды работы со стеком. 2. Функция 09h. 3. Дать определение понятию ассемблирование программ. Назвать два этапа ассемблирования. 4. Составить программу вывода на экран следующей строки «Assembler». 5. Составить программу вывода даты на экран, которая устанавливается  автоматически. 7. Определите результат данной программы, program KLAV; uses crt; function NLpressed:boolean;  var status:byte;  begin  asm mov AH,02h  int 16h mov status,AL  end; if (status and 6)>0 then NLpressed =true  else NLpressed:=false;  end;  begin clrscr;  repeat gotoxy(10,10);  if NLpressed then  write (‘NumLock nagat)  else write ('ne nagat');  until keypressed;  end. 40 Вариант III 1. Дать определение понятию функций прерывания 21h. Как ее вызвать. 2. Функция вывода времени. 3. Рассказать про первый этап ассемблирования программ. 4. Составить программу вывода на экран символа «$». 1. Составить программу вывода даты на экран, которая вводится вручную. 2. Определите ошибки в написанной программе. Напишите программу правильно. program prim; var stnbyte; begin str:='PRIVET!$'; asm mov dx,3 @lab: mov ah,9 mov dx, offset str int 16h loop @lab end; readln; end. 41 Вариант IV 1. Функция 05h. 2. Функция вывода даты. 3. Описать второй этап ассемблирования программ. 4. Составить программу вывода на экран следующей строки «Pascal» 10 раз. 5. Составить программу вывода времени на экран, которое вводится вручную пользователем. 6. Определите результат данной программы. Назовите прерывания и  функцию, с  помощью которых выводится результат программы. program prim; label nextface; begin asm mov ax, 0b800h mov es, ax mov di, '0' mov al, 1 mov ah, 100 mov ex, 10 nextface: mov es:[di], ax add  di,2 loop nextface mov ah, 10h int 16h end; end. 42 Лабораторная работа №1. по теме «Работа с командами Ассемблера» Практическая часть. Цель: освоить работу команд Ассемблера. Варианты заданий. 1. Составить программу сложения 3 – х чисел: 45, 89, 110. Результат вывести в переменную  Х. 2. Составить программу вычитания 3 – х чисел: 120, 30, 65. Результат вывести в переменную У. 3. Составить программу умножения 2 – х чисел: 40, 35. Результат вывести в переменную Z. 4. Составить программу деления числа 500 на число 100. Результат вывести в переменную  В. 5. Составить программу замены числа 30 на число 50. Замену осуществлять через стек. 6. Составить программу сложения  двух двоичных чисел 00111010 и 100001111, используя регистр AL. Результат  вывести в переменную А. 7. Составить программу   двух двоичных чисел  111011 и 1111, используя    регистр  AL. Результат  вывести в переменную В. 8. Составить   программу   отрицания   двоичных   чисел   1011011   и   101101111,   используя регистр AL. Результат  вывести в переменную С и В соответственно. 9. Составить программу помещение числа 30 в стек и извлечение его из стека в переменную  А. 10. Составить программу сравнение чисел 20 и 67, и выбрать из них наибольшее. Данные числа хранятся в регистрах Ах и Вх соответственно. Найденное наибольшее значение поместить в регистр  Dx. 11. Составить программу проверки подключения принтера. 12. Составить программу сравнение чисел 10 и 6, и выбрать из них наименьшее. Данные числа хранятся в регистрах Ах и Вх соответственно. Найденное наименьшее значение поместить в регистр  Dx. 43 Лабораторная работа №2. по теме «Использование функций прерывания 21H в реализации задач» Цель: освоить работу основных функций прерывания 21H  при реализации задач вывода строк и  символов. Варианты заданий. 1. Составить программу вывода на экран строки «Privet Admin» через переменную st. 2. Составить программу вывода на экран строки «Turbo Pascal» 15 раз через переменную  stroka 3. Составить программу вывода на экран символа  ^  с помощью прерывания 21H.  Составить программу вывода на экран символа  ? 20 раз  с помощью прерывания 21H. 4. 5. Составить программу вывода на экран строки вводимую пользователем. 6. Составить программу вывода на экран строки 7 раз, строка должна вводится  пользователем. 7. Составить программу вывода на экран символа с кодом единица с помощью прерывания  21H. 8.  Составить программу вывода на экран символа  с кодом ! 10 раз  с помощью прерывания  21H. 9. Составить программу вывода на экран любой строки через переменную str. 10. Составить программу вывода на экран любой строки 10 раз через переменную str. 44 Лабораторная работа №3. по теме «Использование меток и подпрограмм» Цель: Освоить работу меток и подпрограмм, а также функций вывода даты и времени при  реализации задач Ассемблера. Варианты заданий. 1. Составить программу вывода текущего времени, установленного автоматически. Часы  выводятся в переменную х, минуты – у, секунды – z. 2. Составить программу вывода текущего времени, установленного пользователем вручную.  Часы выводятся в переменную chas, минуты – minut, секунды – sec. 3. Составить программу вывода текущей даты, установленной автоматически. Год  выводится в переменную х, месяц – у, день – z. 4. Составить программу вывода текущей даты, установленной пользователем вручную. Год  выводится в переменную god, месяц – mes, день –  den. 5. Составить программу проверки состояния нажатия клавиши ALT.  6. Составить программу вывода строки, используя подпрограммы вывод на экран и  ожидания  нажатия клавиши. 7. Составить программу, выводящую на экран сообщения, ждущее нажатие любой клавиши  и показывает код этой клавиши. 8. Составить программу вывода строки «Hello, LiDAMT» через переменную str c  использование локальной метки Lab.  45 Самостоятельная работа студента. «Решение задач по образцу. Решение вариантных задач» 1. Составить программу сложения 2 – х чисел: 20, 9. Результат вывести в переменную F. 2. Составить программу вычитания 2 – х чисел: 30, 15. Результат вывести в переменную D. 3. Составить программу умножения 2 – х чисел: 23, 5. Результат вывести в переменную X. 4. Составить программу деления числа 100 на число 10. Результат вывести в переменную А. 5. Составить программу замены числа 3 на число 5. Замену осуществлять через стек. 6. Составить программу вывода на экран строки «Hello, Student» через переменную str. 7. Составить программу вывода на экран строки «Hello, Student» 15 раз через переменную  str. 8. Составить программу вывода на экран символа  *  с помощью прерывания 21H. 9.  Составить программу вывода на экран символа  *  20 раз  с помощью прерывания 21H. 10. Составить программу вывода на экран строки 3 раза, строка должна вводится  пользователем. 11. Составить программу вывода текущего времени, установленного автоматически. Часы  выводятся в переменную c, минуты – m, секунды – sec. 13. Составить программу вывода текущей даты, установленной автоматически. Год  выводится в переменную g, месяц – m, день – d. 14. Составить программу проверки состояния нажатия клавиши NumLock.  15. Составить   программу   сравнение   чисел   100,   50   и   60,   и   выбрать   из   них   наименьшее. Данные числа хранятся в регистрах Ах, Вх, Cx соответственно. Найденное наименьшее значение поместить в регистр  Dx. 46 Список используемой литературы. 1. Юрагов   Е.   А.   Системное   программирование.   Лабораторный   практикум:   Пособие   для СПО, Издательство: МГОУ, 2011.  2.  Калашников О.А. Ассемблер ­ это просто. Учимся программировать – М.: БХВ­ Петербург, 2011. 3. Семакин И.Г. Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования – М.: Издательский центр «Академия», 2013. 47

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"

Методическое пособие на тему "Использование Ассемблера при решении задач"

Методическое пособие на тему "Использование  Ассемблера при решении задач"
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.
02.03.2017