• Viernes 29 de Marzo de 2024, 12:00

Autor Tema:  ASM, ¿Por qué depende del sistema operativo?  (Leído 2402 veces)

pantalaimon

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
ASM, ¿Por qué depende del sistema operativo?
« en: Jueves 10 de Septiembre de 2009, 23:05 »
0
Buenas, no puedo ni autodenominarme iniciado en el tema del lenguaje ensamblador. Pero de las pocas cosas que he leído me reconcome una duda. A ver si me la podríais solucionar.

En principio el lenguaje ensamblador es un lenguaje que traduce ciertas intrucciones binarias a mnemotécnicos para así facilitar nuestra comprensión. Cierta CPU entiende ciertos código binarios de una manera y nunca de otra. Entonces, ¿por qué el código ensamblador depende muchas veces del SO?. ¿Y en el caso que no hubiera SO sobre el que programar cómo sería el lenguaje?

Me parece todo muy extraño.

Un saludo!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: ASM, ¿Por qué depende del sistema operativo?
« Respuesta #1 en: Viernes 11 de Septiembre de 2009, 00:59 »
0
El lenguaje es siempre el mismo, un S.O. expone una serie de servicios mediante una interfaz determinada y en los S.O.s modernos existen al menos dos niveles de privilegio y en el que se ejecuta el codigo de los programas (modo Usuario) no es posible acceder al hardware, por lo tanto usar los servicios del S.O. es imprescindible. En S.O.s antiguos como MS-DOS se puede usar la BIOS o acceder al hardware directamente mediante in's y out's.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

pantalaimon

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: ASM, ¿Por qué depende del sistema operativo?
« Respuesta #2 en: Viernes 11 de Septiembre de 2009, 01:34 »
0
Ahora no se si estoy en lo cierto. Pero creo recordar que, por ejemplo, para escribir algo en la pantalla no era lo mismo con Linux que con Windows. ¿Esto sería por qué el código escrito sería para modo Usuario?

Ahora me parece muy extraño todo, pues si realmente cuando escribes en ensamblador para modo usuario no lo transforma directamente a binario sino que lo traduce a funciones del sistema que estas a su vez estan escritas quizá en lenguaje ensamblador...

Entonces realmente si escribes ensamblador en modo usuario no tendrías el control del hardware... Incluso quizá  sería más eficiente programar con las funciones del sistema que con lenguaje ensamblador. ¿No? (Para modo usuario, que quede claro)

Un saludo!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: ASM, ¿Por qué depende del sistema operativo?
« Respuesta #3 en: Viernes 11 de Septiembre de 2009, 08:38 »
0
A excepcion de los modulos de modo Kernel (normalmente llamados drivers) y el propio S.O. todo el resto del codigo trabaja en modo Usuario, eso incluye a todos los programas y servicios/demonios. La interfaz de los servicios de Windows y Linux son diferentes (tienen diferentes numeros, diferentes parametros, etc.), el codigo siempre sera ensamblador, por ejemplo en Windows existe la interrupcion 2Eh y en Linux la 80h, cuando llamas a la interrupcion el S.O. la maneja y llama al servicio correspondiente que ya esta cargado en memoria. Es la misma logica (con otros detalles claro) que cuando haces un jmp o un call.

Siempre es codigo assembly, en cualquier lenguaje que uses, de alto o bajo nivel finalmente terminara llamando al S.O., en assembly podras ver detalles de bajo nivel como el pasaje de parametros y en C no por ejemplo:

push 5
call Sleep

Sleep(5);

Tampoco podes tener el control con lenguajes de alto nivel, es una cuestion de proteccion del S.O. unicamente.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.