Foros del Web » Programación para mayores de 30 ;) » Programación General »

ensamblador en linux

Estas en el tema de ensamblador en linux en el foro de Programación General en Foros del Web. Hola Estoy programando en ensamblador en linux, con nasm y con fasm, la verdad estoy haciendo pruebas, necesito implementar la interrupcion 10h, para trabajar con ...
  #1 (permalink)  
Antiguo 29/12/2009, 12:11
 
Fecha de Ingreso: diciembre-2009
Mensajes: 2
Antigüedad: 14 años, 5 meses
Puntos: 0
Pregunta ensamblador en linux

Hola
Estoy programando en ensamblador en linux, con nasm y con fasm, la verdad estoy haciendo pruebas, necesito implementar la interrupcion 10h, para trabajar con graficos, modo texto o video, en windows esta interrupcion no em da problemas pero en linux si, ya q es más seguro.
Me han dicho q talvez podria hacerlo utilizando syscalls, pero no entiendo como usarlas y cual sería la q debería de utilizar.
Tengo como restriccion no utilizar bibliotecas externas, como glut o gtk, tiene q ser el ensamblador mas puro q se pueda.

Grcias
  #2 (permalink)  
Antiguo 30/12/2009, 02:47
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: ensamblador en linux

Lo dudo muchisimo, en Windows (asumo que estamos hablando de una version de la gama NT) estaras trabajando con codigo de 16 bits de MS-DOS y este es EMULADO, de otra manera tu codigo es exactamente igual de "seguro". Ambos son S.O. modernos que trabajan en modo protegido/long (32,64 bits) y donde no podes acceder directamente a las interrupciones de la BIOS.

Hasta cierto punto trabajar en modo texto en Linux es simple y podes usar syscalls:

A grosso modo en Linux se pone en eax el numero del servicio y los parametros van en ebx, ecx, edx, esi, edi y ebp, despues se llama a la interrupcion 0x80 (int 0x80, aca hay mas informacion aunque un poco subjetiva).

En /usr/include/asm/ unistd.h/unistd_32.h/unistd_64.h encontraras los numeros de los servicios.

Si solo necesitas escribir/leer caracteres lo haras con los servicios (syscalls) __NR_read y __NR_write, usando respectivamente 0 (stdin) y 1 (stdout) como primer parametro. Ver parametros:
http://linux.die.net/man/2/read
http://linux.die.net/man/2/write

Para los atributos necesitaras un par de servicios mas: __NR_open, __NR_close y probablemente __NR_lseek. Asi podras abrir /dev/vcsa (vcsaN idem), aunque creo que funciona solo con terminales reales (no emulados por X) y puede que necesites ser root segun el caso.

http://linux.die.net/man/2/open

Extracto de ejemplo (NASM):

Código:
%defne __NR_open 5 ;esto depende del archivo unistd.h
%define O_RDONLY 0 ;esto depende del archivo /usr/include/asm/fcntl.h

section .data
Screen db '/dev/vcsa', 0

section .text
mov eax, __NR_open
mov ebx, Screen
mov ecx, O_RDONLY
mov edx, 0
int 80h
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 19/04/2010, 18:53
 
Fecha de Ingreso: abril-2010
Mensajes: 1
Antigüedad: 14 años
Puntos: 0
Respuesta: ensamblador en linux

Hola, estoy muy interesada en programar el modo gráfico usando las syscall en ensamblador
¿Pudieran facilitarme los servicios de la INt 80H que se utilizan en este caso?
  #4 (permalink)  
Antiguo 24/10/2010, 19:24
DVM
 
Fecha de Ingreso: octubre-2010
Mensajes: 2
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: ensamblador en linux

Hola Naoy:
¿Alguien te facilitó los servicios (con sus descripciones) de la Int 80h?

De ser así te agradecería si los publicaras o me los hicieras llegar de alguna forma.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:29.