-Помощь новичкам

Всего опекалось новичков: 0
Проверено анкет за неделю: 0
За неделю набрано баллов: 0 (78510 место)
За все время набрано баллов: 59 (12457 место)

 -Поиск по дневнику

Поиск сообщений в Kitab

 -Подписка по e-mail

 

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 27.08.2009
Записей: 1177
Комментариев: 437
Написано: 1923


Ассемблер

Пятница, 14 Мая 2010 г. 13:43 + в цитатник
Требуется с помошью TASM организовать решение задачиДана квадратная матрица Найти минимальное из значений элементов побочной диагонали матрицы и соседних с ними справа и слева.Хар-ки:1)процессор intel core 2 solo CPU U35002)window vista home premium 32х разрядная3)Turbo Assembler Version 4.1 в папке asm находится фаил TASM поэтому думаю он предпочтителен4)вычисления производить в сопроцессореЭлементы матрицы целые числапример:1 6 0 42 5 7 18 9 0 41 2 3 5.Вот Вам программа:Код:N equ 4 ;размерность матрицыcseg segment para public 'code'assume cs:cseg, ds:dseg, es:dsegstart: ;точка входа 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 ;по всем элементам диагонали retDiagonal 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 retGetMin endp;вывод десятичного числа из axPrDec 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_digpd_pr: ;цикл вывода цифр pop ax ;извлекаем из стека в обратном порядке add al, '0' ;в символ int 29h LOOP pd_pr ;по всем retPrDec endpcseg endsdseg segment para public 'data'sMin db 'Minimum = $'sPres s db 0dh,0ah,'Press any key for exit$'min dw 0array dw 1,6,0,4 dw 2,5,7,1 dw 8,9,0,4 dw 1,2,3,5dseg ends end start ;конец программы.
Рубрики:  Программы
Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку