Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de
Assembler cruzados
Instrucciones simblicas
Una instruccin
en ensamblador consta de cdigos de
operacin, operaciones, operandos y
Comentarios.
La etiqueta
, es el smbolo que aadido a una
instruccin permite que se pueda
referenciar
Simblicamente en el programa.
El cdigo de operacin
, es generalmente un smbolo, aunque
en algunos sistemas es un
entero octal, hexadecimal o decimal que
indica la operacin que se quiere
realizar.
El campo operando
,
es un campo de direccin de datos que
puede estar dividido en varios
subcampos de acuerdo con la
constitucin interna de la computadora
correspondiente.
El comentario
, que no es obligatorio, no es procesado
por el ensamblador. Nos dice que
las instrucci
ones pueden ser de formato fijo, formato
libre y formato mixto.
ORG
Esta pseudo instruccin que proporcione
informacin acerca de alguna parte
de la traduccin.
LDA SUB
Instruccin que permite cargar el
sustraendo a AC. El nomb
re simblico de la
operacin es LDA.
SUB
Indica que es un smbolo de direccin.
CMA
Instruccin de maquina que representa
un complemento.
INC
Instruccin que indica un incremento a
AC.
ADD MIN
Permite sumar el minuendo a AC.
MIN
El valor binario de la parte de direccin
debe obtenerse un smbolo de
2
direccin MIN.
STA DIF
Permite almacenar la diferencia.
DIF
El valor binario de la parte de direccin
debe obtenerse un smbolo de
direccin DIF.
HLT
Instruccin que nos permite detener la
computadora.
DEC N
Este es un nmero decimal con signo N
para convertirse en binario.
Dos lneas del programa simblico
especifican operando decimales con la
pseudo
instruccin DEC.
HEX 0
La diferencia se encuent
ra almacenada aqu.
END
Fin del programa simblico y nos indica
que ya no hay lneas para traducir.
TABLA DE INSTRUCCIONES
Smbolo
Cdigo hexadecimal
Descripcin
AND
0u8
Aplicar AND M a AC
ADD
1o9
Sumar M a AC, acarrear E
LDA
2oA
Cargar AC desde M
STA
3oB
Almacenar AC en M
BUN
4oC
Brincar en forma condicional a M
BSA
5oD
Salvar la direccin de retorno en M
ISZ
6oE
Incrementar M y saltar si hay un cero
CLA
7800
Borrar a AC
CLE
7400
Borrar E
CMA
7200
Complementar a AC
CME
7100
Complementar E
CIR
7080
Circular a la derecha E y AC
CIL
7040
Circular a la izquierda E y AC
3
INC
7020
Incrementar AC
SPA
7010
Brincar si AC es positivo
SNA
7008
Brincar si AC es negativo
SZA
7004
Brincar si AC es cero
SZE
7002
Brincar si E es cero
HLT
7
001
Introducir y borrar bandera
OU
F400
Sacar informacin y borrar bandera
SKI
F200
Saltar si la bandera de entrada esta
activada
SKO
F100
Saltar si la bandeja de salida esta
activada
ION
F080
Habilitar la interrupcin
IOF
F040
Deshabilitar interrupcin
De una fase
residentes
demores
SEGMENT
ASSUME CS:demores, DS:demores
ORG 100h
inicio:
JMP main
controla_int08 PROC
PUSHF
CALL CS:ant_int08 ; llamar al gestor
normal de INT 8
STI
CMP CS:in10,0
JNE fin_int08
; estamos dentro de
INT 10h
;
; Colocar aqu el proceso a ejecutar
18,2 veces/seg.
; que puede invocar funciones de INT
10h
fin_int08:
IRET
controla_int08 ENDP
controla_int10 PROC
INC CS:in10
; indicar entrada en
4
INT 10h
PUSHF
CALL CS:ant_int10
DEC CS:in10
; fin de la INT 10h
IRET
controla_int10 ENDP
in10
DB 0
; mayor de 0 si hay
INT 10h
ant_int08
LABEL DWORD
ant_int08_off DW ?
ant_int08_seg DW ?
ant_int10
LABEL DWORD
ant_int10_off DW ?
ant_int10_seg DW ?
; Dejar residente hasta aqu.
main:
PUSH ES
MOV AX,3508h
INT 21h
; obtener vector de
INT 8
MOV ant_int08_seg,ES
MOV ant_int08_off,BX
MOV AX,3510h
INT 21h
; obtener vector de
INT 10h
MOV ant_int10_seg,ES
MOV ant_int10_off,BX
POP ES
LEA DX,controla_int08
MOV AX,2508h
INT 21h
; nueva rutina de INT
8
LEA DX,controla_int10
MOV AX,2510h
INT 21h
; nueva rutina de INT
10h
PUSH ES
MOV ES,DS:[2Ch]
; direccin del
entorno
MOV AH,49h
INT 21h
; liberar espacio de
entorno
POP ES
LEA DX,main
ADD DX,15
; redondeo a
MOV CL,4
SHR DX,CL
MOV AX,3100h
residente
prrafo
residente
INT 21h
demores
ENDS
END inicio
Fig 3.compilacion:
Desplazan a la
izquierda o a la
derecha un nmero especificado de bits. En un desplazamiento a la izquierda los
bits que
sobran por el lado izquierdo se descartan y se rellenan los nuevos espacios con
ceros. De
manera anloga pasa con los desplazamientos a la derecha.
Operadores lgicos:
)
:
Este operador devuelve como resultado el
complemento a uno del operando
Operadores relacionales:
Comparacin de operadores:
El punto flotante:
los nmeros en coma flotante son usados, normalmente, para aproximar valores
analgicos y continuos, por que dan una mayor resolucin que los enteros. Las
variables tipo float tienen el valor mximo 3.4028235E+38, y mnimo pueden
alacanzar el -3.4028235E+38. Ocupan 4bytes (32bits).
Los punteros:
Se puede decir que el puntero es como una flecha apuntando a otra variable. Esa
variable no es ms que una direccin de memoria, el puntero indicara pues
donde estaa almacenado el valor de la variable a la que apunta.
Entonces al declarar un puntero lo que se hace es reservar espacio para
almacenar una direccin de memoria, no el contenido de la variable .
Declaracin de punteros:
el puntero es una variable. Asi pues los punteros podrian dar la impresin de que
son elementos separados de las variables. No es as. Son variables, y se le puede
asignar nuevos valores, e incluso realizar algunas operaciones aritmticas tiles
con ellos. Una variable de tipo puntero est ntimamente ligada con el tipo al que
apunta. Por ende, en la declaracin, se escribe el nombre del tipo al que apuntar
el puntero, seguido de asterisco, y por ltimo, el nombre del puntero.
Ejemplo:
int
*p_entero;
float
*p_real;
char
*c
aracter;
operadores de contenido y de indireccion:
El operador de indireccin &: se utiliza para referirse a la direccin de una
variable, as el cdigo siguiente :
/* Reservamos 4 bytes para almacenar una direccin de memoria
*/int*p_entero;/* Reservamos 4 bytes para almacenar un entero */
int
entero;
/* Escribimos en la variable p_entero la direccin de entero */
p_entero = &entero;
El operador *:
se utilizar para manejar la direccin a la que apunta un puntero. Se Podra llamar
el operador de acceso. Tanto el operador de acceso, como el de indireccin,
funcionan en notacin prefija. Asi:
int
*p_entero;
int
entero1,
entero2;
entero1 = 2;
entero2 = 5;
p_entero = &entero1;
entero1 = *p_entero + entero2;
Funciones:
Declaracin y definicin
declaracin: prototipo (interfaz), funcin abstracta.
definicin: la funcin misma.
Ejemplos:
int optimo(int a, int b);
int optimo(int a, int b)
{
int aux = a;
/* cuerpo... */
return aux;
}
Del tipo prototipo , definicin y llamada:
int optimo(int a, int b);
main(){
/* codigo... */
c = optimo(a,b);
}
int optimo(int a, int b)
{
/* cuerpo... */
return aux;
}
10
11