Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2014, 22:07   #1
zlobrik
Пользователь
 
Регистрация: 28.12.2013
Сообщений: 24
Сообщение Матрица Assembler

Такое задание.
Нужно ввести элементы матрицы 3х4 (слова, элементы положительны и не превосходят 65). Вывести на экран исходную матрицу. Вычислить сумму элементов матрицы с нечетными значениями. Заменить найденные элементы величинами их квадратов. Если элементы с указанными свойствами отсутствуют, очистить экран. использовать возможности прерывания INT 21h и вывести об этом сообщение.
Помогите реализовать, пожалуйста.
Так как я в этом полный нуб, почитал Юрова. Вот что получилось.

Код:
.386
.stack 256
 
.data
matrix dw 16 DUP (?)
message1 db 10,13,"Please input your matrix: $"
message2 db 10,13,"Your matrix: $"
message3 db 10,13,"New matrix: $"
message4 db 10,13,"Your screen has been cleaned... $"
message5 db 10,13,"Sum of unpare elements: $"
kv_amount db 0
summa dw 0
 
.code
assume ds:@data, es:@data
start:
    mov ax,@data
    mov ds,ax
    mov es,ax
    
    lea dx,message1
    mov ah,09h
    int 21h
    
    ; Ввод матрицы 4х4 с клавиатуры 
    mov cx,12 ;                      количество элементов в матрице
    mov si,0  ;                      обнулили индексный регистр для того чтобы начать с первого элемента
    
    mov bh,0
    mov dh,3
    mov dl,7
    mov di,3
    
    input_matrix:
    mov ah,02h
    int 10h
    
    mov ah,01h ;                     функция ввода символа
    int 21h ;                        вызов ДОС
    mov byte ptr [matrix+si],al
    inc si ;                         ...и передвигаемся ко следующему элементу матрицы
    inc dl
    dec di
    jnz next1
    inc dh
    mov di,3
    mov dl,7
next1:    
    loop input_matrix  ;            повторяем цикл до последнего элемента
; Закончили ввод с клавиатуры 
    
 
; Выводим на экран то что получилось
    lea dx,message2  ;                   вывод сообщения
    mov ah,09h
    int 21h 
    
    mov cx,12    ;  цикл по всем 16-ти элементам
    xor si,si     ;  обнулили индексный регистр чтобы начать с первого элемента
    mov bh,00
    mov dh,12
    mov bl,7
    mov di,3
output_matrix:
    mov ah,02h
    mov dl,bl
    int 10h
    
    mov ah,02h  ;                    функция вывода символа на экран
    mov dl,byte ptr [matrix+si];            используя реальный адрес
    int 21h
    inc bl
    inc si
    dec di
    jnz next
    inc dh
    mov di,3
    mov bl,7
next:    
    loop output_matrix
    ; Ввели матрицу, вывели ее на экран.
    
    ; Сумма элементов матрицы с нечетными значениями
    ; Проверка на нечетность
    mov cx,12
    mov si,0
    mov ax,[matrix+si]
unparity:
    test ax,ax
    inc si
    jnp kvadrat
    jp par
kvadrat:
    dec si
    mov ax,[matrix+si]
    add summa,ax
    mov bx,[matrix+si]
    mul bx
    mov [matrix+si],ax
    inc kv_amount ;счетчик нечетных чисел
par:
    loop unparity  
    
    
    
    mov ah,09h
    lea dx,message5
    int 21h
    lea dx,summa
    int 21h
    
    cmp kv_amount,0  ;проверяем если счетчик нечетных чисел равен нулю
    je clrscr ;то прыгаем к очистке экрана
    jg output ;а если нет то продолжаем
    
clrscr:
    mov ax,0600h
    mov bh,07
    mov cx,0000
    mov dx,184fh
    int 10h
    
    mov ah,09h
    lea dx,message4
    int 21h
    
output:
    ; Выводим на экран то что получилось
    lea dx,message3  ;                   вывод сообщения
    mov ah,09h
    int 21h 
    
    mov cx,12    ;  цикл по всем 16-ти элементам
    xor si,si     ;  обнулили индексный регистр чтобы начать с первого элемента
    mov bh,00
    mov dh,24
    mov bl,7
    mov di,3
output_matrix2:
    mov ah,02h
    mov dl,bl
    int 10h
    
    mov ah,02h  ;                    функция вывода символа на экран
    mov dl,byte ptr [matrix+si];            используя реальный адрес
    int 21h
    inc bl
    inc si
    dec di
    jnz next2
    inc dh
    mov di,3
    mov bl,7
next2:    
    loop output_matrix2    
    
exit:
    mov ax,4c00h
    int 21h
    
end start
zlobrik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Матрица NxN -> текстовый файл -> Матрица NxN - найти max по диагоналям -> типизированный файл Лунатик13 Помощь студентам 1 20.02.2012 15:54
Assembler, матрица Sempe4 Помощь студентам 0 16.11.2010 21:53
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11
Задача Assembler (матрица) LeFF Помощь студентам 2 22.06.2008 13:38