elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
06 Septiembre 2008, 01:06  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General (Moderadores: Hendriҳ, E0N)
| | |-+  Instrucciones en Assembler
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Instrucciones en Assembler  (Leído 976 veces)
Stacker

Desconectado Desconectado

Mensajes: 62



Ver Perfil
Instrucciones en Assembler
« en: 19 Marzo 2008, 11:20 »

Hola. No llevo mucho tiempo con ensamblador (uso TASM aunque empezé con el debugger) y se me escapan algunos detalles como éstos:

Después de pasar pequeños ejecutables por un editor hexadecimal no tengo ningun problema con equivalencias del tipo:

MOV AH,9h = B4h,09h (B409)
MOV AX,1A2Bh = B8h,2Bh,1Ah (B82B1A)

pero no consigo averiguar como funciona por ejemplo un JMP

JMP 04h = (E901FF)  :huh:
JMP 1234h = (E93111)



Por otro lado he leido (y comprobado) que JMP 0 es lo mismo que INT 20, ¿son sustituibles todas las interrupciones por instrucciones?
Me gustaria aprender esto de verdad, por lo que agradeceria tanto la explicación como si alguien conoce algún manual de assembler que explique estos detalles.

Gracias

En línea
E0N
Lab &
Moderador
*****
Desconectado Desconectado

Mensajes: 2.608



Ver Perfil WWW
Re: Instrucciones en Assembler
« Respuesta #1 en: 19 Marzo 2008, 12:21 »

El jmp vale para saltar (jump) por ejemplo:

Código
include 'H:\archivos de programa\fasm\include\win32ax.inc'
 
.code
start:
       jmp Mensage
       Seguir:
       invoke MessageBox, 0, 'Vamos a salir', 'xD', 0
       jmp Salir
 
 
       Mensage:
       invoke MessageBox, 0, 'He saltado', 'xD', 0
       jmp Seguir
 
       Salir:
       invoke ExitProcess, 0
.end start

Ensamblado con fasm.

Luego tienes distintas variables de saltos condicionales que te pueden ser utiles para hacer bucles o lo ekivalente a un if de un lenguaje de alto nivel, como je, jne, jg...

Buscalos por google, q hay bastante info

Citar
Por otro lado he leido (y comprobado) que JMP 0 es lo mismo que INT 20, ¿son sustituibles todas las interrupciones por instrucciones?
Me gustaria aprender esto de verdad, por lo que agradeceria tanto la explicación como si alguien conoce algún manual de assembler que explique estos detalles.

Pues yo sobre las instrucciones ni idea, se asm para 32 bits, y en 32 bits un jmp 0 hace q el programa pete (como es lógico) a ver si en la interrupciones te puede ayudar otro, por q yo no

Saludos

EDIT: Mirate esto: http://www.jegerlehner.ch/intel/opcode_es.html
En línea
Eternal Idol N&P

Desconectado Desconectado

Mensajes: 1.279


Assembly (x86/x64), C/C++, Kernel Mode (WDM/WDF)


Ver Perfil WWW
Re: Instrucciones en Assembler
« Respuesta #2 en: 19 Marzo 2008, 12:51 »

pero no consigo averiguar como funciona por ejemplo un JMP

JMP 04h = (E901FF)  :huh:
JMP 1234h = (E93111)

No es algo que necesites saber para entender el lenguaje assembly (para eso esta el assembler - programa que ensambla -) pero la clave esta en que ciertos tipos de jmp se basa en la direccion de la instruccion.

http://www.itis.mn.it/linux/quarta/x86/jmp.htm

Siendo nuestro objetivo la direccion 026h:
0010 EB14
0017 EB0D

Son jmp 026h ambos. IP (una vez ejecutada la instruccion) + rel. 012h+14h=026h y 019h+0Dh=026h tambien. Los saltos para tras implican overflow  ;D

Entonces seguimos con el jmp 026h:
0026 EBFE
002E EBF6

Por supuesto usando solo un byte 028h+0FEh=026h y 030h+0F6h=026h. Tu ejemplo entonces deberia ser:

JMP 04h
0100 E901FF
0103h+0FF01h=04h

JMP 1234h
0100 E93111

0103h+01131h=01234h.


Por otro lado he leido (y comprobado) que JMP 0 es lo mismo que INT 20, ¿son sustituibles todas las interrupciones por instrucciones?
Me gustaria aprender esto de verdad, por lo que agradeceria tanto la explicación como si alguien conoce algún manual de assembler que explique estos detalles.

No lo son ni de lejos.

http://www.ctyme.com/intr/rb-2471.htm
http://www.ctyme.com/intr/int.htm
En línea

be closely tied to
(v.) = estar estrechamente ligado a
Ex: He had been wrapped up in a new project that was closely tied to the company's new growth.

"La economia nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de este"
Juan Domingo Peron
Stacker

Desconectado Desconectado

Mensajes: 62



Ver Perfil
Re: Instrucciones en Assembler
« Respuesta #3 en: 19 Marzo 2008, 13:50 »

Ya me ha quedado más claro. Era más por entender como funciona la máquina y las bases de assembly que assembly en sí.  :)

Muchas gracias.

Saludos

En línea
ASMViCIO

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Instrucciones en Assembler
« Respuesta #4 en: 01 Abril 2008, 06:57 »

Hola stacker, la instruccion JMP es una instruccion de salto incondicional, y su opcode es 0e9h en exa.. los digitos que sigen son la cantidad de bytes que tendra de longitud ese salto,  por ejemplo jmp quit  es un salto a la direccion de memoria asignada a esa etiqueta en la codificacion del programa y que el enlazador/linkador le asignara en el momento de ensamblado, obviamente "quit" sera reemplazado por un numero hexad, esto es para que losprogramadores no se enrollen con las direcciones de memoria.
Respecto al jmp 0 , le estas indicando al procesador que salte a ejecutar la instruccion que esta ubicada en ese lugar de memoria, en ensamblador 16 bits (cuya memoria es dividida en segmentos de 64k y la direccion relativa dentro de ese segmrnto sera conocida como offset), se encuentra en ese lugar un salto a la direccion donde reside la interrupcion 20h, que es la de terminacion de programa (obsoleta) que cede el control al S.O..espero haber sido util... saludos
En línea

solo soy responsable de lo que hago ...no de lo que siento
Stacker

Desconectado Desconectado

Mensajes: 62



Ver Perfil
Re: Instrucciones en Assembler
« Respuesta #5 en: 01 Abril 2008, 22:02 »

Hola, gracias por tu respuesta, especialmente en lo de la interrupción 20h. Era por curiosidad y bueno puede resultar util.  :)

Saludos
En línea
Páginas: [1] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.5 | SMF © 2006-2008, Simple Machines LLC