elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Duda ASM
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda ASM  (Leído 3,522 veces)
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Duda ASM
« en: 26 Febrero 2015, 06:44 am »

Hola, soy bastante nuevo con esto del ensamblador y se me ha hecho un lio horrendo

Código
  1.  
  2. ;************************************************************
  3.  
  4. ;Realiza un ordenamiento de un array con 20 numeros
  5.  
  6. ************************************************************
  7.  
  8.  
  9. .MODEL SMALL                     ; Modelo de memoria para el programa
  10.  
  11. .DATA                            ; Declaracion de variables
  12.  
  13.  
  14.  
  15. Mensaje1 db 'Array sin ordenar',0Ah,24h ;declaracion de mensajes,0AH,24h es un salto de linea
  16. Mensaje2 db 'Array ordenado',0Ah,24h
  17. Mensaje3 db 'Array con multiplos del 3',0Ah,24h
  18.  
  19. .CODE
  20.  
  21.  
  22. INICIO:                              
  23.                         ; Cuerpo del programa
  24.  
  25.  
  26.    mov dx,OFFSET Mensaje1      ; Direccion de la cadena de texto
  27.    mov ah,9                    ; Funcion para imprimir cadenas
  28.    int 21h                     ; Llamada al sistema operativo
  29.  
  30.  
  31.    INICIALIZACION:
  32.  
  33.  
  34.            mov si,offset tabla_o
  35.            mov cx,19
  36.            mov cambio,0
  37.            mov temp, 0
  38.  
  39.  
  40.        ciclo:
  41.  
  42.        mov ah,[si]              ;elemento 1
  43.        mov al,[si+1]            ;elemento 2
  44.  
  45.        cmp al,ah                ;Realiza la comparacion del elemento 1 con el 2
  46.        jg mayor                 ;Salta si es mayor
  47.  
  48.  
  49.       fciclo:
  50.  
  51.        inc si  
  52.        loop ciclo              ;ciclar hasta 20 elementos
  53.        cmp cambio,1
  54.  
  55.        je INICIALIZACION
  56.  
  57.  
  58.  
  59.        salir:
  60.  
  61.  
  62.        mov ah,4ch              ; servicio del DOS para regresar
  63.        int 21h                 ; el control al procesador de comandos msdos                        ; Funcion para imprimir cadenas        
  64.                                ; el control al procesador de comandos msdos
  65.  
  66.  
  67.  
  68.        cambio db 0            ; variable de estado 1=mayor 0=menor
  69.  
  70.        tabla_o db 2,9,16,1,4,5,6,32,17,10,60,63,90,12,33,45,99,100,80
  71.  
  72.        temp db 0; Variable temporal
  73.  
  74.    mayor:  
  75.  
  76.            mov cambio,1
  77.  
  78.            ;T temp = list[i + 1];
  79.    ;                        list[i + 1] = list[i];
  80.    ;                        list[i] = temp;
  81.    ;                        madeChanges = true;
  82.  
  83.  
  84.           mov temp, al
  85.           mov [si + 1] ,ah
  86.           mov al, temp
  87.           mov [si],al                    
  88.  
  89.  
  90.           jmp fciclo  
  91.  
  92.  
  93.  
  94. END INICIO
  95. CODE ENDS
  96.  
  97.  
  98. END
  99.  
  100.  
  101.  

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.




« Última modificación: 26 Febrero 2015, 06:53 am por Yaldabaot » En línea

Nunca me contestan -_-
fary


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Duda ASM
« Respuesta #1 en: 26 Febrero 2015, 23:09 pm »

Depura el programa con un debuger...

¿Qué es lo que sucede cuando ejecutas el programa?

Esto:

Código
  1. mov cambio,0
  2. mov temp, 0

Es incorrecto, debería de ser así:

Código
  1. mov [cambio],0
  2. mov [temp], 0

Para acceder al contenido y no trabajar con el puntero.
  

Y con esto más de lo mismo

Código
  1. mov cambio,1
  2. mov temp, al

Así:

Código
  1. mov [cambio],1
  2. mov byte[temp], al

Hay algún fallo mas de este tipo por ahí...


« Última modificación: 26 Febrero 2015, 23:12 pm por fary » En línea

Un byte a la izquierda.
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: Duda ASM
« Respuesta #2 en: 26 Febrero 2015, 23:20 pm »

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
« Última modificación: 27 Febrero 2015, 02:14 am por Eternal Idol » En línea

Nunca me contestan -_-
fary


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Duda ASM
« Respuesta #3 en: 28 Febrero 2015, 10:24 am »

Para imprimir un número lo tienes que pasar a cadena. 1 no es lo mismo que '1'. 

saludos!!
En línea

Un byte a la izquierda.
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: Duda ASM
« Respuesta #4 en: 1 Marzo 2015, 00:39 am »

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.


En línea

Nunca me contestan -_-
fary


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Duda ASM
« Respuesta #5 en: 12 Marzo 2015, 17:45 pm »

0x0 + 0x30  = 0x30 = '0'
0x1 + 0x30  = 0x31 = '1'
0x2 + 0x30  = 0x32 = '2'
...
0x9 + 0x30  = 0x39 = '9'
En línea

Un byte a la izquierda.
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: Duda ASM
« Respuesta #6 en: 13 Marzo 2015, 23:55 pm »

Gracias
En línea

Nunca me contestan -_-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pequeña duda con un comando batch (NUEVA DUDA RELACIONADA)
Scripting
revenge1252 9 9,740 Último mensaje 13 Febrero 2008, 21:41 pm
por revenge1252
Duda duda y duda de Metasploit
Bugs y Exploits
huber_nomas 4 5,776 Último mensaje 17 Febrero 2012, 14:00 pm
por MauroMasciar
Duda facil, [VIDEO QUE EXPLICA MI DUDA]
Diseño Gráfico
Ngeooz 6 8,846 Último mensaje 2 Diciembre 2013, 19:33 pm
por Ngeooz
[DUDA] Cambiar letra de unidad a archivo con un Batch [DUDA] « 1 2 »
Windows
MrMaticool 10 11,289 Último mensaje 12 Febrero 2014, 17:55 pm
por MrMaticool
[DUDA][LICENCIA][GPL]tengo una duda sobre las caracteristicas de la licencia GPL
Dudas Generales
Noxware 0 1,863 Último mensaje 2 Mayo 2014, 00:34 am
por Noxware
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines