Quieres empezar en ASM? Entra aqui! (FAQ ASM)

Iniciado por ProcessKill, Febrero 24, 2010, 03:57:25 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Febrero 24, 2010, 03:57:25 PM Ultima modificación: Mayo 01, 2014, 08:51:18 AM por Expermicid

FAQ acerca del ASM by Shadow


P: ¿Que es "ASM"?
R: Es la abreviatura de lenguaje "assembler" o "ensamblador" en espa?ol.

P: ¿Que es entonces el lenguaje "ensamblador"?
R: Vistos a muy bajo nivel, los microprocesadores procesan exclusivamente se?ales electr?nicas binarias. Dar una instrucci?n a un microprocesador supone en realidad enviar series de unos y ceros espaciadas en el tiempo de una forma determinada.
Esta secuencia de se?ales se denomina c?digo m?quina. El c?digo representa normalmente datos y n?meros e instrucciones para manipularlos.
Un modo m?s f?cil de comprender el c?digo m?quina es dando a cada instrucci?n un mnem?nico, como por ejemplo CMP, ADD o JMP.
Esta abstracci?n da como resultado el ensamblador, un lenguaje de muy bajo nivel que es espec?fico de cada microprocesador.?

P: ¿Que puedo programar en este lenguaje?
R: Simple, todo lo que puedes ver digitalizado por un monitor.

P: ¿Que necesito para aprender a programar en ASM?
R: Descartando lo obvio, un cerebro con IQ de mas 81, ser incha del RMFC y ganas de aprender

P: ¿Tiene que ver ASM que esos 0s y 1s de la ciencia ficcion de los "juackers"?
R: Dejame explicarlo asi:
En la pregunta #2 vimos que "los microprocesadores procesan exclusivamente se?ales electr?nicas binarias". Veamos la instruccion "10010000":
CitarBinario (lo que procesa el micro):                                                10010000
   Hexadecimal (representacion de la instruccion en otro sistema de numeracion):           90
   Mnemonico (representacion o "comando" de ensamblador):                                 NOP
   Uso:                                                No hace nada, es una instruccion nula.
P: ¿Como puedo practicar o hacer programas en ASM?
R: Puedes bajar un compilador. Entre los mas comunes estan: TASM (Turbo Asemmbler de Borland), MASM (Macro Assembler de Microsoft) y el RadASM.

P: ¿Como se ve un programa en ASM para compilar?
R: Mirandolo (XD).

En 16 bits:
Código: asm
.MODEL SMALL ; Determinamos el modelo de memoria
.STACK ; Definimos el ?rea de pila
.DATA
MENS DB "HOLA MUNDO!.$" ; Especificamos la cadena de texto a mostrar
.CODE ; Inicio del c?digo
INI: ; Etiqueta de inicio
MOV AX,@DATA ; Permite tener acceso a los datos
MOV DS,AX ; a trav?s de el registro DS
MOV DX,OFFSET MENS ; Prepara para desplegar el mensaje
MOV AH,9 ; Llama al servicio 9
INT 21H ; de la int 21h para desplegar el texto
MOV AH,4CH ; Llama al servicio 4Ch
INT 21H ; de la int 21h para terminar
END INI ; Cierra la etiqueta de inicio

En 32 bits (para MASM):
    .486                               
    .model flat, stdcall             
    option casemap :none           
    include \masm32\include\windows.inc     
    include \masm32\include\masm32.inc
    include \masm32\include\gdi32.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    includelib \masm32\lib\masm32.lib
    includelib \masm32\lib\gdi32.lib
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    print MACRO arg1:REQ,varname:VARARG   
        invoke StdOut,reparg(arg1)
      IFNB <varname>
        invoke StdOut,chr$(varname)
      ENDIF
    ENDM
    .data
      v0  dd 0
      v1  dd 1
      v2  dd 2
      v3  dd 3
      v4  dd 4
      v5  dd 5
      v6  dd 6
      ary dd v0,v1,v2,v3,v4
          dd v5,v6
    .code       
start:                       
    call main                 
    exit
main proc
    LOCAL cnt   :DWORD     
    push esi
    push edi
    mov cnt, 6             
    mov esi, ary     
  lp:
    mov edi, [esi+2] 
    print str$(esi)       
    print chr$(" = Direccion en memoria",13,10)
    print str$(edi)         
    print chr$("       = contenido",13,10,13,10)
    add esi, 4             
    sub cnt, 1               
    jnz lp                 
    pop edi
    pop esi
    ret
main endp
end start


P: ¿Porque la diferencia?
R: Un micro (microprocesador) de 16 bits soporta eso mismo, 16 bits de informacion por cada operacion que realize; uno de 32 soporta, 32 bits.

