Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
31
Добавлен:
02.05.2014
Размер:
81.92 Кб
Скачать

Министерство Образования Российской Федерации

Уфимский Государственный Авиационный Технический Университет

Кафедра ТК

Отчет по лабораторным работам

по предмету «Организация ЭВМ»

На тему «Программирование операций ввода-вывода»

Выполнила: студент

Проверил: Даринцев О.В.

Уфа, 2005

Лабораторная работа №4

Программирование операций ввода-вывода

а) Найти первый (последний) максимальный (минимальный) элемент вектора и указать его местоположение. Элементы вектора однобайтовые;

.486

dseg segment para public 'data'

source db 8h,3h,48h,12h,5h,6h,10h,56h,7h,3h,'$'

len db 0h

index dw 0

hexdigits db '0123456789ABCDEF'

MinMessage db 'Min is ','$'

MaxMessage db 'Max is ','$'

IndexMessage db ' index is ','$'

Ent db 13,10,'$'

temp_min db 0

temp_max db 0

temp_all db 0

min_index dw 0

max_index dw 0

dseg ends

stack segment para stack 'stack'

dw 10 dup (0FFFFh)

stack ends

cseg segment use16

assume cs:cseg,ds:dseg,ss:stack

main proc

jmp begin

OutputByte proc;Выводит на экран байтовую беззнаковую величину.

;Вход - В ds:dx адрес числовой переменной

push ax

push bx

push cx

push dx

push si

push di

pushf

mov di,dx

mov ax,[di]

mov ah,0

mov dl,10h

div dl ;al - частное ah - остаток

push ax

mov ah,0

mov si,ax

mov dl,byte ptr hexdigits[si]

mov ah,2h

int 21h

pop ax

xchg ah,al

mov ah,0

mov si,ax

mov dl,byte ptr hexdigits[si]

mov ah,2h

int 21h

popf

pop di

pop si

pop dx

pop cx

pop bx

pop ax

ret

endp OutputByte

OutputWord proc;Выводит на экран беззнаковое слово.

;Вход - В ds:dx адрес слова

push dx

add dx,1

call OutputByte

sub dx,1

call OutputByte

pop dx

ret

endp OutputWord

begin:

mov ax,dseg

mov ds,ax

mov di,0

LenCalculation:

mov dh,source[di]

cmp dh,'$'

mov ax,0

setnz ah

pushf

add len,ah

;Заодно и массив распечатаем

lea dx,source[di]

call OutputByte

mov dl,104

mov ah,2h

int 21h

mov dl,20h

mov ah,2h

int 21h

add di,1

popf

jnz LenCalculation

xor ax,ax

mov al,source

mov temp_max,al

mov temp_min,al

mov temp_all,al

mov di,1

mov ch,0

mov cl,len

MainTask:

;максимум

jmp MaxSetVarsEnd

MaxSetVars:

mov max_index, di

mov al, source[di]

mov temp_max, al

jmp MaxSetVarsRet

MaxSetVarsEnd:

mov al,source[di]

cmp al,temp_max

jnbe MaxSetVars

MaxSetVarsRet:

;минимум

jmp MinSetVarsEnd

MinSetVars:

mov min_index, di

mov al, source[di]

mov temp_min, al

jmp MinSetVarsRet

MinSetVarsEnd:

mov al,source[di]

cmp al,temp_min

jb MinSetVars

MinSetVarsRet:

add di,1

loop MainTask

;Вывод

lea dx,ent

mov ah,9h

int 21h

lea dx,ent

mov ah,9h

int 21h

lea dx,MinMessage

mov ah,9h

int 21h

lea dx,temp_min

call OutputByte

mov dl,104

mov ah,2h

int 21h

lea dx,IndexMessage

mov ah,9h

int 21h

lea dx,min_index

call OutputWord

mov dl,104

mov ah,2h

int 21h

lea dx,ent

mov ah,9h

int 21h

lea dx,MaxMessage

mov ah,9h

int 21h

lea dx,temp_max

call OutputByte

mov dl,104

mov ah,2h

int 21h

lea dx,IndexMessage

mov ah,9h

int 21h

lea dx,max_index

call OutputWord

mov dl,104

