El lenguaje Ensamblador - Departamento de Computación e

Anuncio
Facultad de Ciencias de la Ingeniería
Escuela de Ingeniería Civil Informática
Arquitectura de Computadores II
El lenguaje Ensamblador
Es un tipo de lenguaje de bajo nivel utilizado para escribir programas de
computadora, y constituye la representación más directa del código máquina
específico para cada arquitectura de computadoras legible por un programador.
Fue usado ampliamente en el pasado para el desarrollo de software,
pero actualmente sólo se utiliza en contadas ocasiones, especialmente cuando
se requiere la manipulación directa del hardware o se pretenden rendimientos
inusuales de los equipos.
Lenguaje
Un programa escrito en lenguaje ensamblador consiste en una serie de
instrucciones que corresponden al flujo de órdenes ejecutables que pueden ser
cargadas en la memoria de una computadora. Por ejemplo, un procesador x86
puede ejecutar la siguiente instrucción binaria como se expresa en código
máquina:
1
Binario: 10110000 01100001 (Hexadecimal: 0xb061)
La representación equivalente en ensamblador es más fácil de recordar:
1
mov al, 061h
Esta instrucción significa:
1
Mueva el valor hexadecimal 61 (97 decimal) al registro "al".
El mnemónico "mov" es un código de operación u "opcode" , elegido por los
diseñadores de la colección de instrucciones para abreviar "move" (mover).- El
opcode es seguido por una lista de argumentos o parámetros, completando
una instrucción de ensamblador típica.
Las operaciones disponibles en la mayoría de los conjuntos de
instrucciones incluye:
1
2
mover
o
llenar un registro con un valor constante
o
mover datos de una posición de memoria a un registro o
viceversa
o
escribir y leer datos de dispositivos
computar
o
sumar, restar, multiplicar o dividir los valores de dos registros,
colocando el resultado en uno de ellos on en otro registro
Los registros de la familia 80x86 sobre los que se realizaran las operaciones son:
AX
BX
CX
DX
SI
DI
BP
SP
IP
CS
DS
ES
SS
Acumulator Register
Base Index Register
Counter Register
Data Register
Source Index
Destination Index
Base Pointer
Stack Pointer
Instruction Pointer
Current Segment
Data Segment
Extra Segment
Stack Segment
Acumulador
Índice Base
Contador
Dato
Índice de Origen
Índice de Destino
Puntero Base
Puntero de Pila
Puntero de Instrucciones
Segmento Actual del Programa
Segmento de Datos
Segmento Extra
Segmento de Pil
Flags: Es un registro especial en el cual se guardan los resultados de la última
operación matemática o de comparación. No se guardan los resultados
numéricos, solo los de estado, es decir.
CF
PF
AF
ZF
SF
TF
IF
DF
OF
IOPL
NT
RF
VM
Carry Flag
Parity Flag
Auxiliary Flag
Zero Flag
Sign Flag
Trap Flag
Interrupt Flag
Direction Flag
Overflow Flag
I/O Privilege Level
Nested Task Flag
Resume Flag
Virtual Mode Flag
Bandera de por Acarreo
Bandera de por Paridad
Bandera Auxiliar
Bandera por Cero
Bandera de Signo
Bandera de Paso Simple
Bandera de Interrupción
Bandera de Dirección
Bandera por Sobre flujo
Solo en 286 o superior
Solo en 286 o superior
Solo en 386 o superior
Solo en 386 o superior
INSTRUCCIONES ARITMETICAS.· ADC.
Adición con acarreo. Suma los operandos más 1 si está activada la
bandera de acarreo (CF), El resultado lo guarda en el operando destino. Los
operandos deben ser del mismo tipo (byte o palabra).
Afeccta a los flags: OF, SF,ZF,AF,PF,CF
ADC destino,fuente
Lleva a cabo la suma de dos operandos y suma una al resultado en caso de
que la bandera CF esté activada, esto es, en caso de que exista acarreo.
El resultado se guarda en el operando destino.
·ADD.
Adición de los operandos. El resultado lo guarda en el operando destino.
Los operandos deben ser del mismo tipo (byte, palabra).
Afecta alos flags: OF, SF, ZF, AF, PF, CF
ADD destino,fuente
·SUB.
Resta el operando fuente del operando destino y el resultado lo guarda
en el operando destino. Los operandos deben ser del mismo tipo (byte,
palabra).
Afecta a los flags: OF, SF, ZF, AF, PF, CF
SUB destino,fuente
· SBB.
Resta el operando fuente del operando destino teniendo en cuenta el
acarreo, y el resultado lo guarda en el operando destino. Destino=destino(fuente+CF).
Los operandos deben ser del mismo tipo (byte, palabra).
Afecta a los flags: OF, SF, ZF, AF, PF, CF
SBB destino,fuente
- INC.
Incrementa el operando. La instrucción suma uno al operando destino y
guarda el resultado en el mismo operando destino.
Afecta a los flags: OF, SF, ZF, AF, PF
INC destino
· DEC.
Decrementa el operando. La instrucción resta uno al operando destino y
guarda el resultado en el mismo operando destino.
Afecta a los flags: OF, SF, ZF, AF, PF
DEC destino
· CMP.
Compara dos operandos. Resta fuente de destino, pero no almacena el
resultado. Los operandos quedan intactos pero las banderas se actualizan
pudiéndose consultar a continuación mediante una instrucción de bifurcación
condicional.
Los operandos pueden ser del tipo byte o palabra pero siempre del mismo tipo
los dos.
Afecta a los flags: OF, SF, ZF, AF, AF, PF, CF
CMP destino, fuente
Si ZF=1 los operandos son iguales.
Si CF=0 con operandos sin signo opernado1>=operando 2, no ha habido
acarreo.
Si CF=1 con operandos sin signo operando 1< operando 2, ha habido acarreo.
Si OF=SF con operandos con signo
desbordamiento del bit de signo.
Si OF<>SF con operandos con signo
operando 1 >= operando 2,
operando 1< operando 2.
INSTRUCCIONES CONDICIONALES.· Jxx.
Salta si se cumple la condición. La distancia de la etiqueta está limitada
por –128 y 127 bytes.
Jxx desplazamiento
El desplazamiento (valor con signo de 8 bits) debe estar comprendido entre –
128 y 127 bytes desde la instrucción, que es el valor de desplazamiento
máximo con signo que se puede representar con 8 bits.
Transfiere el control a la instrucción “IP+Desplazamiento” si se cumple la
condición especificada por la instrucción.
No afecta a las banderas.
· Tratamiento de datos sin signo.
En esas instrucciones no se considera el signo, por lo que coge el
menor independientemente del signo que tenga. No afecta a las banderas.
INSTRUCCIÓN
JB
JNAE
JC
JBE
JNA
JE
JZ
JNC
JAE
JNB
JA
JNE
JNZ
JCXZ
DESCRIPCIÓN
Salta si inferior
Salta si no superior o igual
Salta si hay carry
Salta si inferior o igual
Saltar si no superior
Salta si es igual
Salta si es 0
Salta si no hay carry
Salta si superior o igual
Salta si no inferior
Salta si superior
Salta si no igual
Salta si no cero
Salta si CX es 0
CONDICIÓN
CF=1
CF=1
CF=1
CF=1 ó ZF=1
CF=1 ó ZF=1
ZF=1
ZF=1
CF=0
CF=0
CF=0
CF=0 y ZF=0
ZF=0
ZF=0
CX=0
· Tratamiento de datos con signo.
INSTRUCCIÓN
JL
JNGE
JLE
JNG
JG
JNLE
JGE
JNL
DESCRIPCIÓN
Salta si es menor
Salta si no es mayor ni igual
Salta si menor o igual
Salta si no mayor
Salta si mayor
Salta si no menor o igual
Salta si mayor o igual
Salta si no menor
CONDICIÓN
SF<>OF
SF<>OF
ZF=1 ó SF<>OF
ZF=1 ó SF<>OF
ZF=0 ó SF<>OF
ZF=0 ó SF<>OF
SF=OF
SF=OF
Descargar