Ensamblador - Metodo de byrbuja !

 
Vista:

Metodo de byrbuja !

Publicado por pepe (1 intervención) el 05/04/2006 04:10:22
quisiera ayuda en hacer este programa, la verdad se poco de ensamblador, quisiera saber si alguien me puede ayudar a hacer este programa.

no necesita pedir entradas por teclado, pueden ser variables definidads.. 5 palabras necesito ordenar
gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Metodo de byrbuja !

Publicado por Geergon (46 intervenciones) el 08/04/2006 22:33:57
ideal
p286n
model tiny

codeseg
org 100h
jmp start

my_arr db 5, 2, 8, 9, 1, 7, 3, 0, 4, 6
; ----------------------------
; | bubble_sort
; | sort an array whose pointer pointed by arr_idx
; | modifies:
; | none
; | algorithm outline: (when size = 10)
; | for i = 0 to 8
; | for j = i+1 to 9
; | if arr_idx[i]>arr_idx[j] then swap(arr_idx[i], arr_idx[j]);
; |
; | i is mapped to SI
; | j is mapped to DI
; | bx hold the base array index
; | ah, al is to aid processing
; | cx is to hold the size
; ----------------------------
proc bubble_sort arr_idx: word, size: word
pusha ; save all registers
mov bx, [arr_idx]
mov cx, [size]
dec cx ; because maximum index bound is always one less than
; the size (i.e. when size is 10, the index is 0..9, not 1..10)
sub si, si
sub di, di

@@loop_i:
mov di, si
inc di ; j = i + 1

@@loop_j:
mov ah, [bx+si] ; AH = arr_idx[i]
mov al, [bx+di] ; AL = arr_idx[j]

cmp ah, al ; if (arr_idx[i] <= arr_idx[j]) then no swap
jle @@noswap

mov [bx+si], al ; else swap
mov [bx+di], ah

@@no_swap:

inc di ; (increase j)
cmp di, cx ; (compare with bound)
jbe @@loop_j ; if below or equal, then go to @@loop_j

; end of loop j

inc si ; increment i
cmp si, cx ; compare with bound
jb @@loop_i ; if below, then loop to @@loop_i

popa ; restore all registers
ret
endp

start:

mov dx, offset my_arr
call bubble_sort, dx, 10

; After this call, the array my_arr is sorted

mov ax, 4c00h
int 21h
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Metodo de byrbuja !

Publicado por Geergon (46 intervenciones) el 08/04/2006 22:45:13
Hola!

El codigo anterior fue tomado de la página
http://www.geocities.com/codeteacher/
(y esta implementado para utilizar con TASM)

Este bublesort es específicamente para ordenar bytes, pero lo que tu necesitas ordenar son palabras (word), entonces solamente deberas modificarlo un poco y utilizar el registro AX completo. Es la sección del código donde ocurren los swaps (a partir del label @@loop_j:) puedes cambiar las intrucciones MOV por una sola intruccion XCHG ...., tambien hay que hacer otros cambios....
Mejor aqui te dejo otro enlace con una implementación del bublesort mejorada que utiliza registros extendidos de 32 bits.
http://www.df.lth.se/~john_e/gems/gem0046.html

Muchas Gracias por su tiempo!!

Atentamente:
Geergon
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar