Algoritmo Ordenamiento Burbuja Ensamblador

  • Published on
    10-Aug-2015

  • View
    1.551

  • Download
    6

Embed Size (px)

Transcript

<p>Algoritmo Ordenamiento Burbuja EnsambladorPor Moises Garcia | Programacion, Tips | Viernes 17 diciembre, 2010 Deja tu opinion Hace poco en la universidad me toco programar este ordenamiento en lenguaje ensamblador (asm) y la verdad no estan facil como programar en lenguajes de alto nivel (Java,C,C++,etc). El ensamblador por ser lengueje de nivel que implementa una represantacion simbolica de los codigos de maquina binarios y otras constantes necesarios para programar una arquitectura dada de CPU . Se basa en mnemonicos que simbolizam los pasos de procesamiento , los registros del procesador, las direcciones de memoria y otras caracteristicas del lenjuage. Es muy sencillo aprenderse cada comando, cada mnemonico , pero estructurar un programa nos lo es. Por eso decidi compartir este algoritmo donde recibe unicamente como parametro la direccion del inicio del arreglo y el tamao: Algoritmo del Ordenamiento Burbuja (Bubble Sort)BubbleSort PROCEDIMIENTO Dir_Arreglo,TamaoArreglo ;Decalcarion de variables locales necesarios local Valor1, Valor2 , i, j, k,n,bContinuar ,nmenos1 Respaldar Registros necesarios con un push registros o pusha</p> <p>mueve nmenos1,TamaoArreglo restale uno Mueve a un Registro Base,Dir_Arreglo mueve a j, nmenos1 mueve i,0 Mueve a un Registro Indice o Destino,4; ;lo anterior 4 para desplazamiento de tamao de 32 bits ; 2 para 16 bits, 1 para 8 bits MIENTRASBCONTINUARES1: mueve a BCONTINUAR,0 mueve a registrobase,Dir_Arreglo mueve a j, nmenos1 FOR1: mueve Valor1,[RegistroBase] mueve Valor2,[RegistroBase+4] ; lo mismo que anteriormente ; en este caso el arreglo es de ; 32 bits cada elemento mueve a registro,[RegistroBase] mueve a registro2,[RegistroBase+4] Si Valor1&gt;Regitro2 intercambia [RegistroBase],[RegistroBase+4] mueve BCONTINUAR,1 ; esto impedira que se termine el programa ; y seguir en el bucle hasta dejar ;ordenado el arreglo</p> <p>sino decrementa j suma a RegistroBase,4; 32 bits compara j,0 Si no es igual FOR1 MOV un registro,BCONTINUAR comparar registro,0 si es igual SALIR: BRINCA A MIENTRASBCONTINUARES1 SALIR: ;Restaurara Todos los Registros respaldados ret BubbleSort FINPROCEDIMIENDO</p> <p>Via | http://tecnofull.com/recomendaciones-trucos-tecnologia/algoritmo-ordenamientoburbuja-ensamblador/#ixzz1ZcUowZCl</p> <p>Mtodo de ordenacin de burbuja en ensamblador ayuda?ojala y alguien me pueda decir en donde esta la falla en mi cdigo en lenguaje ensamblador, ya intent ensamblar con MASM 6.11, lo ensambla, pero cuando lo ejecuto, aparecen caracteres sin ninguna lgica, estoy intentando realizar el mtodo de ordenacin de burbuja. .dosseg .model small .stack 100h .data num db 10 dup (0) salto db cr,lf,'$' cr equ 10 lf equ 13 .code mov dx,@data mov ds,dx lea si,num mov si,0</p> <p>mov cx,10 inicio: mov ah,01h int 21h mov num[si],al mov ah,09 mov dx,offset salto int 21h inc si loop inicio mov si,0 mov cx,10 imprime: mov ah,02h mov dl,num[si] int 21h mov ah,02h mov dl,' ' int 21h inc si loop imprime lea di,num mov di,0 mov si,0 mov cx,10 ciclo1: push cx ; mov al,num[si] mov cx,10 ciclo2: ; mov ah,num[di]</p> <p>cmp num[si],num[di] ja intercambio jmp sigue intercambio: mov al,num[si] mov num[si],num[di] mov num[di],al ;mov num[si],ah ;mov num[di],al ;mov al,ah sigue: inc di loop ciclo2 inc si pop cx loop ciclo1 mov si,0 mov cx,10 print: mov ah,02h mov dl,num[si] int 21h mov ah,02h mov dl,' ' int 21h inc si loop print mov ah,4ch int 21h end</p>