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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2012, 16:47   #1
Pavvel071
Новичок
Джуниор
 
Регистрация: 06.05.2012
Сообщений: 1
По умолчанию Сортировка 16-ой системы

Все шестнадцатеричные цифры нужно отсортировать в возрастающем порядке. Остальные символы оставить на своих местах.

Помогите доработать код(он сделан для сортировки 10-ричной системы):

Цитата:
Код:
	.686
	.MODEL	FLAT,C
	INCLUDE	in_out.inc
input	PROTO	PASCAL :PTR BYTE
sort	PROTO	PASCAL :PTR BYTE, :PTR BYTE

	.STACK

	.DATA
NN	=	200
LF	=	0Ah
Prompt	BYTE	"ВВедите строку:",0
Msg1	BYTE	"ВВедена строка:             [%s]",10,0
Msg2	BYTE	"Отсортированная строка:[%s]",0

	.DATA?
X	BYTE	NN DUP (?)
Y	BYTE	NN DUP (?)

	.CODE


input	PROC	PASCAL USES ebx s:PTR BYTE
	LOCAL	stdin:DWORD


	INVOKE	__iob_func	
	mov	stdin,eax

	mov	ebx,s		

@@:	INVOKE	fgetc,stdin	
	cmp	al,LF
	je	@F		
	mov	[ebx],al	
	inc	ebx		
	jmp	@B		
@@:
	mov	BYTE PTR [ebx],0
	mov	eax,ebx
	sub	eax,s		; length of s

	RET
input	ENDP

sort	PROC	PASCAL USES eax ecx esi edi a:PTR BYTE, b:PTR BYTE
	LOCAL	i_:DWORD


	INVOKE	strlen,a
	mov	ecx,eax


	inc	ecx
	cld
	mov	esi,a
	mov	edi,b
	rep	movsb	

	mov	ecx,eax
	cmp	ecx,1
	jbe	exit

	dec	b
	dec	ecx		
				
loop_i:	mov	i_,ecx		
	mov	esi,b		
	mov	al,0		
	mov	edx,0		

	mov	edi,esi
	inc	ecx		

loop_j:	inc	edi		
	mov	ah,[edi]	

	cmp	ah,'0'		
	jb	continue_j	
	cmp	ah,'9'
	ja	continue_j	

        cmp	ah,al		
	jae	continue	
	mov	[esi],ah	
	mov	[edi],al	                   
	mov	edx,1		

continue:			
	mov	esi,edi		
	mov	al,[esi]	

continue_j:
	loop	loop_j		

	test	edx,edx
	je	exit

	mov	ecx,i_
	loop	loop_i		

exit:	RET
sort	ENDP

main	PROC	
	INVOKE	printf,ADDR Prompt
	INVOKE	input,ADDR X
	INVOKE	sort,ADDR X,ADDR Y
	INVOKE	printf,ADDR Msg1,ADDR X
	INVOKE	printf,ADDR Msg2,ADDR Y

	RET
main	ENDP 

	END

Последний раз редактировалось Pavvel071; 06.05.2012 в 16:51.
Pavvel071 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32