Лабораторная работа по ассемблеру
скачать (428.5 kb.)
Доступные файлы (1):
1.doc | 429kb. | 12.12.2011 20:19 | ![]() |
содержание
- Смотрите также:
- Проектирование режущего инструмента [ документ ]
- Лабораторные работы по метрологии, стандартизации сертификации [ документ ]
- №3 [ документ ]
- Лабораторная работа по исследованию аппаратуры [ лабораторная работа ]
- №3 [ документ ]
- №7 [ лабораторная работа ]
- №2 [ лабораторная работа ]
- №6 [ лабораторная работа ]
- Лабораторная работа [ документ ]
- №5 [ лабораторная работа ]
- Исследование корреляционной связи [ лабораторная работа ]
- Герасимов А.И., Регеда В.В., Регеда О.Н. Системное и прикладное программное обеспечение персонального компьютера [ документ ]
1.doc
Федеральное агентство по образованиюГосударственное образовательное учреждение
высшего профессионального образования
«ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Кафедра «Информационная безопасность систем и технологий»
ОТЧЁТ
О ВЫПОЛНЕНИИ ЛАБОРАТОРНОЙ РАБОТЫ №1
“Изучение процесса создания программ на языке Ассемблера”
“Программирование операций ввода на языке Ассемблера”
Дисциплина: Методы программирования
Работу выполнил:
Студент группы 08УК1 Синёв А.С.
Работу принял: Колотков А.Ю.
Пенза 2009 г.
^
Цель работы: Изучение процесса создания программ на языке Ассемблера. Получение навыков в работе с компилятором, компоновщиком, отладчиком.
Задание к лабораторной работе:
1. В редакторе набрать текст программы, приведенной в прил. Б. Имя для файла программы выбрать произвольно.
2. Откомпилировать полученный текст программы. При наличии ошибок – внести исправления и откомпилировать вновь.
3. Осуществить компоновку полученного объектного файла.
4. Запустить полученную программу и убедиться в правильности ее работы.
5. Повторить компиляцию и компоновку программы используя опции, необходимые для отладки.
Ход работы:
Программа
^
Hello db 0Ah,07h
Text db 'Hello, World!'
db 0Ah,0Dh
db '$'
D_SEG ends
C_SEG SEGMENT PARA PUBLIC 'CODE'
assume cs:c_seg,ds:d_seg,ss:s_seg
main proc far
start:
mov ax,SEG D_SEG
mov ds,ax
mov dx,offset Hello
mov ah,09h
int 21h
mov ax,4C00h
int 21h
main endp
C_SEG ends
^
db 40h dup (?)
S_SEG ends
end start

Рисунок 1 – Результат выполнения программы

