МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра АПУ
отчет
по практической работе №1
по дисциплине «Системное программирование»
Тема: Структура EXE- и COM- программы. Вывод на экран. Циклы.
Ввод с клавиатуры.
Студент гр. 8391 |
|
Гоглев А.А. |
Студент гр. 8391 |
|
Шушков Д.А. |
Студент гр. 8391 |
|
Маликов А.А. |
Преподаватель |
|
Кораблев Ю.А. |
Санкт-Петербург
2021
Цель работы.
• Изучение структуры EXE- и COM-программы. Получение навыков вывода данных на экран монитора.
• Получение навыков организации циклических структур в ассемблерных программах. Ввод символов с клавиатуры.
Задание.
1. Разработать EXE-программу вывода символа на экран, и COM- программу вывода на экран строки.
2. Разработать программу ввода строковых данных с клавиатуры. В веденной строке удалить пробелы, все строчные символы «а» заменить на прописные «А» и вывести результирующую строку на экран.
Выполнение работы.
Разработаем EXE-программу вывода символа на экран:
STAK SEGMENT STACK
DB 256 DUP (?)
STAK ENDS
DATA SEGMENT
SYMB DB '$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAK
START:
XOR AX, AX
MOV AX, DATA
MOV DS, BX
MOV AH, 02H
MOV DL, SYMB
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
В C:\DOS\ воспользуемся редактором «edit.com» для написания ассемблерного кода:
Рис. 1. Код программы program.asm.
Теперь получим EXE-файл нашей программы.
Для этого воспользуемся программой «masm.exe», находящимся в корне диска C. Данная программа преобразовывает ассемблерный код в объектный файл с расширением «.obj». В командной строке пишем:
C:\>masm program.asm
Далее нам потребуется сборщик (линковщик). Для этого воспользуемся программой «link.exe», которая также находится в корне диска C. Эта программа преобразовывает объектный файл в исполняемый с расширением «.exe». В командной строке пишем:
C:\>link program.obj
Рис. 2. Использование команд «masm» и «link».
Теперь содержимое диска C выглядит так:
Рис. 3. Содержимое диска C.
Заметим, что на диске С появились новые файлы «program.obj» и «program.exe». Запустим наш новый исполняемый файл:
Рис. 4. Работа программы «program.exe».
Программа успешно выполнила свою задачу – вывод символа «$» на экран.
Разработаем COM- программу вывода на экран строки.
CODE SEGMENT
ASSUME CS:CODE, DS:CODE, SS:CODE
ORG 100H
START:
XOR AX, AX
MOV AH, 09H
MOV DX, OFFSET STR
INT 21H
MOV AH,4CH
INT 21H
STR DB “HELLO, WORLD$”
CODE ENDS
END START
Напишем код в «edit.com»:
Рис. 5. Код программы program2.asm.
Получим EXE-файл тем же способом, что и program.exe:
C:\>masm program2.asm
C:\>link program2.obj
Рис. 6. Использование команд «masm» и «link».
В этот раз мы должны получить COM-файл. Программа masm не позволяет получить данный тип файла напрямую: при создании EXE-файла мы получаем ошибку «no stack segment». Выходом в нашем случае послужит утилита «exetobin.exe», которая конвертирует выполняемый файл .EXE в выполняемый файл .COM. Для этого пишем в командной строке:
C:\>exetobin program2.exe program2.com
Рис. 7. Использование команды «exetobin».
Теперь содержимое диска C выглядит так:
Рис. 8. Содержимое диска C.
Запустим «program2.com»:
Рис. 9. Работа программы «program2.com».
Программа успешно выполнила свою задачу – вывод строки «HELLO WORLD$» на экран.
Разработаем программу, ввода строковых данных с клавиатуры. В веденной строке удалим пробелы, а все строчные символы «а» заменим на прописные «А» и выведем результирующую строку на экран.
CODE SEGMENT
ASSUME CS:CODE, DS:CODE, SS:CODE
ORG 100H
START:
XOR AX, AX
MOV AH, 0AH
LEA DX, BUFFER
INT 21H
MOV AL, [BUFFER+1]
TEST AL, AL
JZ EXIT
XOR CX, CX
MOV CL, AL
LEA SI, BUFFER+2 ; индекс символа введенной строки
MOV DI, SI ; индекс символа преобразованной строки
LEA BX, [BUFFER+1]
MOV [BX], BYTE PTR 0
CYCLE: ; функция проверки символа
MOV AL, [SI]
CMP AL, ‘ ‘
JE PASS
CMP AL, ‘a’
JNE PUT
ADD AL, ‘A’-‘a’
PUT: ; функция вставки символа в новую строку
MOV [DI], AL
INC DI
ADD [BX], BYTE PTR 1
PASS: ; функция пропуска пробела
INC SI
LOOP CYCLE
MOV [DI], BYTE PTR ‘$’ ; признак окончания строки
MOV AH, 09H
LEA DX, NL
INT 21H
MOV AH, 09H
LEA DX, BUFFER+2
INT 21H
EXIT:
MOV AH, 4CH
INT 21H
BUFFER DB 128, 128 DUP(‘$’)
NL DB 0AH, 0AH, 0DH, ‘$’
CODE ENDS
END START
Напишем код в «edit.com»:
Рис. 10. Код программы program3.asm.
Рис. 11. Продолжение кода программы program3.asm.
Рис. 12. Продолжение кода программы program3.asm.
Получим COM-файл тем же способом, что и program2.com:
C:\>masm program3.asm
C:\>link program3.obj
C:\>exetobin program3.exe program3.com
Рис. 13. Использование команд «masm», «link» и «exetobin».
Теперь содержимое диска C выглядит так:
Рис. 14. Содержимое диска C.
Запустим «program3.com»:
Рис. 15. Работа программы «program2.com».
Получившаяся программа успешно выполнила свою задачу – считала строку, удалила все пробелы, а также заменила все строчные символы «а» на прописные «А».
Вывод.
В данной практической работе мы изучили виды структур написания программ на ассемблере EXE и COM. Ознакомились с программами «masm.exe», «link.exe» и «exetobin.exe», которые позволяют получить исполнительные файлы; узнали как осуществляется ввод/вывод со стандартных портов.