Вопрос № 178137: Доброго времени Суток дорогие эксперты: Требуется с помошью TASM организовать решение задачи Дана квадратная матрица Найти минимальное из значений элементов побочной диагонали матрицы и соседних с ними справа и слева. Хар-ки:Вопрос № 178137:
Доброго времени Суток дорогие эксперты:
Требуется с помошью TASM организовать решение задачи
Дана квадратная матрица Найти минимальное из значений элементов побочной диагонали матрицы и соседних с ними справа и слева.
Хар-ки: 1)процессор intel core 2 solo CPU U3500 2)window vista home premium 32х разрядная 3)Turbo Assembler Version 4.1 в папке asm находится фаил TASM поэтому думаю он предпочтителен 4)вычисления производить в сопроцессоре
Элементы матрицы целые числа
пример:
1
6 0 4 2 5 7 1 8 9 0 4 1 2 3 5
Использовать побольше коментариев ипроцедур очень желательно! Спасибо за внимание!
mov ax, min ;минимум call PrDec ;выведем знаковое десятичное число
lea dx, sPress ;Pres any key mov ah, 9 int 21h
mov ah, 0 ;ждем нажатие на клавишу int 16h
mov ax, 4c00h ;выход в ДОС int 21h
;ищем минимум в указанной диагонали ;параметры: ; BX - адрес (база) массива ; SI - индекс перв
ого элемента диагонали ; DX - приращение для индекса следующего элемента диагонали ; CX - число элементов диагонали Diagonal proc mov ax, [bx+si] ;очередной элемент диагонали cmp ax, min ;сравниваем (сравнение знаковое) с минимумом jge D_next ;если >=, то на следующий mov min, ax ;сохраним очередной минимальный D_next: add si, dx ;индекс следующего элемента loop Diagonal ;по всем элементам диагонали ret Diagonal endp
;ищем минимум по трем диагоналям GetMin proc mov min,
7fffh ;заведомо самое большое число lea bx, array ;адрес массива mov dx, 2*(N-1) ;приращение для следующего элемента (*2, потому что слова) ;диагональ выше побочной mov si, 2*(N-2) ;индекс первого элемента mov cx, N-1 ;число элементов call Diagonal ;побочная диагональ mov si, 2*(N-1) ;индекс первого элемента mov cx, N ;число элементов call Diagonal ;диагональ ниже побочной mov si, 2*(2
*N-1) ;индекс первого элемента mov cx, N-1 ;число элементов call Diagonal ret GetMin endp
;вывод десятичного числа из ax PrDec proc test ax, ax ;проверим на знак jns pd_unsigned ;если неотрицательное, то на вывод push ax mov al, '-' ;выведем '-' int 29h pop ax neg ax ;получим модуль числа pd_unsigned: mov bx, 10 ;будем делить на 10, чтобы получить остатки xor cx, cx ;счетчик цифр pd_dig: ;цикл формирования
цифр, xor dx, dx ; как остатков от деления на 10 div bx push dx ;очередной остаток = десятичному разряду inc cx ;считаем or ax, ax ;есть ли еще? jnz pd_dig pd_pr: ;цикл вывода цифр pop ax ;извлекаем из стека в обратном порядке add al, '0' ;в символ int 29h LOOP pd_pr ;по всем ret PrDec endp
cseg ends
dseg segment para public 'data' sMin db 'Minimum = $' sPres
s db 0dh,0ah,'Press any key for exit$' min dw 0 array dw 1,6,0,4 dw 2,5,7,1 dw 8,9,0,4 dw 1,2,3,5 dseg ends
end start ;конец программы
----- Удачи!
Ответ отправил: Лысков Игорь Витальевич, Модератор
Ответ отправлен: 06.05.2010, 12:19
Номер ответа: 261236 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Абонент Skype: igorlyskov
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 261236
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.