Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: theluigy13etv en 13 Marzo 2012, 20:50 pm



Título: ¿Qué quiere decir "...permite al programador abstraerse de la capa hardware"?
Publicado por: theluigy13etv en 13 Marzo 2012, 20:50 pm
Citar
El lenguaje C es fruto de un lenguaje de programación anterior, el lenguaje B, desarrollado por Ken Thompson, en los Laboratorios Bell en 1970, con la idea de recodificar el sistema operativo UNIX que, hasta esa fecha, se programaba directamente en ensamblador, con el inconveniente de estar vinculado a máquinas concretas (según el juego de instrucciones de cada máquina). Por tanto, se hacía necesario un lenguaje que permitiese al programador abstraerse de la capa hardware y conseguir una mayor portabilidad del código, algo que se realizó en B (basándose en el BCPL de Martin Richard de 1967).

Siempre, en todos los textos que traten acerca del lenguaje C, encuentro que hacen referencias al lenguaje ensamblador, y de que el lenguaje ensamblador depende de la máquina. ¿Por qué depende de la máquina?...Además que el lenguaje C es portable. ¿Alguien que explique un poco más esto?


Título: Re: ¿Qué quiere decir "...permite al programador abstraerse de la capa hardware"?
Publicado por: nirvguy en 13 Marzo 2012, 23:32 pm
Porque cuando usas assembler utilizas las instrucciones de la arquitectura en la que estás, aunque hay estandares (desde el 8086, si no me equivoco, antes lo que programabas era solo para tu maquina porque todas las arquitecturas eran diferentes). Hablo de arquitectura tanto como hardware (instrucciones que solo sirven en tu micro, si es que las usas), como de plataforma (16, 32,  64 bits, no es lo mismo redireccionar con 16 bits, que con 32, que con 64), asi como tambien de sist op, cada sist operativo tiene sus interrupciones a nivel de software y en cada uno es diferente, por ejemplo para imprimir la pantalla en linux utilizas 0x21 y en windows 0x80. En cambio C es mas portable porque no se vale de esas caracteristicas especificas. Es decir, en C, si compilas un programa que imprime en pantalla, si lo haces en Linux, por ejemplo, gcc usara la interrupcion 0x21. Por otra parte si lo compilas en windows, MinGW usara la interrupcion (0x80, como te habia dicho). Ademas C tiene un sistema de macros que te permite especificar que codigo va para tal sist op, para tal arquitectura, o para 32 o 64 bits. Pero igual todo lenguaje no interpretado termina en codigo máquina.
Espero haberte ayudado y que alguien me corriga si me equivoco.


Título: Re: ¿Qué quiere decir "...permite al programador abstraerse de la capa hardware"?
Publicado por: Eternal Idol en 14 Marzo 2012, 00:21 am
Windows 0x21 y Linux 0x80, igual hace largo rato que Windows usa sysenter/syscall.

theluigy13etv: http://en.wikipedia.org/wiki/Assembly_language