- •1)Блочная структура программы: внутренние и внешние процедуры
- •3) Блочная структура программы: расположение процедур в исходном файле
- •4) Использования прерываний в ассеемблер-программах
- •5)Команды передачи управления: безусловные переходы. Адресация в переходах
- •6) Команды передачи управления: организация циклов
- •7) Команды передачи управления: условные переходы
- •8) Команды сдвигов и их использования
- •13. Место языков ассемблера среди языков программирования.
- •14. Модели памяти и их использования в tasm.
- •16. Передача параметров между процедурой и вызывающей программой Ассемблер.
- •17. Предложение языка ассемблера: директивы.
- •18. Предложения языка ассемблера: команды.
- •19. Предложения языка ассемблера: коментарии.
- •20. Представление данных в ibm pc: алфавитно-цифровые данные
- •21 Представление данных в ibm pc : Вещественные данные
- •22 Представление данных в ibm pc: Двоично-десятичных чисел
- •23 Представление данных в ibm pc: Целые числа
- •24 Программные пакеты masm и tasm общие функции и различие
- •29. Способы адресации в командах мп intel 80 * 86
- •Регистровая адресация
- •Непосредственная адресация
- •30.Способы передачи параметров между процедурой и вызывающейся программой
- •31. Стек . Работа со стеком
- •32. Структуры и форматы команд мп intel 80 * 86. Команды пересылки данных
- •34. Структура мп Intel 80x86: используемые регистры
- •35. Структура мп Intel 80x86: Операционное устройство, Устройство шинного интерфейса
5)Команды передачи управления: безусловные переходы. Адресация в переходах
Безусловный переход — это переход, который выполняется всегда. Безусловный переход осуществляется с помощью команды JMP. У этой команды один операнд, который может быть непосредственным адресом (меткой), регистром или ячейкой памяти, содержащей адрес. Примеры безусловных переходов:
jmp metka ;Переход на метку
jmp bx ;Переход по адресу в BX
jmp word[bx] ;Переход по адресу, содержащемуся в памяти по адресу в BX
Безусловные переходы осуществляются с помощью команды jmp, которая может использоваться в 5 разновидностях. Переход может быть: прямым коротким (в пределах -128... + 127 байтов); прямым ближним (в пределах текущего сегмента команд): прямым дальним (в другой сегмент команд); косвенным ближним (в пределах текущего сегмента команд через ячейку с адресом перехода); косвенным дальним (в другой сегмент команд через ячейку с адресом перехода).
Прямой короткий (short) переход. Прямым называется переход, в команде которого в явной форме указывается метка, на которую нужно перейти.
Прямой ближний (near), или внутрисегментный переход. Этот переход отличается от предыдущего только тем, что под смещение к точке перехода отводится целое слово. Это дает возможность осуществить переход в любую точку 64-кбайтного сегмента.
Прямой дальний (far), или межсегментный переход. Этот переход позволяет передать управление в любую точку любого сегмента.
Косвенный ближний (внутрисегментный) переход. В отличие от команд прямых переходов, команды косвенных переходов могут использовать различные способы адресации и, соответственно, иметь много разных вариантов.
Косвенный дальний (межсегментный) переход. Как и в случае ближнего перехода, переход осуществляется по адресу, который содержится в ячейке памяти, однако эта ячейка имеет размер 2 слова, и в ней содержится полный (сегмент плюс смещение) адрес точки перехода.
6) Команды передачи управления: организация циклов
Циклом называется повторяющееся выполнение последовательности команд.
Синтаксис объявления меток
Метка представляет собой символическое имя, вместо которого компилятор подставляет адрес. В программе на ассемблере можно присвоить имя любому адресу в коде или данных. Обычно метки используются для организации переходов, циклов или каких-то манипуляций с данными. По сути имена переменных, объявленных с помощью директив объявления данных, тоже являются метками. Но с ними компилятор дополнительно связывает размер переменной. Метка объявляется очень просто: достаточно в начале строки написать имя и поставить двоеточие
Команда LOOP
Для организации цикла предназначена команда LOOP. У этой команды один операнд — имя метки, на которую осуществляется переход. В качестве счётчика цикла используется регистр CX. Команда LOOP выполняет декремент CX, а затем проверяет его значение. Если содержимое CX не равно нулю, то осуществляется переход на метку, иначе управление переходит к следующей после LOOP команде.
Содержимое CX интерпретируется командой как число без знака. В CX нужно помещать число, равное требуемому количеству повторений цикла. Понятно, что максимально может быть 65535 повторений. Ещё одно ограничение связано с дальность перехода. Метка должна находиться в диапазоне -127…+128 байт от команды LOOP
Пример цикла
use16 ;Генерировать 16-битный код
org 100h ;Программа начинается с адреса 100h
mov ah,02h ;Для вызова функции DOS 02h - вывод символа
mov dl,'A' ;Первый выводимый символ
mov cx,26 ;Счётчик повторений цикла
metka:
int 21h ;Обращение к функции DOS
inc dl ;Следующий символ
loop metka ;Команда цикла
mov ah,09h ;Функция DOS 09h - вывод строки
mov dx,press ;В DX адрес строки
int 21h ;Обращение к функции DOS
mov ah,08h ;Функция DOS 08h - ввод символа без эха
int 21h ;Обращение к функции DOS
mov ax,4C00h ;\
int 21h ;/ Завершение программы
;-------------------------------------------------------
press:
db 13,10,'Press any key...$'
