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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2010, 16:13   #1
GM402
 
Регистрация: 27.11.2010
Сообщений: 5
Сообщение Работа с матрицей

Помогите решить задачку. Сам пробовал запутался в метках переметках.
Работаем на Тасме.
Ввести элементы (слова отличные от нуля) матрицы 4х3.
Вывести её на экран. (с помощью модуля Пильщикова)
Создать одномерный массив mas1 следующим образом: первый элемент - это минимальный элемент из строки номер 0 матрицы, второй - максимальный из строки номер 1, третий - минимал из строки 2 и четвёртый - максимал из строки 3. Если в массиве mas1 отрицательные и положительные эл. чередуются (+,-,+,- или -,+,-,+), вывести mas1 на экран иначе очистить экран с помощью 21h и вывести соотв сообщение.
Примечание: произведение равнознаковых чисел всегда отрицательно.
Помогите пожалуйста
GM402 вне форума Ответить с цитированием
Старый 29.11.2010, 04:43   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Цитата:
Сообщение от GM402
Сам пробовал запутался в метках переметках.
Привел бы текст своей программы -- тогда бы и помогли, подсказали, где ошибки или как можно сделать по-другому. А в данном случае заказ на выполнение программы, да еще с каким-то неведомым модулем Пильщикова (Это наверное В. Н. Пильщиков --автор учебника "Программирование на языке ассемблера IBM PC") Тогда тебе в раздел фриланс -- там пишут программы за деньги
Mikl___ вне форума Ответить с цитированием
Старый 29.11.2010, 08:35   #3
GM402
 
Регистрация: 27.11.2010
Сообщений: 5
По умолчанию

model tiny
.386
include io.asm
.stack 100h

.data
Pr1 db 10, 13, 'Vvedite elementi matrici (slova krome 0)'
db 10, 10, 13, 'razmer kotoroi = 4x3', '$'
mes1 db 10,13, 'Poluchennaya matrica','$'
ermsg db 7,10,13,'Error','$'
mas1 dw ?, ?, ?
dw ?, ?, ?
dw ?, ?, ?
dw ?, ?, ?
mas2 dw 4 dup (?)
st db 10, 13, '$'
pr db 32, '$'
flag db 0
flag2 db 0

.code

start:
mov ax,@data
mov ds,ax

mov DX, offset Pr1 ; Начальный Адрес Строки в DX
mov AH, 9h
int 21h

NEWLINE

xor BX, BX
mov CX, 4 ; Строки = 4 (повторения внешнего цикла)

Vvod_Vneshniy:
push CX ; Начало Внешнего Цикла - Сохранение счетчика внешнего цикла в стеке
mov CX, 3 ; Элементов строки = 4 (повторения внутреннего цикла)
mov SI, 0

Vvod_Vnytrenniy:
ININT mas1[BX][SI] ; ВВОД (через метод Пильщикова)
cmp mas1[bx][si],0
je error
add SI, 2
loop Vvod_Vnytrenniy ; Конец внутреннего цикла

pop CX ; Взятие значения счетчика внешнего цикла из стека
add BX, 6 ; На начало следующей строкки в матрице
loop Vvod_Vneshniy ; Конец внешнего цикла

;-------------------------------------------------------------------------;
mov BX, 0
mov CX, 4 ; Строки = 4 (повторения внешнего цикла)

Vivod_Vneshniy:
push CX ; Начало Внешнего Цикла - Сохранение счетчика внешнего цикла в стеке
mov CX, 3 ; Элементов строки = 4 (повторения внутреннего цикла)
mov SI, 0 ; ЭС'АЙ - обнуляем

lea DX, st
mov AH, 9
int 21h

Vivod_Vnytrenniy:
push bx
push si
OUTINT mas1[BX][SI] ; ВЫВОД
pop si
pop bx
add SI, 2

mov AH, 2
mov DL, 9
int 21h

loop Vivod_Vnytrenniy ; Конец внутреннего цикла

pop CX ; Взятие значения счетчика внешнего цикла из стека
add BX, 6 ; На начало следующей строкки в матрице
loop Vivod_Vneshniy ; Конец внешнего цикла
;-------------------------------------------------------------------------;
xor BX, BX
mov CX, 4
xor dx,dx ; Строки = 4 (повторения внешнего цикла)
xor di,di
mov dx,2
Vneshniy:
push CX ; Начало Внешнего Цикла - Сохранение счетчика внешнего цикла в стеке
mov CX, 2 ; Элементов строки = 4 (повторения внутреннего цикла)
mov SI, 2


