Извлечь числа из массива в другой с условием

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Crazy D0G
Сообщения: 1
Зарегистрирован: 29 июн 2009, 23:04

Дано задание: в заданном массиве чисел извлечь числа, которые входят в заданный диапазон [a;b] (которые не меньше а и не больше B). Определить количество чисел в новом массиве. Вот мои наработки, пожалуйста, объясните, где ошибка:

Код: Выделить всё

    .data
    
mas1 db 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
mas2 db 13 DUP (0)
mas3 db 13 dup(0)
ent   db 13,10,0


    .code

start:

xor eax,eax 
xor ebx,ebx
xor ecx,ecx
xor esi,esi
xor edi,edi ; обнуление регистров

jmp Next ; безусловный переход на Next                            
Next: ; метка первого цикла
mov al, mas1
cmp al, 4
jb addmass
Next2:
mov al, mas1
cmp al, 9
ja addmass
inc mas1

addmass:
mov mas2, al
inc mas1
inc mas2

invoke dwtoa, mas2, OFFSET mas3
print addr mas3 ; вывод на экран Mass3 
invoke Sleep,5000 ; задержка на 5 сек. 

end start
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

1) Команда inc mas1 увеличивает первый байт массива на 1. Как такогого, прохода по массиву нет, всегда используется лишь первый байт. Необходимо использовать регистры для доступа к массиву.
2) Нарушена логическая цепочка, необходимо пропускать шаг добавления, если элемент НЕ входит в заданный диапазон, пример:

Код: Выделить всё

mov al, [esi]
cmp al, 4
jc @skip
cmp al, 9+1
jnc skip
mov [edi], al
inc edi
     @skip:
inc esi
It's a long way to the top if you wanna rock'n'roll
Ответить