Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск в одномерном массиве, Помогите реализовать на asm 
:(
    Опции темы
serega721
Дата 15.5.2010, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 15.5.2010

Репутация: нет
Всего: нет



Ребят помогите пожалуйста с реалмзацией на asm
Найти наиболее длинную цепочку нулевых элементов в одномерном массиве (в двухбайтовом виде) 
PM MAIL   Вверх
iff
Дата 15.5.2010, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Цитата(serega721 @  15.5.2010,  11:38 Найти цитируемый пост)
(в двухбайтовом виде)  

Т.е. каждый элемент массива это слово?

Код

        .MODEL  SMALL
        .STACK  64

        .DATA
MAS     DW      90, 0, 0, 0, 7000, -9, 23, 0, 70, 0, 0, 0, 0, 0, 80, 80, 80, 124, 3467, 30245
LEN_MAS DW      ( $ - OFFSET MAS ) / 2  ;Кол-во элементов массива
ZERO_M  DW      0                       ;Сюда запишем кол-во нулей в наиболее длинной цепочке нулевых элементов
ADRES_M DW      ?                       ;Сюда запишем смещение наиболее длинной цепочки нулевых элементов

        .CODE
MAIN    PROC    FAR
        MOV     AX, @DATA               ;Инициализация регистра DS адресом сегмента данных
        MOV     DS, AX

        LEA     DI, MAS                 ;Инициализация регистра DI смещением массива
        MOV     CX, LEN_MAS             ;Инициализация счетчика (CX) количеством элементов

FND_Z:  CMP     WORD PTR [DI], 0        ;Нашли 0 (т.е. начало цепочки)?
        JNE     CONT1                   ;   если нет, то продолжить поиск цепочки. Иначе:

        MOV     AX, 1                   ;AX будет содержать число нулей в цепочки, уже нашли 1 ноль
        PUSH    CX                      ;Инициализация счетчика максимально возможным количеством нулей
        MOV     CX, LEN_MAS

FND_Q:  INC     DI                      ;Перейти к следующему элементу
        INC     DI
        CMP     WORD PTR [DI], 0        ;Элемент является нулем?
        JNE     CONT2                   ;   если нет, то обработать как конец цепочки. Иначе:
        INC     AX                      ;Счетчик количества нулевых элементов увеличить на 1
        LOOP    FND_Q                   ;Повторить

CONT2:  POP     CX
        CMP     AX, ZERO_M              ;Количество нулевых элементов в данной цепочки больше чем в максимальной из ранее найденных?
        JNA     CONT1                   ;   если нет, то начать поиск следующей цепочки. Иначе:
        MOV     ZERO_M, AX              ;Сохранить количество нулевых элементов в цепочки
        MOV     ADRES_M, DI             ;Вычислить и сохранить ее смещение в сегменте данных
        SHL     AX, 1
        SUB     ADRES_M, AX

CONT1:  INC     DI                      ;Следующий элемент
        INC     DI
        LOOP    FND_Z                   ;Продолжить поиск следующей цепочки нулевых элементов

        MOV     AH, 4CH                 ;Выход
        INT     21H

MAIN    ENDP
        END     MAIN


Добавлено через 4 минуты и 6 секунд
Если массив задан именно с такими значениями как в программе выше, то тогда элемент данных ZERO_M будет содержать значение 0005H, а ADRES_M -  0012H

Цитата(serega721 @  15.5.2010,  11:38 Найти цитируемый пост)
Найти наиболее длинную цепочку

Это значит найти колличество нулевых элементов в ней и ее адрес?



--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
serega721
Дата 15.5.2010, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 15.5.2010

Репутация: нет
Всего: нет



Да все правильно спс большое. Я просто только начал программировать на asm поэтому многое непонятно спс что с коментариями.
PM MAIL   Вверх
iff
Дата 15.5.2010, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Алгоритм заключается в следующем:
  • Найти цепочку нулевых элементов
  • Подсчитать кол-во нулей в ней
  • Если кол-во нулей > ZERO_M, то ZERO_M = кол-во нулей и ADRES_M = адрес начала цепочки
  • Повторять, пока не дойдем до последнего элемента.


Это сообщение отредактировал(а) iff - 15.5.2010, 20:16


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0771 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.