Рисунок 2 – Листинг программы
Вывод: В результате выполнения лабораторной работы был изучен процесс создания программ на языке Ассемблера, а также получены навыки в работе с компилятором, компоновщиком и отладчиком.
^
Цель работы: Изучение операций ввода информации с клавиатуры в программах, написанных на языке Ассемблера, посредством функций MS-DOS и BIOS
^
1. Написать, откомпилировать и отладить программу, использующую функции BIOS для работы с клавиатурой. Программа должна выдавать сообщение: нажата простая клавиша или функциональная. Для простых клавиш необходимо также выводить на экран символ, соответствующий нажатой клавише.
2. Написать, откомпилировать и отладить программу, аналогичную программе п.1, но с использованием функций MS-DOS. Сделать варианты программы для всех функций.
3. Написать, откомпилировать и отладить программу, позволяющую ввести строку с клавиатуры с использованием функции MS-DOS 0Ah и затем вывести ее в обратном порядке.
4. Изменить программу п.1 (или п.2) таким образом, чтобы она автоматически завершалась по истечении заданного преподавателем интервала времени. Отсчте времени работы реализовать на базе функции 0h прерывания 1Ah BIOS.
5. Изменить программу п.1 (или п.2) таким образом, чтобы в период между нажатием клавиш программа выводила на экран “вращающийся индикатор”, получаемый путем последовательного чередования символов ‘/’, ‘|’, ‘\’, ‘-’. Для задания скорости вращения разработать процедуру задержки на базе циклов.
Ход работы:
Программа 1
^
Funkc db 'Funkc klavisha', '$'
Prost db 'Prost klavisha - ', '$'
D_SEG ends
C_SEG SEGMENT PARA PUBLIC 'CODE'
assume cs:c_seg,ds:d_seg,ss:s_seg
main proc far
start:
mov ax,SEG D_SEG
mov ds,ax
mov ah,0h
int 16h
cmp al,0h
je mf
mov ah,09h
lea dx,Prost
mov byte ptr Prost+17,al
int 21h
jmp mend
mf:
mov ah,09h
lea dx,Funkc
int 21h
mend:
mov ax,4C00h
int 21h
main endp
C_SEG ends
^
db 40h dup (?)
S_SEG ends
end start
Программа 2
D_SEG SEGMENT WORD PUBLIC 'DATA'
Funkc db 'Funkc klavisha', '$'
Prost db 'Prost klavisha - ', '$'
hi db ?
lou db ?
D_SEG ends
^
assume cs:c_seg,ds:d_seg,ss:s_seg
main proc far
start:
mov ax,SEG D_SEG
mov ds,ax
mov ah,07h
int 21h
cmp al,0h
je mf
mov ah,09h
lea dx,Prost
mov byte ptr Prost+17,al
int 21h
jmp mend
mf:
mov ah,07h
int 21h
mov ah,09h
lea dx,Funkc
int 21h
mend:
mov ax,4C00h
int 21h
main endp
C_SEG ends
^
db 40h dup (?)
S_SEG ends
end start
Программа 3
D_SEG SEGMENT WORD PUBLIC 'DATA'
InpBuf db 20,?,20 dup (?)
D_SEG ends
C_SEG SEGMENT PARA PUBLIC 'CODE'
assume cs:c_seg,ds:d_seg,ss:s_seg
main proc far
start:
mov dx,offset InpBuf
mov si,dx
mov ah,0Ah
int 21h
xor bh,bh
mov bl,[si+1]
mov byte ptr [si+1],0Ah
mov byte ptr [bx+si+2],'$'
mov cx,bx
m1:
mov ah,02h
mov dl,[bx+si+1]
int 21h
dec bx
loop m1
mov ax,4C00h
int 21h
main endp
C_SEG ends
^
db 40h dup (?)
S_SEG ends
end start
Программа 4
D_SEG SEGMENT WORD PUBLIC 'DATA'
Funkc db 'Funkc klavisha', '$'
Prost db 'Prost klavisha - ', '$'
hi dw ?
lou dw ?
D_SEG ends
^
assume cs:c_seg, ds:d_seg, ss:s_seg
start:
mov ax,SEG D_SEG
mov ds,ax
mov ah,0h
int 1Ah
add dx,90
adc cx,0
mov Lou,dx
mov Hi,cx
once_more:
mov ah,0
int 1Ah
cmp Lou,dx
jne once_more
cmp HI,cx
jne once_more
mov ah,01h
int 16h
je mend
mov ah,0h
int 16h
cmp al,0h
je mf
mov ah,09h
lea dx,Prost
mov byte ptr Prost+17,al
int 21h
jmp mend
mf:
mov ah,09h
lea dx,Funkc
int 21h
mend:
mov ax,4C00h
int 21h
C_SEG ends
s_seg segment para stack 'STACK'
db 40h dup (?)
s_seg ends
end start
Программа 5
^
Funkc db 'Funkc klavisha', '$'
Prost db 'Prost klavisha - ', '$'
hi dw ?
lou dw ?
a1 db '/',0Dh,'$'
a2 db '|',0Dh,'$'
a3 db '\',0Dh,'$'
a4 db '-',0Dh,'$'
a0 db 5
D_SEG ends
^
assume cs:c_seg, ds:d_seg, ss:s_seg
delay proc
mov cx,25000
m10:
push cx
mov cx,10000
m20:
aad
loop m20
pop cx
loop m10
ret
endp delay
start:
mov ax,SEG D_SEG
mov ds,ax
m1:
mov ah,09h
lea dx,a1
int 21h
call delay
mov ah,09h
lea dx,a2
int 21h
call delay
mov ah,09h
lea dx,a3
int 21h
call delay
mov ah,09h
lea dx,a4
int 21h
call delay
mov ah,01h
int 16h
jne m2 ;при ZF=0
jmp m1
m2:
mov ah,0h
int 16h
cmp al,0h
je mf
mov ah,09h
mov byte ptr Prost+17,al
lea dx,Prost
int 21h
jmp mend
mf:
mov ah,09h
lea dx,Funkc
int 21h
mend:
mov ax,4C00h
int 21h
C_SEG ends
s_seg segment para stack 'STACK'
db 40h dup (?)
s_seg ends
end start
Вывод: В результате выполнения лабораторной работы были изучены операции ввода информации с клавиатуры в программах, написанных на языке Ассемблера, посредством функций MS-DOS и BIOS
Скачать файл (428.5 kb.)