Поиск:

Ответ в темуСоздание новой темы Создание опроса
> упорядоченность массива, проверка массива на упорядоченность 
V
    Опции темы
Chien
Дата 20.3.2010, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В асме я полный ноль(.  Нужно проверить, упорядочен ли массив целых чисел по возрастанию, результат вывести на экран. Пробовала вот так
Код

.386

.model flat, stdcall 
option casemap :none 

include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\masm32.inc
include \MASM32\INCLUDE\gdi32.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\masm32.lib
includelib \MASM32\LIB\gdi32.lib
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib

.data

mes db "Результат.",0
mes1 db "Массив не упорядочен.",0
mes2 db "Массив упорядочен.",0

mas dw 0,1,9,3,4,5

.code
start:
mov si,0

mov di,2

mov bx,10

check:
    mov ax,mas[si]
    mov dx,mas[di]
    cmp ax,dx
    jg fin1

    cmp si,bx
    je fin2

    xor ax,ax
    xor dx,dx

    inc si;увеличиваем индекс
    inc di
loop check

fin1:
invoke MessageBox,0,ADDR mes1,ADDR mes,MB_OK ;выводим сообщение
invoke ExitProcess,0 ;завершаем программу

fin2:
invoke MessageBox,0,ADDR mes2,ADDR mes,MB_OK
invoke ExitProcess,0 ;завершаем программу
end start



В независимости от значений элементов массива выдает "не упорядочен". Помогите, плиз!

PM MAIL ICQ   Вверх
ФедосеевПавел
Дата 21.3.2010, 07:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Обрати внимание на размер элементов массива (2 байта) и на величину смещения в этом массиве (si и di - это не аналог индексов массива как в C или Delphi).
В общем нужно не
Код
    inc si;увеличиваем индекс
    inc di

а
Код
  add esi, 2 ; увеличиваем адрес (смещение) элемента массива
  add edi, 2


Добавлено @ 07:19
Кроме того, служим или богу или мамону. Или сами проверяем выход за границы массива "врукопашную" или доверим это loop'у.
Если loop'у, то нужно инициализировать ecx и отказаться от проверки bx.
Код
mov esi,0

mov edi,2

mov ecx, 6-1 ; количество элементов массива минус 1 (т.к. сравнений меньше на 1)

check:
    mov ax,mas[esi]
    mov dx,mas[edi]
    cmp ax,dx
    jg fin2

    add esi, 2
    add edi, 2
loop check

invoke MessageBox,0,ADDR mes2,ADDR mes,MB_OK ;выводим сообщение
invoke ExitProcess,0 ;завершаем программу

fin2:
invoke MessageBox,0,ADDR mes1,ADDR mes,MB_OK
invoke ExitProcess,0 ;завершаем программу

loop check

Еще, меняем местами вывод строки результата - т.к. по завершению цикла loop (массив упорядочен) управление перейдёт на следующую за loop команду.

Это сообщение отредактировал(а) ФедосеевПавел - 21.3.2010, 07:57
PM   Вверх
Chien
Дата 21.3.2010, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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