Hola, soy bastante nuevo con esto del ensamblador y se me ha hecho un lio horrendo
;************************************************************
;Realiza un ordenamiento de un array con 20 numeros
************************************************************
.MODEL SMALL ; Modelo de memoria para el programa
.DATA ; Declaracion de variables
Mensaje1 db 'Array sin ordenar',0Ah,24h ;declaracion de mensajes,0AH,24h es un salto de linea
Mensaje2 db 'Array ordenado',0Ah,24h
Mensaje3 db 'Array con multiplos del 3',0Ah,24h
.CODE
INICIO:
; Cuerpo del programa
mov dx,OFFSET Mensaje1 ; Direccion de la cadena de texto
mov ah,9 ; Funcion para imprimir cadenas
int 21h ; Llamada al sistema operativo
INICIALIZACION:
mov si,offset tabla_o
mov cx,19
mov cambio,0
mov temp, 0
ciclo:
mov ah,[si] ;elemento 1
mov al,[si+1] ;elemento 2
cmp al,ah ;Realiza la comparacion del elemento 1 con el 2
jg mayor ;Salta si es mayor
fciclo:
inc si
loop ciclo ;ciclar hasta 20 elementos
cmp cambio,1
je INICIALIZACION
salir:
mov ah,4ch ; servicio del DOS para regresar
int 21h ; el control al procesador de comandos msdos ; Funcion para imprimir cadenas
; el control al procesador de comandos msdos
cambio db 0 ; variable de estado 1=mayor 0=menor
tabla_o db 2,9,16,1,4,5,6,32,17,10,60,63,90,12,33,45,99,100,80
temp db 0; Variable temporal
mayor:
mov cambio,1
;T temp = list[i + 1];
; list[i + 1] = list[i];
; list[i] = temp;
; madeChanges = true;
mov temp, al
mov [si + 1] ,ah
mov al, temp
mov [si],al
jmp fciclo
END INICIO
CODE ENDS
END
Emulador 8086, x86
Tengo ese codigo, me gustaria imprimir lo que ordeno a la salida del array o lo que mal ordeno (porque ni siquiera se si lo ordene bien, pero bueno la idea es hacerlo yo si tienen alguna guia o algo que me ayude pues seria genial pero es adicional!).
Y es que si utilizo el 21h con el 4ch pues me vuelve a tirar el mensaje de arriba!!.
Me ha costado bastante entenderlo, les agradeceria una guia nada mas, GRACIAS POR LEER.
Depura el programa con un debuger...
¿Qué es lo que sucede cuando ejecutas el programa?
Esto:
mov cambio,0
mov temp, 0
Es incorrecto, debería de ser así:
mov [cambio],0
mov [temp], 0
Para acceder al contenido y no trabajar con el puntero.
Y con esto más de lo mismo
mov cambio,1
mov temp, al
Así:
mov [cambio],1
mov byte[temp], al
Hay algún fallo mas de este tipo por ahí...
Hola Fary GRACIAS por responder, sucede que cuando ejecuto una impresión en pantalla (específicamente la segunda) me vuelve a introducir el mismo mensaje que el primero, y dos no se exactamente como ir escribiendo el array conforme lo recorro y presentarlo en pantalla como se va ordenando.
Gracias por indicarme el fallo, verificaré, si sabes de como imprimirlo en pantalla te estaría muy agradecido!.
Lo que pasa es que realmente si lo he probado con la función prt y la del ah,9, cómo reitero soy muy nuevo con esto del ensamblador no se me asemeja mucho al de alto nivel. GRACIAS
Para imprimir un número lo tienes que pasar a cadena. 1 no es lo mismo que '1'.
saludos!!
Y como le paso la cadena, haciendo un offset o cómo?. Podrías darme un pequeño ejemplo?.
Es que lo que me imagino asó
print array;
Me lo imagino así en ensamblador
mov dx, offset tabla_o ; cómo pondría acá que me imprima esto -- tabla_o[si]??
ah,9
int 21h
Cómo lo hago?.
He visto instrucciones con lea y eax pero no lo comprendo bien.
0x0 + 0x30 = 0x30 = '0'
0x1 + 0x30 = 0x31 = '1'
0x2 + 0x30 = 0x32 = '2'
...
0x9 + 0x30 = 0x39 = '9'
Gracias