Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/12/2009, 02:47
Avatar de Eternal Idol
Eternal Idol
 
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
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