Vnytrenniy:
test flag,1b
jnz min
max:
sub si,2
pop si
mov ax,mas1[bx][si]
test flag2,1b
jz z1
n1: add si,4
xor flag2,1b
jmp sravn1
z1: add si,2
xor flag2,1b
sravn1:
cmp mas1[bx][si],ax
jl b1
mov ax,mas1[bx][si]
mov mas2[di],ax
jmp cont
b1:
mov mas2[di],ax
sub si,4
xor flag2,1b
push si
add si,4
jmp cont
min:
sub si,2
pop si
mov ax,mas1[bx][si]
test flag2,1b
jz z2
n2: add si,4
xor flag2,1b
jmp sravn2
z2: add si,2
xor flag2,1b
sravn2:
cmp mas1[bx][si],ax
jg m1
mov ax,mas1[bx][si]
mov mas2[di],ax
jmp cont
m1:
mov mas2[di],ax
cont:
add SI, 2
loop Vnytrenniy ; Конец внутреннего цикла

pop CX ; Взятие значения счетчика внешнего цикла из стека
add BX, 6 ; На начало следующей строкки в матрице
add di, 2
xor flag,1b
mov flag2,0
loop Vneshniy ; Конец внешнего цикла
;-------------------------------------------------------------------------;



;---------------------------------------------------------------------------;
NEWLINE
lea DX, mes1
mov AH, 9
int 21h
NEWLINE
mov BX, 0
mov CX, 4 ; Строки = 4 (повторения внешнего цикла)
mov DI, 0
Vivod:

OUTINT mas2[DI] ; ВЫВОД
add DI, 2

lea DX, pr
mov AH, 9
int 21h

mov AH, 2
mov DL, 9
int 21h

loop Vivod ; Конец внешнего цикла


jmp konec

error:
lea DX,ermsg
mov AH, 9
int 21h

konec:

mov ah,1
int 21h

mov ax,4C00h
int 21h
end start


не находит макс и мин элементы корректно. со второй часть я разберусь. мне б только с самим формированием mas1
GM402 вне форума Ответить с цитированием
Старый 29.11.2010, 08:48   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

GM402 а где я должен взять описание функций OUTINT и ININT? из файла io.asm? Ну так и прикрепил бы его через вложение файлов
А это что за бред?
Цитата:
Сообщение от GM402
Примечание: произведение равнознаковых чисел всегда отрицательно
Во-первых GM402 наверное спал в школе на уроках математики, так как произведение равнознаковых чисел всегда положительно
(+)х(+)=(+) (-)х(-)=(+), а во-вторых в задании нет ничего о перемножении элементов матрицы
Mikl___ вне форума Ответить с цитированием
Старый 29.11.2010, 23:22   #5
GM402
 
Регистрация: 27.11.2010
Сообщений: 5
По умолчанию

...
mas1 dw ?, ?, ?
dw ?, ?, ?
dw ?, ?, ?
dw ?, ?, ?
mas2 dw 4 dup (?)
flag db 0
flag2 db 0
...
xor BX, BX
mov CX, 4
xor dx,dx ; Строки = 4 (повторения внешнего цикла)
xor di,di
mov dx,2
Vneshniy:
push CX ; Начало Внешнего Цикла - Сохранение счетчика внешнего цикла в стеке
mov CX, 2 ; Элементов строки = 4 (повторения внутреннего цикла)
mov SI, 2


Vnytrenniy:
test flag,1b
jnz min
max:
sub si,2
pop si
mov ax,mas1[bx][si]
test flag2,1b
jz z1
n1: add si,4
xor flag2,1b
jmp sravn1
z1: add si,2
xor flag2,1b
sravn1:
cmp mas1[bx][si],ax
jl b1
mov ax,mas1[bx][si]
mov mas2[di],ax
jmp cont
b1:
mov mas2[di],ax
sub si,4
xor flag2,1b
push si
add si,4
jmp cont
min:
sub si,2
pop si
mov ax,mas1[bx][si]
test flag2,1b
jz z2
n2: add si,4
xor flag2,1b
jmp sravn2
z2: add si,2
xor flag2,1b
sravn2:
cmp mas1[bx][si],ax
jg m1
mov ax,mas1[bx][si]
mov mas2[di],ax
jmp cont
m1:
mov mas2[di],ax
cont:
add SI, 2
loop Vnytrenniy ; Конец внутреннего цикла

pop CX ; Взятие значения счетчика внешнего цикла из стека
add BX, 6 ; На начало следующей строкки в матрице
add di, 2
xor flag,1b
mov flag2,0
loop Vneshniy ; Конец внешнего цикла
...

Создать одномерный массив mas2 следующим образом: первый элемент - это минимальный элемент из строки номер 0 матрицы, второй - максимальный из строки номер 1, третий - минимал из строки 2 и четвёртый - максимал из строки 3. Вот что у меня не получается нифига. Остальное знаю
GM402 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с матрицей AleksENN Помощь студентам 0 23.10.2010 14:13
работа с матрицей RanMa Помощь студентам 6 12.03.2010 17:05
Работа с матрицей JeyKip Общие вопросы C/C++ 4 25.10.2009 22:47
Работа с матрицей Absent Помощь студентам 1 24.05.2008 13:33
Работа с матрицей Absent Помощь студентам 3 17.05.2008 22:20