
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
Уфимский государственный авиационный технический университет
Кафедра вычислительной математики и кибернетики
ОТЧЕТ
По выполнению лабораторной работы
По дисциплине
«Основы микропрограммирования»
Лабораторная работа №2 «Программирование арифметических операций»
Лабораторная работа №3 «Работа со строками»
Лабораторная работа №4 «Написание собственного обработчика прерывания»
Выполнили:
Студенты группы ПРО-201
Султанов Р. А.
Проверила:
Нургаянова Ольга Сергеева
Уфа – 2012
Лабораторная работа №2
«Программирование арифметических операций»
Цель работы : изучить форматы и правила работы с командами сложения, умножения, вычитания и деления микропроцессоров семейства х86.
Задача: Организовать два массива по 5 элементов каждый. Выполнить поэлементно операции сложения, умножения, вычитания и деления. Каждый раз результат выводить в новый массив.
Реализация:
assume cs:code,ds:data, es:stk
data segment
mas1 dw 5 dup (?)
mas2 dw 5 dup (?)
mas3 dw 5 dup (?)
mes1 db 0ah,0dh,'Massiv(Mul)- ','$'
mes2 db 0ah,0dh,'Massiv(raznost)- ','$'
mes3 db 0ah,0dh,'Massiv(summa)- ','$'
mes4 db 0ah,0dh,'Massiv(delenie)- ','$'
mes5 db 0ah,0dh,'Ishondy massiv 1 - ','$'
mes6 db 0ah,0dh,'Ishondy massiv 2 -','$'
e dw 9h
i dw 1h
tmp db 0
abz dw ' ','$'
data ends
code segment
begin: mov ax,data
mov ds,ax
xor ax,ax
xor bx,bx
MOV CX,5
mov SI,0
go:
mov bx,i
mov mas1[si],bx
mov ax,e
mov mas2[si],ax
inc i
inc e
inc si
inc si
LOOP go
; ВЫВОД ИСХОДНОГО МАССИВА ОДИН
mov ah,09h
lea dx,mes5
int 21h
MOV CX,5
MOV SI,0
ishod1:
mov ax,mas2[si]
mov dl,10
div dl
mov tmp,ah
mov dl,al
add dl,30h
mov ah,02h
int 21h
mov dl,tmp
add dl,30h
mov ah,02h
int 21h
mov ah,09h
lea dx,abz
int 21h
inc si
inc si
loop ishod1
;ВЫВОД ИСХОДНОГО МАССИВА ДВА
mov ah,09h
lea dx,mes5
int 21h
MOV CX,5
MOV SI,0
Ishod2:
mov ax,mas1[si]
mov dl,10
div dl
mov tmp,ah
mov dl,al
add dl,30h
mov ah,02h
int 21h
mov dl,tmp
add dl,30h
mov ah,02h
int 21h
mov ah,09h
lea dx,abz
int 21h
inc si
inc si
loop ishod2
;СЛОЖЕНИЕ
mov SI,0
MOV CX,5
mov ah,09h
lea dx,mes3
int 21h
;САМО СЛОЖЕНИЕ
sum:
mov bx,mas1[si]
mov ax,mas2[si]
add ax,bx
mov mas3[si],ax
inc si
inc si
loop sum
;Вывод сложения
mov si,0
mov cx,5
show_sum:
mov ax,mas3[si]
mov dl,10
div dl
mov tmp,ah
mov dl,al
add dl,30h
mov ah,02h
int 21h
mov dl,tmp
add dl,30h
mov ah,02h
int 21h
inc si
inc si
mov ah,09h
lea dx,abz
int 21h
loop show_sum
;ВЫЧЕТАНИЕ
mov SI,0
mov CX,5
mov ah,09h
lea dx,mes2
int 21h
;НЕПОСРЕДСТВЕННО ВЫЧЕТАНИЕ
subb:
mov bx,mas1[si]
mov ax,mas2[si]
sub ax,bx
mov mas3[si],ax
inc si
inc si
loop subb
;ВЫВОД РАЗНОСТИ
mov si,0
mov cx,5
show_sub:
mov ax,mas3[si]
mov dl,10
div dl
mov tmp,ah
mov dl,al
add dl,30h
mov ah,02h
int 21h
mov dl,tmp
add dl,30h
mov ah,02h
int 21h
inc si
inc si
mov ah,09h
lea dx,abz
int 21h
loop show_sub
;УМНОЖЕНИЕ
mov SI,0
MOV CX,5
mov ah,09h
lea dx,mes1
int 21h
xor dx,dx
mull:
mov bx,mas1[si]
mov ax,mas2[si]
mul bl
mov mas3[si],ax
inc si
inc si
loop mull
;Вывод умножения
mov si,0
mov cx,5
show_mul:
mov ax,mas3[si]
mov dl,10
div dl
mov tmp,ah
mov dl,al
add dl,30h
mov ah,02h
int 21h
mov dl,tmp
add dl,30h
mov ah,02h
int 21h
inc si
inc si
mov ah,09h
lea dx,abz
int 21h
loop show_mul
mov SI,0
MOV CX,5
mov ah,09h
lea dx,mes4
int 21h
xor dx,dx
divv:
mov bx,mas1[si]
mov ax,mas2[si]
div bl
mov dl,al
mov mas3[si],dx
inc si
inc si
loop divv
mov si,0
mov cx,5
show:
mov ax,mas3[si]
mov dl,10
div dl
mov tmp,ah
mov dl,al
add dl,30h
mov ah,02h
int 21h
mov dl,tmp
add dl,30h
mov ah,02h
int 21h
inc si
inc si
mov ah,09h
lea dx,abz
int 21h
loop show
int 21h
mov ax,4c00h
int 21h
code ends
stk segment stack
db 256 dup('*')
stk ends
end begin
Вывод: в данной лабораторной работе, мы научились работать с массивами данных, а так же выполнять простейшие арифметические выражения над ними. При реализации приходилось сталкиваться с многими трудностями, однако данная лабораторная работа в полном объеме позволяет ощутить всю разницу между языками высокого и низкого уровня.