- •Машинное исполнение
- •1. Просмотр памяти.
- •2. Пример машинных кодов: непосредственные данные.
- •3. Пример машинных кодов: определение данных.
- •4. Пример машинных кодов: определение размера памяти.
- •5. Специальные средства отладчика.
- •6. Сохранение программы из отладчика.
- •Ассемблирование и выполнение программы
- •1. Ввод программы
- •2. Ассемблирование программы.
- •3. Компоновка программы.
- •4. Выполнение программы.
- •5. Ввод, ассемблирование, компоновка, выполнение и анализ листинга исходной программы.
- •Определение данных
- •1. Директивы определения данных.
- •2. Определение данных с числом повторений.
- •3. Директива определения байта (dв).
- •4. Директива определения слова (dw).
- •5. Директива определения двойного слова (dd).
- •6. Директива определения поля из четырех слов (dq).
- •7. Директива определения десяти байт (dt), директива equ.
- •Программы в com-файлах
- •1. Создание exe-файла.
- •2. Получение com-файла.
- •Логика и организация программы
- •1. Команда jmp.
- •2. Команда loop.
- •3. Сегмент стека.
- •4. Программа: расширение операции пересылки.
- •5. Программа: замена строчных букв на заглавные.
- •6. Команды сдвига и циклического сдвига.
- •7. Команды логических операций: and, or, xor, test, not.
- •Xor al,bl ;Логическое сравнение
- •Команды обработки строк
- •1. Rep: префикс повторения команды.
- •2. Программа: строковые операции.
- •3. Сканирование и замена.
- •4. Дублирование образца.
- •5. Программа: выравнивание справа при выводе на экран.
- •Арифметические операции 1: обработка двоичных данных
- •1. Сложение и вычитание.
- •2. Многословное сложение.
- •3. Умножение.
- •4. Повышение эффективности умножения.
- •5. Многословное умножение.
- •6. Сдвиг регистровой пары dx:ax.
- •7. Деление.
- •8. Деление вычитанием.
- •9. Преобразование знака.
- •Арифметические операции 2: обработка данных в форматах ascii и
- •1. Сложение в ascii-формате.
- •2. Вычитание в ascii-формате.
- •3. Умножение в ascii-формате.
- •4. Деление в ascii-формате.
- •5. Двоично-десятичный формат (bcd).
- •6. Преобразование ascii-формата в двоичный формат и наоборот.
- •Обработка таблиц
- •1. Прямой табличный доступ
- •2. Табличный поиск.
- •3. Табличный поиск с использованием сравнения строк.
- •4. Транслирующая команда xlat.
- •5. Программа: вывод шестнадцатиричных и ascii-кодов.
- •6. Программа: сортировка элементов таблицы.
- •Макрокоманды
- •If (условие)
- •If (условие)
- •1. Простое макроопределение.
- •2. Использование параметров в макрокомандах.
- •3. Комментарии в макрокомандах.
- •4. Использование макрокоманд внутри макроопределения.
- •5. Директива local.
- •6. Использование библиотек макроопределений.
- •7. Конкатенация (&).
- •8. Директивы повторения: rept, irp, irpc.
- •Inc ctr ;Увеличить счетчик
- •Inc dx ;Увеличить счетчик
- •Inc dx ;Увеличить счетчик
- •9. Макрокоманды, использующие директивы if и ifndef.
- •10. Макрокоманды, использующие директиву ifidn.
- •Связь между подпрограммами
- •1. Программа: использование директив extrn и public для меток.
- •2. Программа: использование директивы public в кодовом сегменте.
- •3. Программа: общие данные в подпрограмме.
- •4. Передача параметров.
5. Программа: выравнивание справа при выводе на экран.
5.1. Запишите в текстовом редакторе NORTON следующую программу в СОМ-формате(exring.asm):
.286
TITLE EXRING (COM) Выравнивание справа
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
ORG 100H ;Начало в конце PSP
BEGIN: JMP MAIN ;Обход через данные
;-------------------------------------------------------
NAMEPAR LABEL BYTE ;Имя списка параметров
MAXNLEN DB 31 ;Максимальная длина
ACTNLEN DB ? ;Число введенных символов
NAMEFLD DB 31 DUP(' ') ;Имя
PROMPT DB 'Name?','$'
NAMEDSP DB 31 DUP(' '),13,10,'$'
ROW DB 00
;--------------------------------------------------------
MAIN PROC NEAR ;Основная процедура
MOV AX,0600H
CALL Q10SCR ;Очистить экран
SUB DX,DX
CALL Q20CURS ;Установить курсор в 0
A10LOOP:CALL B10INPT ;Ввести имя
CALL F10CLNM ;Очистить область имени
TEST ACTNLEN,0FFH ;Нет имени? (т.е. конец)
JZ A90 ;Да - выйти
CALL D10SCAS ;Найти звездочку
CMP AL,'*' ;Найдена?
JE A10LOOP ;Да - обойти
CALL E10RGHT ;Выровнять имя справа
CALL A10LOOP
A90: RET
MAIN ENDP
; Вывод запроса для ввода имени
; -----------------------------
B10INPT PROC
MOV AH,09
LEA DX,PROMPT ;Выдать текст запроса
INT 21H
MOV AH,0AH
LEA DX,NAMEPAR
INT 21H
RET
B10INPT ENDP
; Поиск звездочки в имени
; -----------------------
D10SCAS PROC
CLD
MOV AL,'*'
MOV CX,30 ;Длина сканирования 30
LEA DI,NAMEFLD
REPNE SCASB ;Звездочка найдена?
JE D20 ;Да - выйти
MOV AL,20H ;Нет - стереть * в AL
D20: RET
D10SCAS ENDP
; Выравнивание и вывод на экран
; -----------------------------
E10RGHT PROC
STD
SUB CH,CH
MOV CL,ACTNLEN ;Длина в СХ для REP
LEA SI,NAMEFLD
ADD SI,CX ;Вычислить правую позицию
DEC SI ;введенного имени
LEA DI,NAMEDSP+30 ;Правая позиция поля имени
REP MOVSB ;Переслать справа налево
MOV DH,ROW
MOV DL,48
CALL Q20CURS ;Установить курсор
MOV AH,09
LEA DX,NAMEDSP ;Выдать имя
INT 21H
CMP ROW,20 ;Последняя строка?
JAE E20
INC ROW ;Нет - увеличить номер
JMP E90
E20: MOV AX,0601H ;Да - прокрутить
CALL Q10SCR
MOV DH,ROW
MOV DL,00
CALL Q20CURS ;Установить курсор
E90: RET
E10RGHT ENDP
; Очистить область памяти
; -----------------------
F10CLNM PROC
CLD
MOV AX,2020H
MOV CX,15
LEA DI,NAMEDSP
REP STOSW ;Очистить 15 слов
RET
F10CLNM ENDP
; Прокрутка экрана
; ----------------
Q10SCR PROC ;АХ установлен при вызове
MOV BH,30 ;Цвет ( 07 для ч/б)
MOV CX,00
MOV DX,184FH
INT 10H
RET
Q10SCR ENDP
; Установить курсор
; -----------------
Q20CURS PROC ;DX установлен при вызове
MOV AH,02
SUB BH,BH
INT 10H
RET
Q20CURS ENDP
CODESG ENDS
END BEGIN
Процедуры данной программы выполняют следующие действия:
B10INPT Принимает имена длиной до 30 символов.
D10SCAS Использует команду SCASB для сканирования имен и обхода любого ввода, содержащего символ *.
E10RGHT Использует команду MOVSB для выравнивания имен по правой границе, выводит имена в колонку в правой части экрана. Длина в поле ACTNLEN из списка параметров ввода используется для вычисления самого правого символа в имени.
F10CLNM Использует команду STOSW для очистки области имени в памяти.
5.2. Выполнить ассемблирование и компоновку программы. Листинг программы записать в отчет.
5.3. Запустить программу из панели NORTON. Просмотреть работу программы. Выводы о работе программы записать в отчет.
СОДЕРЖАНИЕ ОТЧЕТА:
1. Листинги программ.
2. Выводы о работе программ.
КОНТРОЛЬНЫЕ ВОПРОСЫ:
1. Имеются следующие определения:
DATASG SEGMENT PARA
CONAME DB 'SPACE EXPLORERS INC.'
PRLINE DB 20 DUP(' ')
Используя цепочечные команды, выполните:
а) пересылку данных из CONAME в PRLINE слева направо;
б) пересылку данных из CONAME в PRLINE справа налево;
в) загрузку третьего и четвертого байтов области CONAME в регистр АХ;
г) сохранение содержимого регистра АХ в область по адресу PRLINE+5;
д) сравнение данных в областях CONAME и PRLINE;
е) сканирование области CONAME и поиск в ней символа "пробел".
Если символ будет найден, то переслать его в регистр ВН.
ОТВЕТЫ:
1. а)
CLD ;Пересылка слева направо
LEA SI,CONAME ;Инициализация
LEA DI,PRLINE ;для пересылки
MOV CX,20 ;20 байт
REP MOVSB ;
б)
STD
LEA SI,CONAME+19
LEA DI,PRLINE+19
MOV CX,20
REP MOVSB
в)
CLD ;Пересылка слева направо
LEA SI,CONAME+2 ;Начать с 3 4-го
LODSW ;Загрузить два байта
г)
CLD
LEA DI,PRLINE+5
MOV CX,01
REP STOVSW
д)
CLD ;Пересылка слева направо
MOV CX,20 ;20 байт
LEA SI,CONAME ;Инициализация
LEA DI,PRLINE ;адресов
REPE CMPSB ;Сравнение
е)
CLD
MOV CX,20
LEA DI,CONAME
MOV AL,20H
REPNE SCASB
JNE H20
MOV BH,20H
H20:RET
Л а б о р а т о р н а я р а б о т а N 7