P: ¿Que otras diferencias hay entre estos 2?
R: Programar para 32 bits nos permite usar o "llamar" APIs de librerias externas como "kernel32.dll", no permite manejar la interrupciones como lo hace un programa para 16 bits; para 32 bits, los registros ("variables"; espacios de memoria reservados para guardar informacion especifica en el procesador) al aumentar su tama?o, cambian de sintaxis (PE.: de "ax" a "eax") aunque tambien se pueden seguir usando los registros de 16 bits; entre otras diferencias.

P: En la pregunta #5 mencionaste otros representaciones de los mnemonicos (binario y hexadecimal). ?Tengo que saber estas conversiones o conocer estos sistemas de numeracion?.
R: Tecnicamente, no. Pero, en la practica si (por lo menos tienes que saber convertir hexadecimal a decimal)

P: ¿Que ventajas tiene la programacion en ASM?
R: La principal ventaja es que permite crear programas muy r?pidos y livianos (Un programa hecho en C++ que imprima la cadena "Hola Mundo!." pesa unos 15.663 bytes, cuando uno hecho en ASM, que realize lo mismo y compilado con TASM, pesa 541 bytes, asiq estariamos hablando de
unas 29 veces mas peque?o).

P: ¿Y desventajas?
R: A menudo es dificil de aprender.

P: ¿Por que?
R: Los programadores de lenguajes de alto nivel no estan acostumbrados a la abstraccion, a la "limitacion" de funciones del ASM y a trabajar hablando direcctamente con el procesador, esto quiere decir que si la persona que intenta aprender ASM, no conoce el funcionamiento de un ordenador a nivel de memoria, procesador y hardware en general, le sera mucho mas dificil que al que ya conoce esto mas a fondo.

P: ¿Esto quiere decir que tengo que tener algun tipo de conocimientos sobre este tema (funcionamiento del ordenador)?
R: Si.

P: ¿De que me sirve saber ASM en nuestros dias? Por algo se inventaron los lenguajes de alto nivel.
R: Como dije, la principal ventaja es que permite crear programas muy r?pidos y livianos. Otro de los usos del ASM en nuestro dias es la llamada "Ingenieria Inversa" o "Cracking".

P: ¿"Ingenieria Inversa"?
R: "Arte del destripado"; rama de "hacking" o "pirateria informatica" que se encarga de romper cualquier tipo de seguridad que posea un programa comercial usando metodos de desensamblado y reconstruccion, comprometiendo asi cualquier tipo de cifrado o proteccion anti-"crackeo", tambien llamado por los coders: "debug", para poder disfrutar del limite de sus funciones o simplemente para modificar a gusto su funcionamiento.

P: ¿Ahora, que hago?
R: Busca un tuto basico o de introduccion que sientas que entiendas sobre este lenguaje y empieza a leer y si tienes alguna duda, ES FATAL que te quedes con ella, PREGUNTA, PREGUNTA, PREGUNTA, APRENDE, APRENDE, APRENDE, esa es la ley... Luego transmite lo que sabes!






Espero que les sirva de algo en su introduccion en este mundo!...



bytes ;)

Leido.. Creo qe me falta mucho por aprender.. Pero lo intentare :)

o.o Me has aclarado muchas dudas! Me voy a poner a estudiar ASM en cuanto acabe el C!
Salu2,
3hy!
Si tienes cualquier duda, pregunta en el foro!


mmm  :o (se me incho un ojo) aun asi lo veo un poco complicado... espero algun dia entender un poco mas ese lenguaje xD... y a ver si nos hacemos algun programilla en eso ;) Saludos y thanks

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Acepta con humildad y aprecio que en la vida la muerte es inevitable y amarás ésta, adorando la muerte

Abril 15, 2013, 06:19:16 PM #4 Ultima modificación: Abril 15, 2013, 06:24:53 PM por yoyomismo
¿Esto son las f.a.q.'s?  :-\

CitarP: ¿Como puedo practicar o hacer programas en ASM?
R: Puedes bajar un compilador. Entre los mas comunes estan: TASM (Turbo Asemmbler de Borland), MASM (Macro Assembler de Microsoft) y el RadASM.

xDDDD no se compila nada, se ensambla y linkea. TASM trabaja a 16 bit, y MASM es Assembly de alto nivel. RADASM es un IDE, por decir una linea al azar

Y 3 años desactualizada

En fin, muy corta mi visita por esta comunidad

Un saludo
CPH: Cibergolen
Otros: Yo-Mismo

Visitame en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
¿Esto son las f.a.q.'s?  :-\

CitarP: ¿Como puedo practicar o hacer programas en ASM?
R: Puedes bajar un compilador. Entre los mas comunes estan: TASM (Turbo Asemmbler de Borland), MASM (Macro Assembler de Microsoft) y el RadASM.

xDDDD no se compila nada, se ensambla y linkea. TASM trabaja a 16 bit, y MASM es Assembly de alto nivel. RADASM es un IDE, por decir una linea al azar

Y 3 años desactualizada

En fin, muy corta mi visita por esta comunidad

Un saludo

Adiós.