- •02H/03h - Чтение/запись секторов.
- •Язык Ассемблер
- •Сегментация памяти
- •Структура программы на языке Ассемблер
- •В более общем случае операнды могут входить как составные части в более сложные образования, называемые выражениями. Типы операторов
- •Режимы адресации
- •Директивы ассемблера
- •Директива задания исходных данных:
- •Директива использования сегментных регистров по умолчанию:
- •Упрощенные директивы определения сегмента
- •Идентификаторы, создаваемые директивой model
- •Модели памяти
- •Инструкции пересылки данных и двоичной арифметики
- •Запись программ на языке ассемблера
- •Пример записи формулы
- •Текст программы:
- •Варианты заданий
- •Циклические и разветвляющиеся программы
- •Команда сравнения
- •Безусловные переходы
- •Условный переход
- •Пример написания программы работы с массивами слов
- •Варианты заданий
- •Применение логических инструкций
- •Логические инструкции
- •Примеры использования логических команд
- •Пример выполнения работы
- •Варианты заданий
- •Обработка символьной информации с помощью функций dos
- •Программные прерывания и системные вызовы
- •Функция оан
- •Функция 0Bh
- •Пример выполнения работы
- •Варианты заданий
Запись программ на языке ассемблера
Ниже приведена типичная структура простой программы на ассемблере.
.data ;директива начала сегмента данных
d1 dw 34h
d2 db 10100110b
d3 dd 3 dup (?)
.code
start: mov ax,data ; Загрузить адрес
mov ds,ax ; сегмента данных
.
. ; текст программы
quit: mov ax,4c00h ; Код завершения 0
int 21h ; Выход в DOS
end start
Загрузка адреса сегмента данных состоит из двух команд, так как непосредственные данные нельзя заносить прямо в сегментный регистр.
Для завершения программы и выхода в DOS имеется несколько возможностей, рекомендуется использовать две команды, начинающиеся с метки quit.
Пример записи формулы
Вычислить Х = 3А + ( В + 5 ) / 2 – С – 1,
где А, В, С, Х- целые знаковые числа занимающие слово, написать программу реализующую данную формулу.
Распишем формулу по отдельным операциям:
АХ ← А ; значение А в регистре АХ
АХ ← 2 *( АХ ) ; 2А в АХ
АХ ← ( АХ ) + А ; 3А в АХ
ВХ ← В ; В в ВХ
ВХ ← 5 + ( ВХ ) ; В+5 в ВХ
ВХ ← (ВХ ) / 2 ; ( В+5) / 2 в ВХ
АХ ← (BX ) + ( AX ) ; 3А+( В+5 ) / 2 в АХ
АХ ← ( АХ ) – С ; 3А+( В+5 ) / 2 – С в АХ
АХ ← ( АХ ) -1 ; 3А+( В+5 )/2 – С – 1 в АХ
Х ← ( АХ ) ; 3А+( В+5 )/2 – С – 1 в Х
Ниже приведена типичная структура простой программы на ассемблере.
Текст программы:
.model small
.data
a dw 10
b dw 20
c dw 5
x dw ?
.stack 100h
. code
start: mov ax, @data ; загрузить адрес
mov dx, ax ; сегмента данных
mov ax, a
sal ax, 1
add ax, a
mov bx, b
add bx, 5
sar bx, 1
add ax, bx
sub ax, c
dec ax
mov x, ax ; запись результата в память
quit: mov ax, 4c00h ; код завершения 0
int 21 ; выход в dos
end start
Варианты заданий
Разработать программу реализующую указанную формулу, исполнить программу с несколькими ( три – четыре) наборами исходных данных, проверить правильность результатов.
Х= А – 5 (В – 2С) + 2
Х= - 4А + (В + С) / 4 + 2
Х= 7А – 2В – 100 + С
Х= - А / 2 + 4 (В + 1) + 3С
Х= 5 (А – В) – 2С + 5
Х= (А/ 2 + В) / 4 + С – 1
Х= - (С + 2А + 4В + В)
Х= 6С + (В – С + 1) / 2
Х= 2 – В (А + В) + С / 4
Х= 2В – 1 + 4 (А – 3С)
Х= (2А + В) / 4 – С / 2 + 168
Х= 6 (А – 2В + С / 4) + 10
Х= 5 (А – В ) + С mod 4
Х= - (5 – (С + 2А) * 4В + 38)
Х= А – 3 (А + В) + С mod 4
Х= 3(А – 2В) +50 – С / 2
Х= (3А + 2В) – С / 4 + 217
Х= 3(С – 2A) + (В – С + 1) / 2
Х= (2А + В) / 4 – С / 2 + 168
Х= 6 (А – 2В + С / 4) + 10
Х= 3 (А – 4В ) + С / 4
Х= - ( - (С + 2А) * 5В – 27)
Х= А / 2 – 3 (А + В) + С * 4
Х= 3(А – 2В) +50 – С / 2
Х= 5А + 2В – B / 4 + 131
Оператор получения смещения выражения offset позволяет получить значение смещения выражения в байтах относительно начала того сегмента, в котором выражение пределено
.data
pole dw 5
…
.code
…
mov ax,seg pole
mov es,ax
mov dx,offset pole ;теперь в паре es:dx полный адрес pole
Циклические и разветвляющиеся программы
Команда передачи, управления служит для передачи управления инструкции, не следующей непосредственно за данной. Управление может передаваться как внутри текущего сегмента кода (внутрисегментная передача управления), так и за его пределы (межсегментная передача управления). Тип передачи управления может быть задан ассемблеру предшествующим адресу перехода ключевым словом NEAR (внутрисегментная) или FAR (межсегментная).