mov ah,2h

int 21h

mov ah,4ch

int 21h

main endp

cseg ends

end main

б) Найти первый (последний) максимальный (минимальный) элемент вектора и указать его местоположение. Элементы вектора двубайтные

.486

dseg segment para public 'data'

source dw 8h,3h,48h,12h,5h,6h,10h,56h,7h,3h,'$'

len db 0h

index dw 0

hexdigits db '0123456789ABCDEF'

MinMessage db 'Min is ','$'

MaxMessage db 'Max is ','$'

IndexMessage db ' index is ','$'

Ent db 13,10,'$'

temp_min dw 0

temp_max dw 0

temp_all dw 0

min_index dw 0

max_index dw 0

dseg ends

stack segment para stack 'stack'

dw 10 dup (0FFFFh)

stack ends

cseg segment use16

assume cs:cseg,ds:dseg,ss:stack

main proc

jmp begin

OutputByte proc;Выводит на экран байтовую беззнаковую величину.

;Вход - В ds:dx адрес числовой переменной

push ax

push bx

push cx

push dx

push si

push di

pushf

mov di,dx

mov ax,[di]

mov ah,0

mov dl,10h

div dl ;al - частное ah - остаток

push ax

mov ah,0

mov si,ax

mov dl,byte ptr hexdigits[si]

mov ah,2h

int 21h

pop ax

xchg ah,al

mov ah,0

mov si,ax

mov dl,byte ptr hexdigits[si]

mov ah,2h

int 21h

popf

pop di

pop si

pop dx

pop cx

pop bx

pop ax

ret

endp OutputByte

OutputWord proc;Выводит на экран беззнаковое слово.

;Вход - В ds:dx адрес слова

push dx

add dx,1

call OutputByte

sub dx,1

call OutputByte

pop dx

ret

endp OutputWord

begin:

mov ax,dseg

mov ds,ax

mov di,0

LenCalculation:

mov dx,source[di]

cmp dx,'$'

mov ax,0

setnz ah

pushf

add len,ah

;Заодно и массив распечатаем

lea dx,source[di]

call OutputWord

mov dl,104

mov ah,2h

int 21h

mov dl,20h

mov ah,2h

int 21h

add di,2

popf

jnz LenCalculation

xor ax,ax

mov ax,source

mov temp_max,ax

mov temp_min,ax

mov temp_all,ax

mov di,0

mov ch,0

mov cl,len

MainTask:

;максимум

jmp MaxSetVarsEnd

MaxSetVars:

mov max_index, di

mov ax, source[di]

mov temp_max, ax

jmp MaxSetVarsRet

MaxSetVarsEnd:

mov ax,source[di]

cmp ax,temp_max

jnbe MaxSetVars

MaxSetVarsRet:

;минимум

jmp MinSetVarsEnd

MinSetVars:

mov min_index, di

mov ax, source[di]

mov temp_min, ax

jmp MinSetVarsRet

MinSetVarsEnd:

mov ax,source[di]

cmp ax,temp_min

jb MinSetVars

MinSetVarsRet:

add di,2

loop MainTask

mov ax,min_index

mov dx,2h

div dl

mov ah,0

mov min_index,ax

mov ax,max_index

div dl

mov ah,0

mov max_index,ax

;Вывод

lea dx,ent

mov ah,9h

int 21h

lea dx,ent

mov ah,9h

int 21h

lea dx,MinMessage

mov ah,9h

int 21h

lea dx,temp_min

call OutputWord

mov dl,104

mov ah,2h

int 21h

lea dx,IndexMessage

mov ah,9h

int 21h

lea dx,min_index

call OutputWord

mov dl,104

mov ah,2h

int 21h

lea dx,ent

mov ah,9h

int 21h

lea dx,MaxMessage

mov ah,9h

int 21h

lea dx,temp_max

call OutputWord

mov dl,104

mov ah,2h

int 21h

lea dx,IndexMessage

mov ah,9h

int 21h

lea dx,max_index

call OutputWord

mov dl,104

mov ah,2h

int 21h

mov ah,4ch

int 21h

main endp

cseg ends

end main

7

Соседние файлы в папке Лабораторные работы №1-4