Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Чемпионы рейтинга экспертов в этой рассылке Номер выпуска: | 1333 | Дата выхода: | 10.05.2010, 10:00 | Администратор рассылки: | Лысков Игорь Витальевич, Модератор | Подписчиков / экспертов: | 292 / 60 | Вопросов / ответов: | 1 / 1 | IRC-канал по теме: | #assembler | Вопрос № 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
Использовать побольше коментариев ипроцедур очень желательно! Спасибо за внимание! Отправлен: 01.05.2010, 09:46 Вопрос задал: Юдин Евгений Сергеевич, 1-й класс Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич, Модератор : Здравствуйте, Юдин Евгений Сергеевич. Вот Вам программа:
Код: N equ 4 ;размерность матрицы
cseg segment para public 'code' assume cs:cseg, ds:dseg, es:dseg start: ;точка входа mov ax, dseg ;настроим сегментные регистры mov ds, ax mov es, ax
call GetMin ;ищем минимум в нужных диагоналях
lea dx, sMin ;сообщение mov ah, 9 int 21h
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 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий