Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2011, 12:41   #1
Стас_с
Пользователь
 
Регистрация: 05.07.2011
Сообщений: 22
Восклицание удаление эл из массива

начал писать код и столкнулся с проблемой.
хочу удалить все нулевые эл из масива сдвигая на его место предыдущий,
вот что получилось
Код:
stack   segment         STACK
        db      64 dup(?)
stack   ends
data    segment
        z   dw 0, -2, 0, 2, 9, 1, 0, 3 	;исходный массив
		y   dw 9 dup(?)
		n   dw 9
		sad dw ?
		sap dw ?
data    ends
code    SEGMENT
assume ss:stack,ds:data,cs:code
start   proc    far
;--------------Возврат в dos
        push    ds
        sub     ax,ax
        push    ax
;--Занесение в регистр ds адреса сегмента данных
        mov     ax,data
        mov     ds,ax
;--------------Начало программы
       xor di,di
	   xor si,si
	   m1:
	   mov ax,z[si]
	   test ax,ax
	   jz m2
	   mov z[di],ax
	   inc di
	   inc di
	   m2:
	   inc si
	   inc si
	   cmp si,18
	   jb m1
st_ret: ret
start   endp
code    ends
        end     start
суть в том что после сдвига остаются ненужные элементы которые портят всю картину .... как это решить не могу понять
Стас_с вне форума Ответить с цитированием
Старый 19.08.2011, 13:10   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
cmp si,18
что это за ужас?!

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

p.s. Как вариант, можно обойтись без переменной, но тогда в конец массива нужно добавить "стоп-маркер". Если его достигли - значит массив закончился...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.08.2011, 13:35   #3
Стас_с
Пользователь
 
Регистрация: 05.07.2011
Сообщений: 22
По умолчанию

Код:
cmp si,18
это и есть длина массива так как его формат DW
Стас_с вне форума Ответить с цитированием
Старый 19.08.2011, 13:42   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну так это и есть ужас!

Как минимум - вытаскивайте размер массива в переменную (и дальше по тексту моего вышеприведённого сообщения.

Стас, а чем Вас не устроила Ваша же тема,
удаление эл из массива ?!
Та тема жива и здорова. Почему Вы решили её бросить и создать такую же новую?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.08.2011, 13:53   #5
Стас_с
Пользователь
 
Регистрация: 05.07.2011
Сообщений: 22
По умолчанию

ну согласен тоже самое можно же и сделать с занисением в переменную суть то не в это...

как я понял стоит дописать уменьшение на 1 эл если есть сдвиг.


простите
Стас_с вне форума Ответить с цитированием
Старый 23.08.2011, 08:28   #6
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

http://programmersforum.ru/showthread.php?t=162274
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 23.08.2011, 08:49   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

alexcoder,
я в своём пост #4 указал на эту тему...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление эл из массива Стас_с Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 06.08.2011 11:38
Удаление из массива С++ zhenya.ya Помощь студентам 6 24.03.2011 23:54
Удаление из массива Цветик Общие вопросы C/C++ 0 07.11.2010 20:34
Удаление из массива Цветик Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 14.10.2010 03:55