Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Elementos Del Lenguaje
Elementos Del Lenguaje
Lenguaje Ensamblador
Contenido
Pág.
2.1 Instrucciones lineales.
2.2 Saltos.
2.5 Desplazamiento.
Referencias Bibliografícas---------------------------------------------------------------------- 37
Ingeniería en Sistemas Computacionales 3
2.1.1 Movimiento.
MOV (transferencia)
Indicadores: OF DF IF TF SF ZF AF PF CF
DATO1 DATO 2
la instrucción MOV DATO2, DATO1 sería incorrecta. Lo que sí sería correcto sería
utilizar el registro DX, u otro, como puente y hacer:
2.- Tampoco se puede hacer una transferencia directa entre dos registros de
segmento. Por eso, como en el caso anterior, si fuera preciso se utilizaría un
registro como puente.
XCHG (intercambiar)
en donde AUX es una variable auxiliar que hace de puente, o simplemente utilizar:
XCHG AX, BX
Otro ejemplo:
XCHG BL, CH
XCHG MEM_PAL, BX
XLAT (traducción).
DATOS SEGMENT
TABLA DB 2, 3, 5, 8, 16, 23
DATOS ENDS
CODIGO SEGMENT
MOVE BX, OFFSET TABLA ; Inicializa BX con la dirección donde
; comienza la tabla
MOVE AL, 5
XLAT TABLA
CODIGO ENDS
casos más potente que MOV al permitir indicar registros de índice y desplazamiento
para calcular el offset:
OUT (salida)
2.1.2 Pila
Ejemplos: POP AX
POP PEPE
Ejemplo: PUSH CS
Sintaxis: POPF
Indicadores: OF DF IF TF SF ZF AF PF CF
Sintaxis: PUSHF
Ingeniería en Sistemas Computacionales 10
Indicadores: OF DF IF TF SF ZF AF PF CF
2.1.3 Matemáticos
SUMAS
AAA (Ajuste ASCII para la suma).
Sintaxis: AAA
Indicadores: OF DF IF TF SF ZF AF PF CF
ADD (suma)
Sintaxis: DAA
Indicadores: OF DF IF TF SF ZF AF PF CF
Convierte el contenido del registro AL en un par de valores BCD: si los cuatro bits
menos significativos de AL son un número mayor que 9, el indicador AF se pone a 1
y se suma 6 a AL. De igual forma, si los cuatro bits más significativos de AL tras la
operación anterior son un número mayor que 9, el indicador CF se pone a 1 y se
suma 60h a AL.
INC (Incrementar)
Ejemplos: INC AL
INC ES: [DI]
INC SS: [BP+4]
INC WORD PTR CS: [BX+DI+7]
RESTAS
Sintaxis: AAS
Indicadores: OF DF IF TF SF ZF AF PF CF
Resta origen de destino sin retornar ningún resultado. Los operándos quedan
inalterados, paro los indicadores pueden ser consultados mediante instrucciones de
Ingeniería en Sistemas Computacionales 13
bifurcación condicional. Los operándos pueden ser de tipo byte o palabra pero
ambos de la misma dimensión.
Ejemplo: CMP BX, MEM_PAL
CMP CH, CL
Sintaxis: DAS
Indicadores: OF DF IF TF SF ZF AF PF CF
DEC (Decrementar)
Resta una unidad del operando destino. El operando puede ser byte o palabra.
Obsérvese que esta instrucción no modifica el bit de acarreo (CF) y no es posible
detectar un desbordamiento por este procedimiento (utilícese ZF).
Ingeniería en Sistemas Computacionales 14
Ejemplo: DEC AX
DEC MEM_BYTE
NEG (Negación)
Ejemplo: NEG AL
SUB (Resta)
Indicadores: OF DF IF TF SF ZF AF PF CF
MULTIPLICACIONES
Sintaxis: AAM
Indicadores: OF DF IF TF SF ZF AF PF CF
Ejemplo: MUL BL
AAM
Sintaxis: IMUL origen (origen no puede ser operando inmediato en 8086, sí en 286 )
Indicadores: OF DF IF TF SF ZF AF PF CF
Ingeniería en Sistemas Computacionales 16
Ejemplo: IMUL BX
IMUL CH
Desbordamientos
Este alerta con los desbordamientos en las operaciones aritméticas. Ya que un byte
solo permite el uso de un bit de signo y siete de datos (desde -128 hasta +127), una
operación aritmética puede exceder con facilidad la capacidad de un registro de un
byte. Y una suma en el registro AL, que exceda su capacidad puede provocar
resultados inesperados.
Ingeniería en Sistemas Computacionales 17
MUL CL byte AL AX
MUL BX palabra AX DX: AX
MUL EBX palabra doble EAX DX: EAX
BYTE1 DB ?
WORD1 DW ?
DWORD1 DD ?
DIVISIONES
Sintaxis: AAD
Indicadores: OF DF IF TF SF ZF AF PF CF
Ejemplo: AAD
DIV BL
En el ejemplo, tras convertir los dos números BCD no empaquetados (en AX) en un
dividendo válido, la instrucción de dividir genera un resultado correcto.
Ingeniería en Sistemas Computacionales 19
Ejemplo: DIV BL
DIV MEM_PAL
Ejemplo: IDIV BL
IDIV BX
Las operaciones de división básicas son byte entre byte, palabra entre palabra y
palabras dobles entre palabra dobles.
2.1.4 Ajustes
Sintaxis: CBW
Indicadores: OF DF IF TF SF ZF AF PF CF
Copia el bit 7 del registro AL en todos los bits del registro AH, es decir, expande el
signo de AL a AX como paso previo a una operación de 16 bits.
Sintaxis: CWD
Indicadores: OF DF IF TF SF ZF AF PF CF
Expande el signo del registro AX sobre el registro DX, copiando el bit más
significativo de AH en todo DX.
Ingeniería en Sistemas Computacionales 21
2.1.5 Comparación
CMP (Comparación)
Resta origen de destino sin retornar ningún resultado. Los operándos quedan
inalterados, paro los indicadores pueden ser consultados mediante instrucciones de
bifurcación condicional. Los operándos pueden ser de tipo byte o palabra pero
ambos de la misma dimensión.
2.2 Saltos
2.2.1 Incondicional
(EBH)
(a)
(E9H)
(b)
(EAH)
(c)
Salto corto. El salto corto es una instrucción de 2 bytes que permite transferir el
programa a localidades de memoria que están dentro del intervalo de +127 bytes y -
128 bytes de la localidad de memoria después del salto.
Ingeniería en Sistemas Computacionales 23
Salto lejano. El salto lejano permite ir a cualquier localidad de memoria dentro del
intervalo de dirección de 4G de los microprocesadores 80386 y 80486.
2.2.1 Condicional
LOOP (bucle)
.MODEL SMALL
.CODE
ORG 100H
MAIN ENDP
END MAIN
Los operadores lógicos realizan las operaciones lógicas en los bits de una
expresión.
Operador AND. Realiza una conjunción lógica sobre los bits de cada operando.
Ambos operándos son bytes, palabras o palabras dobles, que AND compara bit a
bit. Afecta a las banderas CF, OF, PF, SF y ZF. El formato general es:
Operador NOT. Cambia los bits en cero por bits en uno y viceversa. El operando es
un byte, palabra o palabra doble en un registro o en memoria. El formato general
es:
NOT {registro/memoria}
Operador OR. Realiza una operación de disyuncion sobre los bits de dos
operandos. Ambos operandos son bytes, palabras o palabras dobles, que OR
compara bit a bit. Afecta a las banderas CF, OF, PF, SF y ZF. El formato general
es:
OR {registro/memoria}, {registro, memoria, inmediato}
Operador XOR. Realiza una disyunción excluyente sobre los bits de dos
operándos. Ambos operándos son bytes, palabras o palabras dobles, que XOR
compara bit a bit. Afecta a las banderas CF, OF, PF, SF y ZF. El formato general
es:
XOR {registro/memoria}, {registro, memoria, inmediato}
2.5 Desplazamiento.
2.5.1 Lineal.
Desplaza a la derecha los bits del operando destino el número de bits especificado
en el segundo operando. Los bits de la izquierda se rellenan con el bit de signo del
primer operando. Si el número de bits a desplazar es 1 se puede especificar
directamente, si es mayor se especifica a través de CL.
Desplaza a la derecha los bits del operando destino el número de los bits
especificados en el segundo operando. Los bits de la izquierda se llena con cero. Si
el número de bits a desplazar es 1 se puede especificar directamente en el caso en
que no ocurra se pone el valor en CL:
SHR AX, CL
SHR CL, 1
Ingeniería en Sistemas Computacionales 29
2.5.2 Circular
Rotar a la izquierda los bits del operando destino junto con el indicador de acarreo
CF el número de bits especificado en el segundo operando. Si el número de bits a
desplazar es 1, se puede especificar directamente, en caso contrario el valor debe
cargarse en CL y especificar CL como segundo operando. No es conveniente que
CL sea mayor de 7, en bytes; ó 15, en palabras.
Rotar a la derecha los bits del operando destino junto con el indicador de acarreo
CF el número de bits especificado en el segundo operando. Si el número de bits es
1 se puede especificar directamente; en caso contrario su valor debe cargarse en
CL y especificar CL como segundo operando:
Ingeniería en Sistemas Computacionales 30
Rota a la izquierda los bits del operando destino el número de bits especificado en
el segundo operando, que puede ser 1 ó CL previamente cargado con el valor del
número de veces.
Rota a la derecha los bits del operando destino el número de bits especificado en el
segundo operando. Si el número de bits es 1 se puede poner directamente, en caso
contrario debe ponerse a través de CL. [1]
2.6.1 Banderas.
OF. Un desbordamiento ocurre cuando se suman o restan dos números con signo.
Un desbordamiento indica que el resultado ha excedido la capacidad de la
maquina.
ZF. Indica el resultado de una operación aritmética o lógica (1, el resultado es cero;
0, el resultado es diferente de cero).
PF. La paridad es un 0 lógico para paridad impar y un 1 lógico para paridad par. La
paridad es el conteo de los unos en un número expresado como par o impar.
CF. Guarda el valor del acarreo después de la suma, o la sustracción después de la
resta. [2]
2.6.2 Cadenas.
INSTRUCCIÓN REP
Para procesamiento de der. a izq. utilice STD para poner uno en DF.
INSTRUCCIÓN MOVS
INSTRUCCIÓN LODS
LODS carga el AL con un byte, el AX con una palabra o el EAX con una
palabra doble desde la memoria. La dirección de memoria está sujeta a los registros
DS: SI, aunque puede pasar por alto el SI. Dependiendo de la bandera de
dirección, la operación también incrementa o disminuye el SI en 1 para byte, en 2
para palabra y en 4 para palabra doble.
Ingeniería en Sistemas Computacionales 34
INSTRUCCIÓN STOS
STOS almacena los contenidos del registro AL, AX o EAX en un byte, palabra o
palabra doble en memoria. La dirección de memoria siempre está sujeta a los
registros ES: DI. Dependiendo de la bandera de dirección, STOS también
incrementa o disminuye el registro DI en 1 para byte, en 2 para palabra y en 4 para
palabra doble.
INSTRUCCIÓN CMPS
CMPS compara el contenido de una localidad de memoria (direccionada por DS: SI)
con el de otra localidad de memoria (direccionada por ES: DI). Dependiendo de la
bandera de dirección, CMPS incrementa o disminuye los registros SI y DI en 1 para
byte, en 2 para palabra y en 4 para palabra doble.
La operación establece las banderas AF, CF, OF, PF, SF y ZF. Cuando se
combinan con un prefijo REP y una longitud en el CX, de manera sucesiva CMPS
puede comparar cadenas de cualquier longitud.
Pero CMPS proporciona una comparación alfanumérica, esto es, una
comparación de acuerdo con los valores ASCII. La operación no es adecuada para
comparaciones algebraicas, que consisten en números con signo. Considere la
comparación de dos cadenas que contienen JEAN y JOAN. Una comparación de
izquierda a derecha, tiene el resultado siguiente:
J:J iguales
E:O diferentes (E es menor)
A:A iguales
N:N iguales
INSTRUCCION SCAS
SCAS difiere de CMPS en que SCAS busca una cadena por un valor de byte,
palabra o palabra doble específico. SCAS compara el contenido de la localidad de
Ingeniería en Sistemas Computacionales 35
memoria (direccionado por ES: DI) con elñ contenido del registro AL, AX o EAX.
Dependiendo de la bandera de dirección, SCAS incrementa o disminuye el registro
DI en 1 para byte, en 2 para palabra y en 4 para palabra doble.
Al final de la ejecución, SCAS establece las banderas AF, CF, OF, PF, SF y
ZF. SCAS es útil en particular para la aplicación de edición de texto, en la que el
programa tiene que buscar los signos de puntuación. [3]
2.6.3 Carga.
Sintaxis: LAHF
Banderas que afecta: OF DF IF TF SF ZF AF PF CF
Carga los bits 7, 6, 4, 2 y 0 del registro AH con el contenido de los indicadores SF,
ZF, AF, PF Y CF respectivamente. El contenido de los demás bits queda sin definir.
[4]
Ingeniería en Sistemas Computacionales 37
[1]http://www.eie.fceia.unr.edu.ar/ftp/dis_de_procesadores/documentacion/te
ma2src.pdf
[4] García de Celis, Ciriaco. El Universo Digital del IBM PC, AT y PS/2. Cuarta
edición. Ediciones Grupo Universitario de Informática, 1997