La información que se
presenta en esta página fue tomada del siguiente documento: https://www.ittux.edu.mx/sites/default/files/MICROCOMPUTADORAS_AL_DETALLE.pdf
agradeciendo que hayan
compartido el conocimiento y reiterando que la información le pertenece a: LUIS URIETA PÉREZ Y PABLO FUENTES RAMOS.
Registros
El “CPU” tiene 14 registros internos cada uno
de 16 bits para uso general.
·
Acumulador:
AX
o
Parte
alta: AH
o
Parte
baja: AL
·
Registro
Base: BX
o
Parte
alta: BH
o
Parte
baja: BL
·
Registro
contador: CX
o
Parte
alta: CH
o
Parte
baja: CL
·
Registro
de datos: DX
o
Parte
alta: DH
o
Parte
baja: DL
Nombres de los 14 registros:
AX: Acumulador
Se usa para almacenar resultados
lecturas o escrituras desde o hacia los puertos.
BX: Registro base
Sirve como apuntador base o índice.
CX: Registro contador
Se utiliza en operaciones de
iteración, como un contador que automáticamente se incrementa o decrementa de
acuerdo con el tipo de instrucción usada.
DX: Registro de datos
Se
usa como puente para el acceso de datos.
DS: Registro del segmento de datos
Es un registro de segmento cuya
función es actuar como un indicador para saber donde se encuentran los datos.
Ya sea una variable inicializada o no.
ES: Registro del segmento extra
Tiene el propósito general de
permitir operaciones sobre cadenas, pero también puede ser una extensión de DS.
SS: Registro del segmento de pila
Tiene la tarea de manejar la posición
de memoria donde se encuentra la pila (“Stack”) es una estructura que guarda
datos de forma temporal tanto en un programa como en el pc.
En términos de operación interna la
UCP usa este segmento para almacenar a los llamados de rutina.
CS: Registro del segmento de código
Es aquí donde se encuentra el código
ejecutable de cada programa el cual esta ligado a los diferentes modelos de
memoria.
BP: Registro de apuntadores base
Se
usa para manipular la pila sin afectar al registro de segmento SS.
SI: Registro índice fuente
Representa
la dirección donde se encuentra la cadena.
Di: Registro índice destino
Donde
será copiada la cadena.
SP: Registro del apuntador de pila
Apunta a un área especifica de
memoria que sirve para almacenar datos bajo la estructura LIFO conocida como
pila(“Stack”).
IP: Registro del apuntador de siguiente
instrucción
Apunta
a la siguiente instrucción que será ejecutada en memoria.
F: Registro de banderas
Contiene
dos grupos:
o
Banderas
apagadas
o
NV, UP, DI, PL, NZ, NA, PO, NC
o
Banderas
o
OV,
DN, EL, NG, ZR, AC, PE, CY
A continuación, se describe cada bit:
·
Desbordamiento
(Overflow):
o
NV:
no hay desbordamiento
o
OV:
si lo hay
·
Dirección
(Direction):
o
UP:
hacia a delante
o
DN:
hacia atrás
·
Interrupción
(Interrupts):
o
DI:
desactivadas
o
EI
activadas
·
Signo
(Sign):
o
PL:
positivo
o
NG:
negativo
·
Cero
(Zero):
o
NZ:
no es cero
o
ZR:
si lo es
·
Acarreo
auxiliar (Auxiliar carry):
o
NA:
no hay acarreo auxiliar
o
AC:
hay acarreo auxiliar
·
Paridad
(Parity):
o
PO:
paridad non
o
PE:
paridad par
·
Acarreo
(Carry):
o
NC:
no hay acarreo
o
CY:
si lo hay
Banderas
PSW
Contiene 9 banderas, 3 banderas de
control TF, DF, IF y 6 banderas de estatus CF, PF, AF, ZF, SF y OF.
Estas 6 ultimas banderas representan
el resultado de una operación aritmética o lógica. Permiten al programa alterar
el curso de ejecución basado en os valores lógicos que almacenan.
·
Bandera
CF
o
Esta
en = 1, cuando a ocurrido un “llevar” o “pedir préstamo” del resultado (8 o 16
bits).
·
Bandera
OF
o
Sobre
flujo = 1 indica que ha ocurrido un sobre flujo aritmético. Esto significa que
el tamaño del resultado excede la capacidad de almacenamiento del destino y el
digito significativo se perdió.
·
Bandera
SF
o
Esta
bandera se activa cuando el bit mas significativo del resultado es 1. Ya que
los números binarios negativos son representados usando notación c2; SF refleja
el signo del resultado: 0 indica +; 1 indica -.
·
Bandera
PF
o
Cuando
esta bandera esta activa, resultado de la operación tiene un numero par de
unos, esta bandera se usa para verificar errores en la transmisión.
·
Bandera
ZF
o
Esta
bandera se activa cunando el resultado de la operación es cero.
·
Bandera
DF
o
Bandera
de dirección
·
Bandera
IF
o
Bandera
de interrupción
·
Bandera
TF
o
Bandera
de trampa
Instrucciones de transferencia de
datos
Estas instrucciones mueven datos de una parte a
otra del sistema; desde y hacia la memoria principal y a los registros de
datos, puertos de E/S y registros de segmentación.
·
MOV:
Transfiere
·
XCHG:
Intercambia
·
IN:
Entrada
·
OUT:
Salida
·
XLAT:
Traduce usando una tabla
·
LEA:
Carga de dirección efectiva
·
LDS:
Carga el segmento de datos
·
LES: Carga del segmento extra
·
LAHF:
Carga los indicadores en AH
·
SAHF:
Guarda AH en los indicadores
·
PUSH
<FUENTE>: (SP) < fuente
·
POP
<DESTINO>: destino < (SP)
Control de bucles
Hay 4 tipos de bucles básicos:
·
Bucles
sin fin
·
Bucles
por conteo
·
Bucles
hasta
·
Bucles
mientras
·
INC:
Incrementar
·
DEC:
Decrementar
·
LOOP:
Realizar un bucle
·
LOOPE,
LOOPZ: Realizar un bucle si es cero.
·
LOOPNZ,
LOOPNE: Realizar bucle si no es cero.
·
JCXZ:
Salta si CX es cero.
Instrucciones de prueba, comparación
y saltos
Este grupo es una continuación de lo anterior,
incluye las siguientes instrucciones:
·
TEST:
Verifica
·
CMP:
Compara
·
JMP:
Salta
·
JE,
JZ: Salta si es igual a cero
·
JNE,
JNZ: Salta si no igual a cero
·
JS:
Salta si signo negativo
·
JNS:
Salta si signo no negativo
·
JP,
JPE: salta si paridad par
·
JNP,
JOP: Salta si paridad impar
·
JO:
Salta si hay capacidad excedida
·
JNO:
Salta si no hay capacidad excedida
·
JB,
JNAE: salta si por abajo (no encima o igual)
·
JNB, JAE: salta si no está por abajo (encima o
igual)
·
JBE,
JNA: Salta si por abajo o igual (no encima)
·
JNBE,
JA: Salta si no por abajo o igual (encima)
·
JL, JNGE: Salta si menor que (no mayor o
igual)
·
JNL,
JGE: Salta si no menor que (mayor o igual)
·
JLE,
JNG: Salta si menor que o igual (no mayor)
·
JNLE,
JG: Salta si no menor que o igual (mayor)
Instrucciones de llamado y retorno de
subrutinas.
·
CALL:
Llamada a subrutina
·
RET:
Retorno al programa o subrutina que llamo.
Instrucciones aritméticas
Procesador 8086/8088
a)
Grupo
de adición
·
ADD:
Suma
·
ADC:
suma con acarreo
·
AAA:
Ajuste ASCII para la suma
·
DAA:
Ajuste decimal para la suma
b)
Grupo
de sustracción
·
SUB:
Resta
·
SBB:
Resta con acarreo negativo
·
AAS:
Ajuste ASCII para la resta
·
DAS:
Ajuste decimal para la resta
c)
Grupo
de multiplicación
·
MUL:
Multiplicación
·
IMUL:
Multiplicación entera
·
AAM:
Ajuste ASCII para la multiplicación
d)
Grupo
de división
·
DIV:
División
·
IDIV:
División entera
·
AAD:
Ajuste ASCII para la división
e)
Conversiones
·
CBW:
Pasar octeto a palabra
·
CWD:
Pasar palabra a doble palabra
·
NEG:
Negación
f)
Tratamiento
de cadenas
Permiten el movimiento, comparación
o búsqueda rápida en bloques de datos:
·
MOVC:
Transferir carácter de una cadena
·
MOVW:
Transferir palabra de una cadena
·
CMPC:
Comparar carácter de una cadena
·
CMPW:
Comparar una palabra de una cadena
·
SCAC:
Buscar carácter de una cadena
·
SCAW:
Buscar palabra de una cadena
·
LODC:
Cargar carácter de una cadena
·
LODW:
cargar palabra de una cadena
·
STOC:
Guardar carácter de una cadena
·
STOW:
Guardar palabra de una cadena
·
REP:
Repetir
·
CID:
Poner a 0 el indicador de dirección
·
STD:
Poner a 1 el indicador de dirección
Instrucciones Lógicas.
Son operaciones bit a bit que trabajan sobre
octetos o palabras completas:
·
NOT:
negación
·
AND:
producto lógico
·
OR:
suma lógica
·
XOR:
suma lógica exclusiva
Instrucciones de
Desplazamiento, Rotación y Adeudos.
Básicamente permiten multiplicar y dividir por
potencias de 2
·
SHL,
SAL desplazar a la izquierda (desplazamiento aritmético)
·
SHR
desplazar a la derecha
·
SAR
desplazamiento aritmético a la derecha
·
ROL
rotación a la izquierda
·
ROR
rotación a la derecha
·
RCL
rotación con acarreo a la izquierda
·
RCR
rotación con acarreo a la derecha
·
CLC
borrar acarreo
·
STC
poner acarreo a 1
Instrucciones de Pila.
Una de las funciones de la pila del sistema es
la de salvaguardar (conservar) datos (la
otra es la de salvaguardar las direcciones de
retorno de las llamadas a subrutinas):
·
PUSH
introducir
·
POP
extraer
·
PUSHF
introducir indicadores
·
POPF
extraer indicadores
Instrucciones de Control del
microprocesador.
Hay varias instrucciones para el control de la
CPU, ya sea a ella sola, o en conjunción con
otros procesadores:
·
NOP
no operación
·
HLT
parada
·
WAIT
espera
·
LOCK
bloquea
·
ESC
escape
Instrucciones de Interrupción.
·
STI
poner a 1 el indicador de interrupción
·
CLI
borrar el indicador de interrupción
·
INT
interrupción
·
INTO
interrupción por capacidad excedida (desbordamiento)
·
IRET
retorno de interrupción
J
|
Jump
|
N
|
Not
|
L
|
Less
|
G
|
Great
|
E
|
Equal
|
Z
|
Zero
|
A
|
Above
|
B
|
Below
|
1. Instrucciones usadas para comparar
dos enteros sin signo:
a)
JA
o JNBE. Salta si está arriba o salta si no está abajo o si no es igual (jump if
above o jump if not below or equal) El salto se efectúa si la bandera ce CF = 0
o si la bandera de ZF = 0
b)
JAE
o JNB. Salta si está arriba o es igual o salta si no está abajo (jump if above
or equal o jump if not below) El salto se efectúa si CF = 0.
c)
JB
o JNAE. Salta si está abajo o salta si no está arriba o si no es igual (jump if
below or equal o jump if not above or equal) El salto se efectúa si CF = 1.
d)
JBE
o JNA. Salta si está abajo o si es igual o salta si no está arriba (jump if
below or equal jump if not above) El salto se efectúa si CF = 1.
e)
JE
o JZ. Salta si es igual o salta si es cero (jump equal o jump if zero) El salto
se efectúa si ZF = 1 (también se aplica a comparaciones de enteros con signo)
f)
JNE
o JNZ. Salta si no es igual o salta si no es cero (jump if not equal o jump if
not zero) El salto se efectúa si ZF = 0 (también se aplica a comparaciones de
enteros con signo)
2. Instrucciones usadas para comparar
dos enteros con signo:
a)
JG
o JNLE. Salta si es más grande o salta si no es menor o igual (jump if greater
o jump if not less or equal) El salto se efectúa si ZF = 0 o OF = SF.
b)
JGE
o JNL. Salta si es más grande o igual o salta si no es menor que (jump if
greater or equal o jump if not less) El salto se efectúa si SF = OF.
c)
JL
o JNGE. Salta si es menor que o salta si no es mayor o igual (jump if less o
jump if not greater or equal) El salto se efectúa si SF = OF.
d)
d.
JLE o JNG. Salta si es menor o igual o salta si no es más grande (jump if less
or equal o jump if not greater) El salto se efectúa si ZF = 1 o SF = OF.
3. Instrucciones usadas según el
estado de banderas:
a) JC Salta si hay acarreo (jump if
carry) El salto se efectúa si CF = 1.
b) JNC Salta si no hay acarreo (jump if
not carry) El salto se efectúa si CF = 0.
c) JNO Salta si no hay desbordamiento (jump
if not overflow) El salto se efectúa si OF = 0.
d) JNP o JPO Salta si no hay paridad o
salta si la paridad en non. El salto se efectúa si PF = 0.
e) JNS Salta si el signo está apagado
(jump if not sign) El salto se efectúa si SF = 0.
f)
JO
Salta si hay desbordamiento (jump if overflow) El salto se efectúa si OF = 1.
g) JP o JPE Salta si hay paridad o
salta si la paridad es par (jump if parity o jump if parity even) El salto se
efectúa si PF = 1.
h) JS Salta si el signo está prendido
(jump if sign set) El salto se efectúa si SF = 1.
Notación mate
|
Con signo
|
Sin Signo
|
||
>
|
JG
|
JNLE
|
JA
|
JNBE
|
<
|
JL
|
JNGE
|
JB
|
JNAE
|
>=
|
JGE
|
JNL
|
JAE
|
JNB
|
<=
|
JLE
|
JNG
|
JBE
|
JNA
|
=
|
JE
|
JZ
|
||
¡=
|
JNE
|
JNZ
|
||
Direccionamientos
v Inmediato:
Mueve
un valor constante a un registro interno
MOV
AX, 568
v Registro:
Indica
que el operando a ser usado este contenido en uno de los registros internos de
propósito general de la UCP.
Registros
generales pueden ser de 8/16 bits
MOV
AX, BX; AX almacena una copia del valor de BX
MOV
AL, BL; AL almacena una copia del valor de BL
v Directo:
El
operando esta en memoria. La dirección efectiva del operando se indica
directamente en la instrucción. El otro operando tiene que ser un registro.
Supongamos
que en el segmento DATA esta VECTOR DB “YO”
MOV AH,
VECTOR
MOV
BX, [100H]
v Indirecto:
El
operando está en memoria. La dirección efectiva viene dada por el contenido de
un registro base (BX, BP) o un registro índice (SI, DI)
MOV
AX, [SI]
MOV
CL, [BX]
v Relativo a la base:
El
operando está en memoria la dirección efectiva viene dada por el contenido de
un registro base (BX, BP) más un desplazamiento constante.
MOV
AL, [BX+1]
MOV
CL, VECTOR[BX]
v Indexado directo:
El
operando está en memoria la dirección efectiva viene dada por el contenido de
un registro índice (SI, DI) más un desplazamiento constante.
MOV
AL, VECTOR[SI]
MOV [SI+1],
32H
v Indexado a la base:
EL
operando está en memoria. la dirección efectiva es el resultado de la suma del
contenido de un registro base un registro índice y un desplazamiento opcional.
MOV
BX, OFFSET VECTOR
LEA
BX, OFFSET VECTOR
MOV AH, [BX][SI+2]
Estructura de un programa
pila segment para stack 'stack'
DW 500 DUP (?)
pila
ends
datos
segment para public 'data'
datos ends
extra segment para public 'data'
extra ends
assume cs:codigo, ds:datos,
es:extra,ss:pila
codigo segment para public 'code'
public
main
main proc far
push
ds
mov
ax,0
push
ax
mov
ax,datos
mov
ds,ax
mov
ax,extra
mov
es,ax
main endp
codigo
ends
end main
Programación modular Estructura de un
procedimiento
<nombre>
PROC <atributo_distancia>
PUBLIC LP
; LP
PROC NEAR
LP PROC
FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
;limpiar pantalla
MOV AX,0600H
MOV BH,7
MOV CX,0
MOV DX, 184FH
INT 10H
POP DX
POP CX
POP BX
POP AX
RET
LP ENDP
CODIGO ANDS
END
Interrupciones
de uso común
Limpiar pantalla; renglones 0-24; columnas
0-79;
MOV AX,0600H
MOV BH,7
MOV CX, ;
esquina superior izquierda (CH = renglones; CL = columnas)
MOV DX, ;esquina
inferior derecha (DH = renglones; DL = columnas)
INT 10H
Mover el cursor
MOV AH,2
MOV BH,0
MOV DX, ;DH = Renglón; DL = Columnas
INT 10H
Carácter ingresado desde el teclado; el valor
queda guardado en AL
MOV AH,1
INT 21H
Imprimir un carácter
MOV AH,2
MOV DL, ;Valor a imprimir
INT 21H
Cadena ingresada desde el teclado
MOV AH,0AH
LEA DX,
;Dirección de inicio cadena memoria
INT 21H
;Ejem: CAD DB 61,?,61 DUP(61),24H
;Nota en CAD +2
Se encuentra el primer carácter
Fecha del reloj
MOV AH, 2AH
INT21H
;AL = numero del día de la semana (dom=1, lun=2)
;CX = numero de año
;DH = numero de mes
;DL = dia del mes
Cambiar la fecha del reloj
MOV AH, 2BH
MOV CX,
;numero de año
MOV DH,
;numero de mes
MOV DL,
;dia del mes
INT 21H
Para
la división
Para
la multiplicación
Mas teoría
de ensamblador:
https://issuu.com/eslibre.com/docs/programaci__n_en_ensamblador_para_p



Comentarios
Publicar un comentario