Задача 3.3:
data segment para 'data' ;Откроем сегмент данных
txt db 'A', 84h, 'B', 84h, 'P', 84h, 'И', 84h, 'Я', 84h, '!', 84h
txt_len=$-txt
data ends ;Откроем сегмент данных
assume CS:code, DS:data ;Определим соответствие сегментных регистров сегментам
stk segment stack para 'stack' ;Откроем сегмент стека
db 256 dup (?) ;Отведем под стек 256 байт
stk ends ;Закроем сегмент стека
code segment para 'code' ;Откроем сегмент команд
begin: mov AX, data ;Настроим DS
mov DS, AX ;на сегмент данных
mov AX, 0B800h ;Сегментный адрес видеобуфера
mov ES, AX ;Инициализируем ES
;Выведем на экран текст
mov DI, 1672 ;Смещение до середины экрана
lea SI, txt ;DS:SI -> txt
cld ;Направление по строчке вперед
mov CX, txt_len/2 ;Столько слов переслать
rep movsw
mov AX, 4C00h ;Функция DOS завершения программы
int 21h ;Вызов функции DOS
code ends ;Закроем сегмент команд
end begin ;Конец текста с точкой входа
Самостоятельная работа
Составить программу по аналогии с примерами, собрать ее и посмотреть в отладчик.
1. Зафиксировать состояния системных регистров и регистров общего назначения на каждом шагу
выполнения программы.
2. Составить программу, которая выполняет пересылку, в зависимости от варианта:
2) КОНСТАНТА- СТЕК-DH-ІМ’Я1, АДРЕСА (ІМ’Я1) -ІМ’Я2
3. Составить программу, которая осуществляет обмен содержимого указанных регистров:
2) CX, SI
тремя способами: с помощью mov, xchg и стека.
Задача 3.4
data segment para 'data' ;Откроем сегмент данных
name1 db 5
name2 dw 8 ;Двухсловная ячейка
data ends ;Откроем сегмент данных
assume CS:code, DS:data ;Определим соответствие сегментных регистров сегментам
stk segment stack para 'stack' ;Откроем сегмент стека
db 256 dup (?) ;Отведем под стек 256 байт
stk ends ;Закроем сегмент стека
code segment para 'code' ;Откроем сегмент команд
begin: mov AX, data ;Настроим DS
mov DS, AX ;на сегмент данных
push 9 ;9 -> в стек
pop CX ;Из стека ->CX
mov name1, word ptr DH ;уточняем размер DH, перемещаем в name1
lea name2, name1 ;помещаем адрес переменной name1 в переменную name2
mov AX, 4C00h ;Функция DOS завершения программы
int 21h ;Вызов функции DOS
code ends ;Закроем сегмент команд
end begin ;Конец текста с точкой входа
Задача 3.5
data segment para 'data' ;Откроем сегмент данных
num1 dw 5
num2 dw 8
data ends ;Откроем сегмент данных
assume CS:code, DS:data ;Определим соответствие сегментных регистров сегментам
stk segment stack para 'stack' ;Откроем сегмент стека
db 256 dup (?) ;Отведем под стек 256 байт
stk ends ;Закроем сегмент стека
code segment para 'code' ;Откроем сегмент команд
begin: mov AX, data ;Настроим DS
mov DS, AX ;на сегмент данных
mov CX, num1 ;присваиваем значение num1 в регистр CX
mov SI, num2 ;присваиваем значение num2 в регистр SI
mov AX, CX ;используем регистр AX в качестве временного хранилища для обмена
mov CX, SI ;CX присваиваем значение SI
mov SI, AX ;SI присваиваем значение AX. обмен произведен.
mov AX, 4C00h ;Функция DOS завершения программы
int 21h ;Вызов функции DOS
code ends ;Закроем сегмент команд
end begin ;Конец текста с точкой входа