Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Пример отчета по лабораторной работе №4 к лаб. раб. №4



Министерство образования и науки

Донецкий национальный технический университет

Кафедра Компьютерной инженерии

Отчет

по лабораторной работе №4

на тему: Обработка двумерных массивов и организация ввода с клавиатуры

Выполнил:

Проверил:

Донецк 2013

1. Задание

В целочисленной матрице найти столбец с наибольшим количеством нулевых элементов.

2. Блок-схема

Процедура work:

3. Листинг программы

;Условие.

;В целочисленной матрице найти столбец с наибольшим

; количеством нулевых элементов

sseg segment stack 'stack'

db 64 dup (?)

sseg ends

;

data segment

blockinput label byte

maxlen db 7

actlen db?

string db 7 dup (?)

x dw 30 dup (?)

n dw?

m dw?

s db ' ','$'

const10 dw 10,100,1000,10000

msg1 db ' Неправильный формат числа!!! Повторите ввод. ',13,10,'$'

msg2 db 'Введите количество строк [2..5]:','$'

msg3 db 'Введите количество столбцов [2..6]:','$'

msg4 db 'Вводите элементы ',13,10,'$'

msg5 db 'Исходная матрица:',13,10,'$'

msg6 db 13,10,'$'

msg7 db 13,10,'наибольшее количество нулей() содержит столбец $'

msg8 db ' ','$'

max dw 0

imax dw?

data ends

;

code segment

start proc far

assume ss:sseg,ds:data,cs:code

push ds

xor ax,ax

push ax

mov ax,data

mov ds,ax

povtor: lea dx,msg6

call writestring;13,10,'$'

;Введите количество строк [2..5]:

lea dx,msg2;

call writestring

call inputnumber;ввод числа элементов

cmp ax,2

jl povt1;Количество элементов меньше двух

cmp ax,5

jle povt2;Количество элементов больше 5

povt1: lea dx,msg1;Неправильный формат числа!!!

call writestring

jmp povtor;Повторить ввод

povt2: mov n,ax

povt3: lea dx, msg3

call writestring

call inputnumber

cmp ax, 2

jl povt3

cmp ax,6

jg povt3

mov m,ax

lea dx,msg6

call writestring

lea dx,msg4

call writestring;Вводите элементы

;-----Подготовка и цикл ввода элементов

;-----массива.

mov ax,n

mul m

mov cx,ax

mov si,0

vvod: call inputnumber

mov x[si],ax

inc si

inc si

loop vvod

; Вывод исходного массива

lea dx,msg5;Исходный массив

call writestring

mov cx,n

mov si,0

vyvod1: push cx

mov cx,m

mov bx,0

vyvod: mov ax,x[si+bx]

call printnumber;Вывод элемента массива

inc si

inc si

lea dx,msg8;Вывод пробелов между

call writestring;элементами

loop vyvod

pop cx

add bx,m

add bx,m

lea dx, msg6

call writestring

loop vyvod1

; Обработка массива

call work

; Вывод результатов

mov ax,max

add ax,30h

mov msg7[30],al

lea dx,msg7

call writestring

mov ax,imax

shr ax,1

inc ax

call printnumber

ret

start endp

;Процедура вводит число с клавиатуры и

;возвращает его в регистре AX

inputnumber proc near

;Сохранение используемых регистров

push bx

push dx

push si

push di

m_beg: mov ah,0ah;Ввод стоки, содержащей число

lea dx,blockinput;

int 21h

cmp actlen,0; Если длина введенной строки равна 0,

je m_beg; то повторить ввод

mov al,actlen; Вычисляем смещение

mov ah,0; последнего символа

mov si,ax; в

dec si; строке.

mov di,0;В DI смещение поля const10

mov bx,0; В ВХ формируется введенное число

mov al,string[si];В АL последний символ,

cmp al,'0'; он должен быть

jb m_err; цифрой.

cmp al,'9'; Иначе пеерход на

ja m_err; обработку ошибки ввода.

sub al,30h;От кода символа вычитаем 30h и получаем

cbw; в АХ младшую цифру.

add bx,ax

dec si; Переход к предпоследнему символу строки

cp: cmp si,0; Если SI<0, то просмотр строки

jl m_end; завершен.

mov al,string[si]; Является ли следующий

cmp al,'0'; символ

jb m_test_sign; цифрой?

cmp al,'9';

ja m_err

sub al,30h;От кода символа вычитаем 30h и получаем

cbw; в АХ младшую цифру.

imul const10[di]

jo m_err; При переполнении переходим

add bx,ax; к обработке ошибки.

jo m_err; Это означает, что введено число,

dec si; которое не помещается в поле слова.

inc di;Переход к следующей константе 100,1000,10000.

inc di

jmp cp

m_test_sign:; Проверка знака.

cmp al,'-'; Перед первой цифрой

jne m_t1; допускаются символы

neg bx; '+','-'или пробел.

jmp m_end; Иначе число введено

m_t1: cmp al,'+'; не верно.

je m_end;

cmp al,' ';

je m_end;

m_err: lea dx,msg1; Сообщение об ошибке

call writestring; и переход на

jmp m_beg; повторный ввод.

m_end: mov ax,bx

lea dx,msg6

call writestring

pop di

pop si

pop dx

pop bx

ret

inputnumber endp

;

printnumber proc near

push ax

push bx

push cx

push dx

push si

;Обнуление строки S для вывода числа

mov cx,7

mov si,0

met: mov s[si],' '

inc si

loop met

mov si,6;Смещение позиции 7-го символа

mov bx,10; Основание десятичной сист. счисл.

;Определяем знак числа

mov cl,' ';Используем пробел в качестве знака '+'

cmp ax,0

jge met1

mov cl,'-'

neg ax

met1: cwd

idiv bx

add dl,30h;К остатку в DL прибавим 30h и получим

;символ цифры

mov s[si],dl

dec si

cmp ax,0; В АХ частное. Когда АХ=0, то завершаем перевод

jne met1

mov s[si],cl;Заносим знак в строку и

mov ah,09h; выводим ее на экран.

lea dx,s

int 21h

pop si

pop dx

pop cx

pop bx

pop ax

ret

printnumber endp

;Процедура печати строки на экране.

;адрес строки передается в рег. DX

writestring proc near

push ax

mov ah,9h

int 21h

pop ax

ret

writestring endp

;основная процедура

work proc

mov si,0

mov cx,m;

m1: push cx

mov cx,n

mov bx,0

mov dx,0

m2: cmp word ptr x[si+bx],0;

jne m3

inc dx

m3: add bx,m;

add bx,m;

loop m2

pop cx

cmp dx, max

jle m4

mov max,dx;

mov imax, si

; Определение максимума

m4: inc si

inc si

loop m1

ret

work endp

code ends

end start

3. Результаты работы программы

4. Выводы

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


Учебное издание

Методические указания и задания по вычислительной практике для студентов направления подготовки «Компьютерная инженерия»

Составители: Теплинский Сергей Васильевич

Чередникова Ольга Юрьевна





Дата публикования: 2015-04-10; Прочитано: 232 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.016 с)...