Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


Доброе время суток народ.

Есть следующий код.
Код: Выделить весь код
;DS:DI - адрес массива

TITLE The bubble way of sorting the array 	

SSEG SEGMENT PARA STACK 'STACK'			;
        DB 256 DUP(0)
SSEG ENDS

DSEG SEGMENT PARA PUBLIC 'DATA'			
ArraySize DW 20 DUP(0)			;MAX-65535
DSEG ENDS                                       ;DB/DW - Define Bytes/Words

CSEG SEGMENT PARA PUBLIC 'CODE'            	
        ASSUME CS:CSEG,DS:DSEG,SS:SSEG

BUBBLE_SORT PROC NEAR				;Procedure Definition (32-FAR)
			push ds		
			sub ax,ax		
			push ax 		
			mov ax,DSEG		;инициализируем адреса сегментов
			mov ds,ax		
			
Start:			mov dx,ArraySize	; ArraySize в DX 
			cld			;установим в ноль флаг направления DF                       
			cmp dx,1		;сравниваем dx с 1
			jbe sort_exit	;выйти, если нечего сортировать
			dec dx  		;уменьшит значение dx на единицу
sb_loop1:		mov cx,dx		;установить длину цикла
			xor bx,bx		;BX будет флагом обмена
			mov si,di		;SI – указатель на текущий элемент
sb_loop2:		lodsw			;считать следующий элемент
			cmp ax,word ptr [si]
			jbe no_swap		
			xchg ax,word ptr [si]	
			mov word ptr [si-2],ax
			inc bx			
no_swap:		loop sb_loop2
			cmp bx,0		;если сортирование не закончилось
			jne sb_loop1	;перейти к следующему элементу
sort_exit:		pop ax			
			pop ds			
			ret			
BUBBLE_SORT ENDP                                
CSEG ENDS                                       
	END BUBBLE_SORT
Задача кода – инициализировать массив, заполнить его и сортировать методом пузырька.
На текущий момент код умеет задавать размерность массива в шапке.
Необходимо разместить адрес массива в DS:DI и заполнить элементы массива случайными величинами (например считать данные с памяти).

Пишу на TASMе.

Кто знает отпишитесь.

Отправлено: 05:54, 28-11-2006 | #22