Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #MAKE_COM# ; instruct compiler to make COM file.
- ORG 100h ; directive required for a COM program.
- ;Es muy ineficiente, seguramente no estoy usando la pila de la manera que deberia
- ;y tendria que aplicar algun algoritmo menos ineficiente. Ahora estoy dando
- ;Cantidad de chars * (Min 1) - (Max Cantidad de chars -1)
- ;Seria mejor implementar insertion sort en vez de bubblesort.
- LEA SI,S_HOLA
- CALL Ordenar
- CALL Imprimir
- RET ; returns to operating system.
- Ordenar PROC ;SI tiene el parametro que es la direccion de memoria del string
- MOV CX,0
- PUSH SI ;Guardo la direccion de la variable en pila antes de modificarla
- for_ordenar:
- CMP b.[SI+1],0
- JZ vueltas_ordenar ;Termine una vuelta de palabra, faltan vueltas por ahi
- MOV AL,[SI]
- CMP [SI+1], AL
- ;Comparo el siguiente ([SI+1]) con el actual (AL)
- JC cambio_ordenar ;SI [SI] > [SI+1]
- ADD SI,1
- ADD CX,1
- JMP for_ordenar ;Empiezo el loop de nuevo
- vueltas_ordenar:
- MOV DX, SI ;EL SI actual (SI + La cantidad de caracteres)
- POP SI ;Agarro el SI original (SI Actual - La cantidad de caracteres)
- SUB DX, SI ;Cantidad de vueltas que necesito dar (cantidad de chars en el string)
- ;(En realidad es una menos porque es de a pares)
- CMP CX,DX
- JZ stop_ordenar
- PUSH SI ;Guardo la direccion de la variable en pila
- MOV CX,0
- MOV AL,0
- JMP for_ordenar
- cambio_ordenar:
- ;Tengo que meter AL/SI en SI+1 y vice versa
- PUSH [SI+1]
- MOV [SI+1],AL
- POP AX
- MOV [SI],AL
- ADD SI,1
- JMP for_ordenar
- stop_ordenar:
- RET
- Ordenar ENDP
- Imprimir PROC ;Imprimo lo que tengo en SI
- MOV AH,0Eh
- for_imprimir:
- MOV AL,[SI]
- CMP b.[SI],0
- JZ stop_imprimir
- INT 10h
- ADD SI,1
- JMP for_imprimir
- stop_imprimir:
- RET
- Imprimir ENDP
- S_HOLA DB 'ABCDEFGHIJK', 0 ;El signo $ es para que 21h sepa cuando parar de imprimir
- END
Advertisement
Add Comment
Please, Sign In to add comment