Logo GenDocs.ru

Поиск по сайту:  


Загрузка...

Лабораторная работа по ассемблеру - файл 1.doc


Лабораторная работа по ассемблеру
скачать (428.5 kb.)

Доступные файлы (1):

1.doc429kb.12.12.2011 20:19скачать

содержание
Загрузка...

1.doc

Реклама MarketGid:
Загрузка...
Федеральное агентство по образованию

Государственное образовательное учреждение

высшего профессионального образования

«ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

Кафедра «Информационная безопасность систем и технологий»

ОТЧЁТ

О ВЫПОЛНЕНИИ ЛАБОРАТОРНОЙ РАБОТЫ1
Изучение процесса создания программ на языке Ассемблера”
Программирование операций ввода на языке Ассемблера”

Дисциплина: Методы программирования

Работу выполнил:

Студент группы 08УК1 Синёв А.С.

Работу принял: Колотков А.Ю.


Пенза 2009 г.

^ Часть 1. Изучение процесса создания программ на языке Ассемблера
Цель работы: Изучение процесса создания программ на языке Ассемблера. Получение навыков в работе с компилятором, компоновщиком, отладчиком.
Задание к лабораторной работе:

1. В редакторе набрать текст программы, приведенной в прил. Б. Имя для файла программы выбрать произвольно.

2. Откомпилировать полученный текст программы. При наличии ошибок – внести исправления и откомпилировать вновь.

3. Осуществить компоновку полученного объектного файла.

4. Запустить полученную программу и убедиться в правильности ее работы.

5. Повторить компиляцию и компоновку программы используя опции, необходимые для отладки.

Ход работы:
Программа
^ D_SEG SEGMENT WORD PUBLIC 'DATA'
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
^ S_SEG SEGMENT PARA STACK 'STACK'

db 40h dup (?)

S_SEG ends

end start



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



Рисунок 2 – Листинг программы


Вывод: В результате выполнения лабораторной работы был изучен процесс создания программ на языке Ассемблера, а также получены навыки в работе с компилятором, компоновщиком и отладчиком.

^ Часть 2. Программирование операций ввода на языке Ассемблера
Цель работы: Изучение операций ввода информации с клавиатуры в программах, написанных на языке Ассемблера, посредством функций MS-DOS и BIOS
^ Задание к лабораторной работе:

1. Написать, откомпилировать и отладить программу, использующую функции BIOS для работы с клавиатурой. Программа должна выдавать сообщение: нажата простая клавиша или функциональная. Для простых клавиш необходимо также выводить на экран символ, соответствующий нажатой клавише.

2. Написать, откомпилировать и отладить программу, аналогичную программе п.1, но с использованием функций MS-DOS. Сделать варианты программы для всех функций.

3. Написать, откомпилировать и отладить программу, позволяющую ввести строку с клавиатуры с использованием функции MS-DOS 0Ah и затем вывести ее в обратном порядке.

4. Изменить программу п.1 (или п.2) таким образом, чтобы она автоматически завершалась по истечении заданного преподавателем интервала времени. Отсчте времени работы реализовать на базе функции 0h прерывания 1Ah BIOS.

5. Изменить программу п.1 (или п.2) таким образом, чтобы в период между нажатием клавиш программа выводила на экран “вращающийся индикатор”, получаемый путем последовательного чередования символов ‘/’, ‘|’, ‘\’, ‘-’. Для задания скорости вращения разработать процедуру задержки на базе циклов.

Ход работы:
Программа 1
^ D_SEG SEGMENT WORD PUBLIC 'DATA'
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
^ S_SEG SEGMENT PARA STACK 'STACK'

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
^ 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,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
^ S_SEG SEGMENT PARA STACK 'STACK'

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
^ S_SEG SEGMENT PARA STACK 'STACK'

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
^ C_SEG SEGMENT PARA PUBLIC 'CODE'

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
^ D_SEG SEGMENT WORD PUBLIC 'DATA'

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
^ C_SEG SEGMENT PARA PUBLIC 'CODE'

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.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации
Рейтинг@Mail.ru