• Viernes 29 de Marzo de 2024, 09:29

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - onca

Páginas: [1]
1
ASM (Ensamblador) / Alguien me puede explicar qué está mal en este programa.
« en: Martes 16 de Julio de 2013, 21:43 »
Hola a todos:

Estoy aprendiendo a programar assembler en Linux con NASM.

En el programa que muestro más abajo, trato de comparar el contenido de dos registros "cmp eax,ebx" y mostrar el cartel correspondiente según sean iguales, eax mayor o eax menor.

Para ello después de comparar, trato de saltar a la etiqueta correspondiente, pero no funciona la instrucción "jmp MOSTRAR"

Si los dos registros son iguales, entonces la salida es:

son iguales
el primero es mayor
el segundo es mayor


A continuación copio el código completo:

;###############################################################################
; PROGRAMACION ASSEMBLER EN LINUX CON NASM
;
; COMPILAR:  nasm -f elf comparar.asm
; LINKEAR :  ld -o comparar comparar.o
; EJECUTAR:  ./comparar
;-------------------------------------------------------------------------------
; SECCION DE DATOS INICIALIZADOS
;-------------------------------------------------------------------------------
section .data

  msj1: db "son iguales",0xA               ; Cadena 1 (incluye ENTER).
  msj2: db "el primero es mayor",0xA    ; Cadena 2 (incluye ENTER).
  msj3: db "el segundo es mayor",0xA   ; Cadena 3 (incluye ENTER).

  l1: equ $-msj1                       ; Cantidad de bytes de Cadena 1.
  l2: equ $-msj2                       ; Cantidad de bytes de Cadena 2.
  l3: equ $-msj3                       ; Cantidad de bytes de Cadena 3.

;-------------------------------------------------------------------------------
; SECCION DE CODIGO
;-------------------------------------------------------------------------------
section .text

  global _start            ; Declaracion de etiqueta global "_start"
                               ; necesaria como punto de incio.

  _start:                    ; Punto de inicio.

  mov eax,15              ; Mueve un 15 al registro AX.
  mov ebx,15              ; Mueve un 15 al registro BX.
 
  cmp eax,ebx             ; Compara AX con BX.

  jg MAYOR                 ; Si el contenido de AX es mayor que el de BX
                               ; salta a la etiqueta "MAYOR".

  jl MENOR                 ; Si el contenido de AX es menor que el de BX
                               ; salta a la etiqueta "MENOR".
  IGUALES:
    mov ecx,msj1          ; Mueve al CX la direccion de la cadena 1.
    mov edx,l1             ; Mueve al DX la longitud de la cadena 1.

    jmp MOSTRAR        ; Deberia saltar a la etiqueta "MOSTRAR",
                              ; pero no lo hace.

  MAYOR:
    mov ecx,msj2         ; Mueve al CX la direccion de la cadena 2.
    mov edx,l2            ; Mueve al DX la longitud de la cadena 2.

    jmp MOSTRAR        ; Deberia saltar a la etiqueta "MOSTRAR",
                             ; pero no lo hace.

  MENOR:
    mov ecx,msj3         ; Mueve al CX la direccion de la cadena 3.
    mov edx,l3            ; Mueve al DX la longitud de la cadena 3.

  MOSTRAR:
    mov eax,4             ; Mueve al AX el numero de servicio para escribir.
    mov ebx,1             ; Mueve al BX el descriptor de archivo (1 = stdout).
    int 0x80                ; Realiza la llamada al kernel.

;-------------------------------------------------------------------------------
; TERMINAR EL PROGRAMA
;-------------------------------------------------------------------------------
  SALIR: 
    mov eax,1             ; Mueve al AX el numero de servicio para salir.
    mov ebx,0             ; Mueve al BX el valor de retorno.
    int 0X80               ; Realiza la llamada al kernel.
;###############################################################################

Desde ya les quedo agradecido.
Rubén.

 
 

2
ASM (Ensamblador) / leer caracter sin eco con int 0x80
« en: Martes 2 de Julio de 2013, 01:30 »
Hola a todos:

