Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodicheskie_ukazania.doc
Скачиваний:
13
Добавлен:
03.03.2016
Размер:
6.75 Mб
Скачать

Пример отчета по лабораторной работе №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 ' ','$'

const10dw10,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] :

leadx,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

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

pushbx

pushdx

pushsi

push di

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

leadx,blockinput;

int21h

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:incsi

inc si

loop m1

ret

work endp

codeends

endstart

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

4. Выводы

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

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]