Методическое пособие на тему "Использование Ассемблера при решении задач"
Оценка 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.Когда необходимо воспользоваться обработчиком прерываний.
Второй случай называется вызовом системных функций MSDos.
Подпрограмма 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Н предназначено для вызова функций MSDos. Здесь насчитывается
около 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 Кбайт и используется только в MSDos, однако он очень
компактный и удобный для написания не больших программ и резидентных команд под MSDos.
В большинстве случаев, если программа написана на чистом ассемблере, под MSDos, нет
необходимости создавать файл типа .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
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Методическое пособие на тему "Использование Ассемблера при решении задач"
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.