Estoy aprendiendo a programar assembler I8086 en Linux.

Utilizo el compilador nasm, y el linker ld.

Mi problema es que no sé cómo leer un carácter desde el teclado pero "sin eco", y que además no espere un ENTER.

He probado usando

   mov eax,3      ; servicio de lectura
   mov ebx,0      ; descriptor del teclado
   mov ecx,tecla ; la variable receptora
   mov edx,1      ; cantidad de bytes a leer
   int 0x80         ; llamada al kernel

pero no sólo me muestra la tecla apretada, sino que además espera un ENTER.  :fire:

He leído todo el listado de los servicios de la int 0x80, y la verdad es que no entiendo nada. 

¿existe alguna forma de leer sólo un carácter del buffer sin esperar nada más?  :ayuda:

Desde ya les agradezco su atención, y les mando un saludo fraternal.

Rubén.


3
Hola a todos:

Recientemente publiqué una pregunta acerca de comunicar dos notebooks con lxde, ahora, que ya solucioné el problema, quiero hacer una distro a medida.

Para ello probé con Garfio de Tuquito, pero si bien crea el Live CD, cuando este arranca, no instala.

Ahora estoy probando con UCK, anda todo bien hasta el momento de generar el .iso, ahí es cuando tira el mensaje de error

"Unable to identify Ubuntu distro codename"

¿Alguien puede ayudarme con esto?

Aclaro que Freezilla no me sirve porque hasta donde yo sé, no genera distros, sino que hace imágenes de particiones al estilo del Norton Ghost.

Desde ya les agradezco el hecho de leer mi mensaje.

Un abrazo para todos.
Y buen año.    : :suerte:


4
GNU/Linux / No puedo ver otra máquina con GIVER
« en: Jueves 29 de Diciembre de 2011, 22:30 »
Hola a todos:

Estoy intentando conectar 2 notebooks (una Toshiba Satélite y una Olivetti Olibook) para compartir carpetas.

En ambas tengo instalado Tuquito 5 - basado en Ubuntu 11.04.

La única diferencia es que la Olibook es una máquina antigua y por eso estoy intentando utilizar XFCE en lugar de GNOME.

El problema es que no encuentro la forma de compartir una carpeta en este entorno.

Por ese motivo, decidí usar GIVER.

Pero cuando ejecuto Giver en ambas máquinas, la Toshiba ve al usuario de la Olibook, pero no sucede lo mismo desde la Olibook.

¿Alguien tiene alguna idea de cómo agregar el usuario de la Toshiba en el Giver de la Olibook?

Desde ya muchas gracias por la ayuda que puedan darme.

Saludos

5
GNU/Linux / Problema con Kolourpaint en Ubuntu 10.4.1
« en: Viernes 17 de Septiembre de 2010, 13:53 »
Hola a tod@s:

Soy relativamente en GNU/Linux, utilizo Ubuntu. En estos momentos tengo instalada la versión Lucid Linx 10.4.1, ya que con la 10.4 tuve algunos problemitas con Gnome.

Hasta ahora funciona todo bastante bien, y desde que me pasé de Windows, estoy tratando de reemplazar todas las aplicaciones que usaba por equivalentes libres.

En estos momentos tengo problemas con Kolourpaint4. Cuando lo instalé usando Synaptic, me encontré con 2 novedades desagradables para mi:

1) El panel de herramientas laterales no tiene iconos sino sólo texto, y no encuentro la forma de configurarlo.
2) No tiene la posibilidad de usar el "transparente", que personalmente uso bastante.

a) Busqué en Internet soluciones, pero hasta ahora no di con ninguna.
b) Bajé paquetes e intenté instalarlos y siempre tienen conflictos.
c) Por último traté de desinstalarlo completamente, e instalarlo nuevamente, pero a partir de ese momento, figura instalado, pero cuando lo ejecuto, no pasa nada, ni siquiera intenta arrancar.

Estimad@s, les estaré muy agradecido si algun@ me puede dar una mano con esto.  : :brickwall:

Saludos.

Páginas: [1]