Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 2256
∙ повысить рейтинг »
_Ayl_
Статус: Практикант
Рейтинг: 1837
∙ повысить рейтинг »
vladisslav
Статус: 6-й класс
Рейтинг: 1239
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Assembler (Ассемблер)

Номер выпуска: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 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 03.03.2010

    В избранное