Páginas: [1]
|
 |
|
Autor
|
Tema: Instrucciones en Assembler (Leído 976 veces)
|
Stacker
Desconectado
Mensajes: 62
|
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)  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
|
El jmp vale para saltar (jump) por ejemplo: 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 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
Mensajes: 1.279
Assembly (x86/x64), C/C++, Kernel Mode (WDM/WDF)
|
pero no consigo averiguar como funciona por ejemplo un JMP JMP 04h = (E901FF)  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.htmSiendo 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  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.htmhttp://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
Mensajes: 62
|
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
Mensajes: 4
|
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
Mensajes: 62
|
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]
|
|
|
|