LAB_9_2014c (1075931), страница 5
Текст из файла (страница 5)
mycode segment 'code'
assume cs:mycode, ds:mycode
assume ss: stseg
; Макрокоманда печати символа с переводом строки
; 1-й параметр= символ, второй парметр признак перевода "PER"
PRINT MACRO ch, CR
mov dl, ch
mov ah, 2
int 21h
IFIDN <CR>,<PER>
mov dl, 0Ah
mov ah, 2
int 21h
mov dl, 0Dh
mov ah, 2
int 21h
ELSE
IFNB <CR>
.ERR
%OUT ERRROR Ошибка параметра перевода строки
ENDIF
ENDIF
ENDM
; Макрокоманда печати одного символа
VARC DB 'C'
PRINTC MACRO SIMB
PUSH DX
PUSH AX
MOV DL , SIMB
MOV AH , 02H
INT 21H
POP AX
POP DX
ENDM
main proc
;Занесение регистра DS
PUSH CS
POP DS
;;;;;;;;;;;;;;;;;;
PRINT '5', PER
; Ошибка в команде -> print 'A', AAA
; При использовании вызова, расположенного выше генерируется ; ошибка пользователя
; Корректные вызовы
print 'A'
PRINT ' ', PER
; Корректные вызовы другой команды печати символа
PRINTC 'A'
MOV AL , 'B'
PRINTC AL
PRINTC VARC
; выход с ожиданием
; Запрос символа с клавиатуры
mov ah, 08h
int 21h
mov al, 0
; Выход в ДОС
mov ah, 4ch
int 21h
main endp
;-------------------
mycode ends
;-------
stseg segment stack 'stack'
dw 256 dup(0)
stseg ends
;-------
end main
Листинг программы, полученный при ее компиляции, приведен ниже. Жирным шрифтом я выделил макрорасширения, а размером шрифта и жирным шрифтом макровызовы:
0000 mycode segment 'code'
assume cs:mycode, ds:mycode
assume ss: stseg
; Макрокоманда печати символа с переводом строки
; 1-й параметр= символ, второй парметр признак перевода "PER"
PRINT MACRO ch, CR
mov dl, ch
mov ah, 2
int 21h
IFIDN <CR>,<PER>
mov dl, 0Ah
mov ah, 2
int 21h
mov dl, 0Dh
mov ah, 2
int 21h
ELSE
IFNB <CR>
.ERR
%OUT ERRROR Ошибка параметра перевода строки
ENDIF
ENDIF
ENDM
; Макрокоманда печати одного символа
0000 43 VARC DB 'C'
PRINTC MACRO SIMB
PUSH DX
PUSH AX
MOV DL , SIMB
MOV AH , 02H
INT 21H
POP AX
POP DX
ENDM
0001 main proc
;Занесение регистра DS
0001 0E PUSH CS
0002 1F POP DS
;;;;;;;;;;;;;;;;;;
PRINT '5', PER
0003 B2 35 1 mov dl, '5'
0005 B4 02 1 mov ah, 2
0007 CD 21 1 int 21h
0009 B2 0A 1 mov dl, 0Ah
000B B4 02 1 mov ah, 2
000D CD 21 1 int 21h
000F B2 0D 1 mov dl, 0Dh
0011 B4 02 1 mov ah, 2
0013 CD 21 1 int 21h
; Ошибка в команде -> print 'A', AAA
; При использовании вызова, расположенного выше генерируется ; ошибка пользователя
; Корректные вызовы
print 'A'
0015 B2 41 1 mov dl, 'A'
0017 B4 02 1 mov ah, 2
0019 CD 21 1 int 21h
PRINT ' ', PER
001B B2 20 1 mov dl, ' '
001D B4 02 1 mov ah, 2
001F CD 21 1 int 21h
0021 B2 0A 1 mov dl, 0Ah
0023 B4 02 1 mov ah, 2
0025 CD 21 1 int 21h
0027 B2 0D 1 mov dl, 0Dh
0029 B4 02 1 mov ah, 2
002B CD 21 1 int 21h
; Корректные вызовы другой команды печати символа
PRINTC 'A'
002D 52 1 PUSH DX
002E 50 1 PUSH AX
002F B2 41 1 MOV DL , 'A'
0031 B4 02 1 MOV AH , 02H
0033 CD 21 1 INT 21H
0035 58 1 POP AX
0036 5A 1 POP DX
0037 B0 42 MOV AL , 'B'
PRINTC AL
0039 52 1 PUSH DX
003A 50 1 PUSH AX
003B 8A D0 1 MOV DL , AL
003D B4 02 1 MOV AH , 02H
003F CD 21 1 INT 21H
0041 58 1 POP AX
0042 5A 1 POP DX
PRINTC VARC
0043 52 1 PUSH DX
0044 50 1 PUSH AX
0045 8A 16 0000 R 1 MOV DL , VARC
0049 B4 02 1 MOV AH , 02H
004B CD 21 1 INT 21H
004D 58 1 POP AX
004E 5A 1 POP DX
; выход с ожиданием
; Запрос символа с клавиатуры
004F B4 08 mov ah, 08h
0051 CD 21 int 21h
0053 B0 00 mov al, 0
; Выход в ДОС
0055 B4 4C mov ah, 4ch
0057 CD 21 int 21h
0059 main endp
;-------------------
0059 mycode ends
;-------
0000 stseg segment stack 'stack'
0000 0100[ dw 256 dup(0)
0000
]
0200 stseg ends
;-------
end main
Если макрокоманда вызвана с ошибочным параметром, в тексте примера этот вызов закомментирован, то макроассемблер сформирует сообщение об ошибке на этапе работы макропроцессора. Здесь внесена ошибка параметра “ААА” вместо “PER”:
…
; Ошибка -
print 'A', AAA
…
Пример ошибки при вызове нашего макроса и сообщения об ошибке в листинге:
; Ошибка -
print 'A', AAA
0014 B2 41 1 mov dl, 'A'
0016 B4 02 1 mov ah, 2
0018 CD 21 1 int 21h
1 .ERR
**Error** MAC1S.asm(33) PRINT(13) User error
…
…
И сообщения об ошибке в окне командной строки (см. %OUT в макросе):
ERRROR Ошибка параметра перевода строки
**Error** MAC1S.asm(33) PRINT(13) User error
При получении нормального представления текста на русском языке, нужно согласовать кодировки символов для печати и редактирования. Программа откомпилирована и отлажена в среде TASM. Компиляция, редактирование связей и отладка данной программы выполняется также, как и для других ЛР по Ассемблеру. Смотрите пособие и методические указания к ЛР.
Защита ЛР: Большаков С.А. "__"_____________201Х г. | Демонстрация ЛР: Большаков С.А. "__"_____________201Х г. |
Лабораторная работа №9 по курсу
Системное программирование
"*******************************"
(есть/нет дополнительные требования/ требований)
48
(количество листов)
ИСПОЛНИТЕЛЬ: | |
студент группы ИУ5-4Х | ________________ |
Петров И.С. | "__"_____________201Х г. |
Москва - 201Х
__________________________________________________________
29 Шаблон отчета по ЛР № 9
Шаблон отчета в виде документа с полями форматирования
Смотрите ниже структуру шаблона отчета баз автоматических полей:
Защищено: Большаков С.А. "__"_____________201Х г. | Демонстрация: Большаков С.А. "__"_____________201Х г. |
Лабораторная работа № 9 по курсу
Системное программирование
"***************?Название?****************"
(есть дополнительные требования или требования для продвинутых студентов)
48
(количество листов)
ИСПОЛНИТЕЛЬ: | ||
студент группы ИУ5-4Х | ________________ | |
Большаков С.А. | "__"_____________201Х г. |
Москва - 201Х
______________________________________________________________
СОДЕРЖАНИЕ
1. Цель выполнения лабораторной работы № Х 3
2. Порядок и условия проведения работы № Х 3
3. Описание ошибок, возникших при отладке № Х 3
4. Блок-схема программы 3
5. Текст программы на языке ассемблера 3
6. Результаты работы программы 3
7. Выводы по лр № Х 3
1. Цель выполнения лабораторной работы № Х
(Приводится цель выполнения работы из методических указаний по ЛР).
2. Порядок и условия проведения работы № Х
(Описывается последовательность шагов при выполнении ЛР. Эту информацию Вы сможете найти в методических указаниях к каждой конкретной ЛР).
3. Описание ошибок при отладке программы ЛР № Х
(Приводится перечень ошибок, которые проявились при отладке программы студентом и конкретизируются способы их устранения. Лучше в виде следующей таблицы с колонками:
№ п/п | Проявление ошибки | Причина ошибки | Способ устранения |
Синтаксис – ошибка написания команды: MOW вместо MOV | Ошибка ввода текста | Редактирование ntrcnf | |
… | … | … |
).
4. Блок-схема программы
(Блок схема оформляется в MS WORD в виде рисунка или MS VISIO в виде вставленного рисунка. Блок схема строиться для основной программы проекта)
5. Текст программы на языке Ассемблера
(Включается листинг программы выдаваемы компилятором Ассемблера, а не просто распечатка текста программы )
6. Результаты работы программы
(Вставляются результаты работы программы в виде текста или снятых с экрана скриншотов. Можно перекомпилировать программу в MS DOS версии ВС, сменив кодировку, и получить результаты с помощью перенаправления потока в файл “>”)
7. Выводы по ЛР № Х
(Формулируются выводы, которые были сформулированы при выполнении работы.)