- •Содержание
- •Введение
- •Варианты заданий:
- •Лабораторная работа №2 Вариантыпример отчетак содержанию
- •Варианты заданий:
- •Лабораторная работа №3 Вариантыпример отчетак содержанию
- •Варианты заданий к лабораторной работе №3
- •Лабораторная работа №4 Вариантыпример отчетак содержанию
- •Варианты заданий лабораторной работы №4
- •41. В прямоугольной матрице обменять первый столбец с последним.
- •Оценка результатов практикик содержанию
- •Рекомендованная литература
- •Отладка программы в среде отладчикаTd к содержанию
- •Разбор внутреннего представления командк содержанию
- •Примеры разбора команд
- •1. Команды с регистровой адресацией
- •2.Команды с прямой адресацией
- •3. Арифметические команды с непосредственной адресацией
- •4. Команда mov с непосредственной адресацией
- •5. Команды с использованием аккумулятора
- •6. Команды условного перехода (с относительной адресацией)
- •7. Команды безусловного перехода (с относительной адресацией)
- •8. Команда вызова подпрограммы (с относительной адресацией)
- •9. Команда завершения цикла (с относительной адресацией)
- •10. Команды с косвенной адресацией
- •Міністерство освіти і науки
- •Пример отчета по лабораторной работе №1к лаб. Раб.№1
- •Пример отчета по лабораторной работе №2к лаб. Раб.№2
- •Пример отчета по лабораторной работе №3к лаб. Раб.№3
- •Пример отчета по лабораторной работе №4к лаб. Раб. №4
Пример отчета по лабораторной работе №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. Выводы
В процессе выполнения лабораторной работы были усвоены принципы обращения и обработки двумерных массивов, а также способы ввода информации с клавиатуры. Результаты работы программы показывают правильность работы алгоритма.
Учебное издание
Методические указания и задания по вычислительной практике для студентов направления подготовки «Компьютерная инженерия»
Составители: Теплинский Сергей Васильевич
Чередникова Ольга Юрьевна