Aunque a muchos os suene a chino eso del Ensamblador, si queréis entender el lenguage maquina.
Os debería de ser algo familiar.
Aquí solo os definiré la función de los registros, el IP y las banderas(flags).
Direccionamiento de Memoria: Dependiendo del modelo, el procesador puede accesar uno o mas bytes de memoria a la vez. El sistema almacena en memoria estos bytes en secuencia inversa de bytes. |
registro |
04 |
01 |
memoria |
01 |
04 |
El procesador espera que los datos numéricos en la memoria estén en secuencia inversa de bytes y los procesa de acuerdo con esto. Cuando el procesador recupera la palabra de la memoria, otra vez invierte los bytes, restableciéndolos de manera correcta en el registro como 0401H. Por lo que es importante que tengáis en cuenta esto a la hora de modificar datos en los ejecutables. Registros Son catorce, todos de 16 bits (una palabra). Indica desbordamiento de un bit de orden alto (mas a la izquierda) despues de una operación aritmética. DF (dirección). Designa la dirección hacia la izquierda o derecha para mover o comparar cadenas de caracteres. IF (interrupción). Indica que una interrupción externa, como la entrada desde el teclado, sea procesada o ignorada. TF (trampa). Permite la operación del procesador en modo de un paso. (DEBUG). SF (signo). Contiene el signo resultante de una operación aritmetica (0 = positivo y 1 = negativo). ZF (cero). Indica el resultado de una operación aritmetica (0 = diferente de cero y 1 = igual a cero). |
Aunque parezca un concesionario de la Citroen tanto AX, BX.
Me fue muy útil saber como se codificaban en código máquina mis
propias instrucciones, para poder parchear con elegancia los ejecutables.
código w |
mod reg r/m |
des |
val |
El código de la operación aparece en el primer byte. Es el único que existe siempre. Los demás campos pueden aparecer o no, dependiendo del tipo de instrucción. Los operandos de la instrucción se reflejan en el byte "mod reg r/m". Un operando se especifica mediante "mod" y "r/m". El operando puede ser un registro o una dirección de memoria. El otro operando se especifica mediante"reg". El operando debe ser un registro. El campo "des" es el componente desplazamiento de una dirección de memoria. Puede ser uno o dos bytes. Si ocupa dos bytes, el byte menos significativo se almacena primero. El campo "val" es un valor inmediato. Puede ocupar uno o dos bytes. Como en el caso anterior, si ocupa dos bytes, el byte menos significativo se almacena primero. Los campos que aparecen en la codificación de una instrucción ensamblador son: w = bit que indica la longitud de los operandos. Aparece dentro del byte de código. 0 - byte. 1 - palabra. d = un bit que indica el destino. Aparece también dentro del byte de código. 0 - el operando destino se especifica mediante los campos "mod" y "r/m". 1 - el operando destino se especifica mediante el campo "reg". reg = dos o tres bits que indican el tipo de registro que se va a utilizar como operando.
|
Continuara......