Académique Documents
Professionnel Documents
Culture Documents
EL LENGUAJE ENSAMBLADOR
EL LENGUAJE ENSAMBLADOR ES UNA VARIANTE, LEGIBLE PARA EL
SER HUMANO, DEL LENGUAJE DE MAQUINA QUE USAN LAS
COMPUTADORAS PARA EJECUTAR PROGRAMAS. AL MISMO TIEMPO ES LA
MEJOR FORMA QUE SE TIENE PARA COMINICARSE CON LA PC Y CON EL
LENGUAJE DE PROGRAMACION QUE UTILICE.
SI ANTES DE ENTRAR AL ESTUDIO DEL HARDWARE SE ANALIZA LO QUE
ES EL ENSAMBLADOR, SE TENDRA UN PANORAMA MAS AMPLIO DE CMO
FUNCIONA LA PC. ESTE LENGUAJE PROPORCIONA LA FACILIDAD Y LAS
HERRAMIENTAS NECESARIAS PARA TOMAR EL CONTROL DE TODO LO
QUE LA PC PUEDE REALIZAR FISICAMENTE.
CABO
LOS
DEMAS
LENGUAJES
DE
RAZN
VENTAJA
FUENTE
OBJETO
EJECUTABLE
(.EXE)
V. BASIC
27 Bytes
651 Bytes
12,814 Bytes
V.FOX
22 Bytes
572 Bytes
158,178 Bytes
ENSAMBLADOR
162 Bytes
169 Bytes
543 Bytes
Programa
:
===============================================
==============
.mode1 small
;Define el modelo de memoria
.data
.mens db hola que tal !.$
;la cadena que se desplegara
.stack
;Define el area de la pila (stack)
.code
;Comienza el cdigo
.EMP:
;Etiqueta el comienzo
mov ax, @data
;Permite acceso a datos
mov ds,ax
;a travs de ds
mov dx, offset mens
;Prepara para desplegar
mov ah,9
;Invoca la funcin 9 de
int 21h
;la int 21 para desplegar
mov ah,4ch
;Invoca la funcin 4ch de
int 21h
;la int 21 para terminar
end EMP
;cierra etiqueta de comienzo
===============================================
======================
CONVENCIN
ENTRADA
CONTROL
ARITMETICA Y LOGICA
MEMORIA
SALIDA
SUBSITEMA DE
ARITMETICA
CPU
(SUMA, RESTA,
MULTIPLICACION, DIVISION,
AND, OR, OR-EXCLUSIVO,
ETC.)
SUBSITEMA DE
ENTRADA
(TECLADO, MOUSE,
DISCO, JOYSTICK.)
SUBSITEMA DE
CONTROL
(COORDINA TODO)
SUBSITEMA DE
MEMORIA
(HASTA 1 MB DE RAM Y/O
ROM)
SUBSITEMA DE
SALIDA
(PANTALLA,
IMPRESORA, PLOTTER,
DISCO, ETC.)
UN
SISTEMA
MEMORIA
EL PROCESADOR ES CAPZ DE DIRECCIONAR 1 MB DE MEMORA A
UN TIEMPO ( I MB ES 220 1,048,576 LOCALIDADES DE
ALMACENAMIENTO CADA UNA DE 8 BITS DE LONGITUD) . EL PRIMER
BYTE DE MEMORIA EST EN LA DIRECCION 0 Y EL LTIMO EN LA
DIRECCIN 0FFFFF QUE SE ENCUENTRA EN NOTACIN HEXADECIMAL,
O SEA 1,048,575 BASE 10.
REGISTROS
EL PROCESADOR OFRECE UNOS RPIDOS ELEMENTOS
ALMACENAMIENTO EN UN CHIP, CONOCIDOS COMO REGISTROS.
DE
1
2
3
4
DESCRIPCIN
EL REGISTRO DE BANDERAS
EL REGISTRO DE BANDERA DE 16 BITS CONTIENE TODA LA
INFORMACION PERTINENTE ACERCA DEL ESTADO DEL PROCESADOR Y
DEL RESULTADO DE LAS RECIENTES INSTRUCCIONES.
10
Estado
DESACTIVA
DA
ACTIVADA
Overflow
(O)
Direction
(D)
Interrupt (I)
Sign (S)
Zero (Z)
NV
UP
DI
PL
NZ
OV
DN
EI
NG
ZR
Auxiliary
(A)
Parity (P)
Carry (C)
NA
PO
NC
AC
PE
CY
Overflow
Direction
Interrupts
Sign
Zero
Auxiliary Carry
Parity
Carry
NV = no hay desbordamiento
OV = S lo hay
UP = hacia adelante
DN = hacia atrs
DI = desactivadas
EI = activadas
PL = positivo
NG = negativo
NZ = no es cero
ZR = s lo es
NA = no hay acarreo auxiliar
AC = hay acarreo auxiliar
PO = paridad non
PE = paridad par
NC = no hay acarreo
CY = s lo hay
11
Contiene 9 banderas. Tres banderas de control TF, DF, IF y seis banderas de status
CF, PF, AF, ZF, SF, OF.
AF Llevar auxiliar = 1, indica que hubo llevar del nibble (4 bits) 0 al nibble 1. O
un pedir prstamo del nibble alto al nibble bajo.
12
OS REGISTROS DE
PROPSITO GENERAL
MOV AX,5
MOV DX,9
ADD AX,DX
t
EL REGISTRO AX
13
EL REGISTRO BX
EL REGISTRO BX PUEDE APUNTAR A LOCALIZACIONES DE
MEMORIA, UN VALOR DE 16 BITS ALMACENADO EN BX PUEDE SER
USADO COMO PARTE DE LA DIRECCION DE UNA LOCALIDAD DE
MEMORIA PARA SU ACCESO,
MOV
MOV
MOV
MOV
AX,200
DS,AX
BX,9
AL, [BX]
14
EL REGISTRO CX
EL REGISTRO CX ESPECIALMENTE ES UN CONTADOR. EN EL
SIGUIENTE EJEMPLO SE DESEA REPETIR UN BLOQUE DE INSTRUCCIONES
10 VECES, ESTO SE LOGRA CON :
MOV
CX,10
INICIO_DEL_CICLO:
<<INSTRUCCIONES A
REPETIR>>
SUB ENTRE
CX,1
LAS INSTRUCCIONES
LA ETIQUETA
INICIO_DEL_CICLO Y LA
INSTRUCCION JNZ, SON EJECUTADAS REPETIDAMENTE HASTA QUE CX SE
HACE CERO. NOTESE QUE DOS INSTRUCCIONES - SUB CX,1 Y JNZ
INICIO_DEL_CICLO - SON REQUERIDAS EN ORDEN PARA DECREMENTAR
CX Y REGRESAR A INICIO_DEL_CICLO SI CX AUN NO ES CERO.
DECREMENTAR Y REGRESAR AL INICIO DEL CICLO ES USADO
FRECUENTEMENTE, POR LO QUE SE PUEDE UTILIZAR UNA INSTRUCCION
ESPECIAL MS COMPACTA Y CON RESULTADOS MS RPIDOS; LA
INSTRUCCION ES LLAMADA LOOP, ESTA RESTA 1 A CX Y BRINCA SI CX
NO ES CERO, TODO EN UNA INSTRUCCION :
MOV CX,10
INICIO_DEL_CICLO :
<<INSTRUCCIONES
REPETIR>>
LOOP INICIO_DEL_CICLO
EL REGISTRO DX
EL REGISTRO DX ESTA RELACIONADO CON LA DIVISIN Y
MULTIPLICACIN; CUNADO SE DIVIDE UN DIVIDENDO DE 32 BITS POR UN
15
MOVAX,3456
MOVBX,100
DIVBX
EL REGISTRO SI
16
EL REGISTRO DI
EL REGISTRO DI ES MUY PARECIDO AL REGISTRO SI EN LO QUE SE
REFIERE A QUE PUEDE SER USADO COMO UN APUNTADOR DE MEMORIA
Y ADEMAS TIENE PROPIEDADES ESPECIALES CUANDO ES USADO CON
LAS POTENTES INSTRUCCIONES DE CADENA, POR EJEMPLO :
MOV AX,0
MOV DS,AX
MOV
DI,1024
EL REGISTRO BP
AL IGUAL QUE BX, SI Y DI, EL REGISTRO BP PUEDE SER USADO
COMO UN APUNTADOR DE MEMORIA, PERO CON UNA DIFERENCIA,
MIENTRAS QUE BX, SI Y DI NORMALMENTE ACTUAN COMO
APUNTADORES DE MEMORIA RELATIVOS AL REGISTRO DE SEGMENTO
DS, BP APUNTA RELATIVO A SS (EL REGISTRO DE SEGMENTO DE PILA),
LA PILA RESIDE EN EL SEGMENTO APUNTADO POR SS (STACK SEGMENT).
POR OTRO LADO, LOS DATOS NORMALMENTE RESIDEN EN EL SEGMENTO
APUNTADO POR DS (DATA SEGMENT); BX, SI Y DI USUALMENTE
17
PUSH
BP
MOV BP,SP
MOV AX,
[BP+4]
EL REGISTRO SP
18
MOV AX,1
PUSH
AX
MOV BX,2
PUSH
BX
POP AX
19
L APUNTADOR DE INSTRUCCIONES
(IP)
20
OS REGISTROS DE
SEGMENTO
21
FORMAR
UN
LOS SEGMENTOS Y
DESPLAZAMIENTOS SON
COMBINADOS COMO SIGUE :
EL VALOR DEL SEGMENTO
ES DESVIADO 4 BITS A LA
IZQUIERDA (O MULTIPLICADO
POR 16) Y DESPUS SE LE
SUMA EL DESPLAZAMIENTO.
MOV
AX,1000h
MOV DS,AX
MOV SI,201 h
ES
CARGADA
DESDE
((DS*16)+SI)
22
10000
+ 201
10201
SE PUEDE VER AHORA QUE LOS PROGRAMAS PUEDEN SOLO
ACCESAR UN MB COMPLETO DE MEMORIA DE ESPACIO USANDO EL PAR
SEGMENTO:DESPLAZAMIENTO, TODAS LAS INSTRUCCIONES Y MODOS
DE DIRECCIONAMIENTO DEL PROCESADOR OPERAN RELATIVAS A
ALGUNO DE LOS REGISTROS SEGMENTO.
. MODEL SMALL
. DATA
VAR1 DW 0
.
.
. CODE
MOV AX, @DATA
MOV DS, AX
.
.
END
23
EL REGISTRO CS
EL REGISTRO CS APUNTA AL INICIO DE LOS 64 KB DE MEMORIA
(BLOCK), SEGMENTO DE CODIGO EN EL CUAL RESIDE LA SIGUIENTE
INSTRUCCION QUE SERA EJECUTADA Y QUE SE ENCUENTRA EN EL
DESPLAZAMIENTO ESPECIFICADO POR IP, ESTO ES, EN LA DIRECCION
SEGMENTO:DESPLAZAMIENTO CS:IP.
EL REGISTRO CS PUEDE SER CAMBIADO POR UN NUMERO DE
INSTRUCIONES INCLUYENDO CIERTOS SALTOS, LLAMADAS Y RETORNOS.
EL REGISTRO DS
EL REGISTRO DS APUNTA AL INICIO DEL SEGMENTO DE DATOS, EL
CUAL ES UN BLOCK DE 64 KB. NORMALMENTE LOS DESPLAZAMIENTOS
DE MEMORIA INVOLUCRAN A BX, SI O DI OPERANDO RELATIVOS A DS .
EL SEGMENTO DE DATOS ES BASICAMENTE LO QUE SU NOMBRE INDICA,
EL SEGMENTO EN EL CUAL RESIDE EL JUEGO DE DATOS EN CURSO.
EL REGISTRO ES
EL REGISTRO ES APUNTA AL INICIO DEL BOLCK DE MEMORIA
CONOCIDO COMO EL SEGMENTO EXTRA, COMO SU NOMBRE IMPLICA, EL
SEGMENTO EXTRA NO ESTA DEDICADO A ALGUN PROPOSITO, PERO ESTA
DISPONIBLE PARA LAS NECESIDADES QUE SE PRESENTEN, ALGUNAS
VECES, ESTE SEGMENTO ES USADO PARA HACER UN BLOCK ADICIONAL
DE 64 KB DISPONIBLE PARA ALMACENAMIENTO DE DATOS, PERO EL
ACCESO A ESTE ES MENOS EFICIENTE QUE EL ACCESO AL SEGMENTO DE
DATOS.
24
EL REGISTRO SS
EL REGISTRO SS APUNTA AL INICIO DEL SEGMENTO DE PILA, LAS
INSTRUCCIONES COMO : PUSHES, POPS, CALLS Y RETURNS, TRABAJAN
CON ESTE SEGMENTO PORQUE SP ES SOLO CAPAZ DE DIRECCIONAR
MEMORIA EN ESTE SEGMENTO. COMO YA SE HA DICHO ANTES, EL
REGISTRO BP TAMBIEN OPERA RELATIVO AL SEGMENTO DE PILA, ESTO
PERMITE QUE BP SEA USADO PARA DIRECCIONAR PARAMETROS Y
VARIABLES QUE ESTAN ALMACENADOS EN LA PILA.
ODOS DE
DIRECCIONAMIENTO
25
IP = 0414 H
IP
Direccin de 20 bits
Bus de direccin
Del sistema
DIRECCIONAMIENTO
INMEDIATO
DE REGISTRO
DIRECTO
DE REGISTRO INDIRECTO
RELATIVO A LA BASE
INDEXADO DIRECTO
BASE INDEXADO
26
Direccionamiento Inmediato
El operando fuente aparece en la instruccin. Un ejemplo, es el que mueve un valor
constante a un registro interno.
MOV AX, 568
Direccionamiento de Registro
Indica que el operando a ser usado est contenido en uno de los registros internos de
propsito general del CPU. En el caso de los registros AX, BX, CX o DX los registros
pueden ser de 8 a 16 bits
Ejemplos:
MOV AX, BX
MOV AL, BL
; AX BX
; AL BL
Direccionamiento Directo
Especifica en la instruccin la localidad de memoria que contiene al operando. En
este tipo de direccionamiento, se forma una direccin de 20 bits.
Ejemplo:
MOV CX, COUNT
27
DS * 16
COUNT = CONSTANTE
+
DIRECCION DEL SISTEMA DE 20 BITS
Este es el segmento por omisin que se usa. Sin embargo, cualquiera de los 4
segmentos puede usarse. Esto se efecta especificando el registro apropiado en la
instruccin.
Por ejemplo, suponiendo que se desea usar el registro ES en lugar del DS:
MOV CX, ES: COUNT
El valor de 16 bits contenido en el registro SI debe ser el offset usado para calcular la
direccin de 20 bits.
Otra vez, debe usarse un registro de segmento para generar la direccin final. El
valor de 16 bits en SI se combina con el segmento apropiado para generar la
direccin.
28
a
Para calcular una direccin de memoria, el offset indicado por el registro de BX se
toma en funcin al registro de segmentos DS, y el desplazamiento indicado por el
registro BP se toma en funcin al registro de segmento SS.
29
EXAMEN UNIDAD 2
PERACIONES ARITMTICAS
BSICAS
SUMAS
EXISTEN TRES INSTRUCIONES QUE SE PUEDEN USAR EN LAS SUMAS; DOS DE
ELLAS FUNCIONAN CON DOS OPERANDOS Y UNA SOLO CON UNO. DICHAS
INSTRUCCIONES SON:
30
LA INSTRUCCIN ADD
SUMA EL OPERANDO FUENTE AL DESTINO Y DEJA EL RESULTADO EN EL
DESTINO.
ADD destino,fuente
POR EJEMPLO, LA INSTRUCCIN ADD DX,5 SUMAR AL REGISTRO DX EL
OPERANDO INMEDIATO 5 Y DEJAR EL RESULTADO EN EL REGISTRO DX. LA
INSTRUCCIN PUEDE REALIZAR OPERACIONES DE SUMA ENTRE REGISTROS
Y DATOS INMEDIATOS, ENTRE REGISTROS Y LOCALIDADES DE MEMORIA O
ENTRE REGISTRO Y REGISTRO. OTRO EJEMPLO ES:
MOV
MOV
ADD
DX,5
CX,6
DX,CX
LA INSTRUCCIN ADC
SUMA EL OPERANDO FUENTE AL DESTINO MS EL POSIBLE ACARREO DE LA
OPERACIN ANTERIOR Y DEJA EL RESULTADO EN EL OPERANDO DESTINO.
ADC destino,fuente
CUANDO DESEE OPERAR SOBRE CANTIDADES GRANDES (QUE NECESITEN
MAS DE 16 BITS DE ALMACENAMIENTO EN EL RESULTADO), ES MUY UTIL
USAR LA INSTRUCCIN ADC O SUMA CON ACARREO. DICHA INSTRUCCIN
REALIZA LA SUMA Y AUTOMTICAMENTE TOMA EN CUENTA EL ACARREO;
GENERALMEMNTE USA 32 BITS PARA SUS OPERACIONES (LAS
OPERACIONES SE REALIZAN SOBRE EL REGISTRO PAR DX:AX). EL
PROCESO ES COMO SIGUE:
PRIMERO: SE SUMAN LAS PALABRAS BAJAS DE LOS OPERANDOS PARA
OBTENER LA PALABRA BAJA DEL RESULTADO DE 32 BITS.
31
11101100 01100000
ADD
11101110 10000000
-------------------------------11011010 11100000
EC 60
ADD
EE 80
--------------DA E0
(LA BANDERA DE ACARREO SERA 1)
00000000 01010011
ADC
00 53
ADC
32
PA2
00000000 00110110
-------------------------------00000000 10001010
00 36
-----------00 8A
LA INSTRUCCIN INC
UNA DE LAS OPERACIONES DE SUMA MS USADA ES LA DE INCREMENTAR
EN UNO CUALQUIER REGISTRO O LOCALIDAD DE MEMORIA. PARA ESTE
PROPSITO SIRVE LA INSTRUCCIN INC (USA UN SOLO OPERANDO Y LO
INCREMENTA EN UNO). INC AX REALIZARA LA OPERACIN DE AX = AX +1.
ADVIERTA QUE SE AHORRA EL USO DE LA INSTRUCCIN ADD AX,1, PUES
INC ES MS RPIDA EN EJECUCIN Y OCUPA UN BYTE, MIENTRAS QUE ADD
AX,1 OCUPA 3 BYTES.
RESTAS
EXISTEN TRES INSTRUCIONES QUE SE PUEDEN USAR EN LAS RESTAS; DOS
DE ELLAS FUNCIONAN CON DOS OPERANDOS Y UNA SLO CON UNO. DICHAS
INSTRUCCIONES SON:
33
LA INSTRUCCIN SUB
RESTA AL OPERANDO DE DESTINO EL OPERANDO FUENTE Y DEJA EL
RESULTADO EN EL DESTINO.
SUB destino,fuente
POR EJEMPLO, SUB AX,DX LE RESTA AL REGISTRO AX EL CONTENIDO DEL
REGISTRO DX Y DEJA EL RESULTADO EN AX.
LA INSTRUCCIN SBB
LE RESTA AL OPERANDO DE DESTINO EL OPERANDO FUENTE, INCLUYENDO
EL ACARREO.
SBB destino,fuente
PARA ESTA INSTRUCIN SE PUEDE APLICAR EL MISMO ALGORITMO
SEALADO EN LA SUMA PARA TRABAJAR CON CANTIDADES DE 32 BITS. LO
NICO QUE CAMBIA ES EL ORDEN DE OPERACIN SOBRE LAS PALABRAS.
EN LUGAR DE TENER PA1 + PB1 SE TENDRA PA1 - PB1; EN LUGAR DE TENER
PA2 + PB2 SE TENDRA PA2 - PB2, Y EN LUGAR DE USAR LA INSTRUCCIN ADC
SE USARA SBB, RESTA CON ACARREO.
EJEMPLO:
34
MOV AX, EC60
SUB AX, EE80
LA INSTRUCCIN DEC
LA INSTRUCCIN DEC SE UTILIZA PARA DECREMENTAR UN OPERANDO EN
UNA UNIDAD, DEC AX REALIZARA LA OPERACIN DE AX = AX - 1.
MULTIPLICACIONES
SE TIENEN DOS INSTRUCCIONES PARA MULTIPLICAR VALORES, ESTAS SON:
IMUL
LA INSTRUCCIN MUL
EXISTEN DOS FROMAS DE MULTIPLICAR, MULTIPLICACIN DE 8 BITS Y
MULTIPLICACION DE 16 BITS.
35
C:\DEBUG
-A 100
28B7:0100 MOV AX, FFFF
28B7:0103 MOV CX, FFFF
28B7:0106 MUL CX
28B7:0108 INT 20
28B7:010A
-G 108
;pone 65535 en AX
;pone 65535 en CX
;multiplica las dos cantidades y deja el resultado
;en el registro par DX:AX
LA INSTRUCCIN IMUL
36
MOV AL,-1
MOV CL,6
MUL CL
MOV AL,-1
IMUL CL
INT 20
37
DIVISIONES
SE TIENEN DOS INSTRUCCIONES PARA DIVIDIR VALORES, ESTAS SON:
LA INSTRUCCIN DIV
EXISTEN DOS FROMAS DE DIVISIN, DIVISIN DE 8 BITS Y DIVISIN DE 16
BITS.
AL
OPERANDO AX
AH
38
EJEMPLO:
C:\DEBUG
-A 100
250E:0100
250E:0103
250E:0105
250E:0108
250E:0109
MOV
MOV
DIV
INT
AX,00FF
BL,8
BL
20
-G 108
AX=071F BX=0008 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=250E ES=250E SS=250E CS=250E IP=0107 NV UP EI PL NZ AC PO NC
250E:0107 CD20 INT 20
AX
OPERANDO DX:AX
DX
EJEMPLO:
C:\DEBUG
-A100
39
250E:0100
250E:0103
250E:0106
250E:0108
250E:010A
MOV
MOV
DIV
INT
AX,FFFF
BX,2
BX
20
-G108
AX=7FFF BX=0002 CX=0000 DX=0001 SP=FFEE BP=0000 SI=0000 DI=0000
DS=250E ES=250E SS=250E CS=250E IP=0108 NV UP EI PL NZ AC PO NC
250E:0108 CD20 INT 20
LA INSTRUCCIN IDIV
ESTA INSTRUCCIN DIVIDE, CONSIDERANDO EL SIGNO, EL REGISTRO AX O
EL REGISTRO PAR DX:AX POR EL OPERANDO ORIGEN. EL RESULTADO SE
ALMACENA EN AL O AX, SEGN EL OPERANDO SEA DE UN BYTE O DE UNA
PALABRA. EL RESIDUO SE ALMACENA EN EL REGISTRO AH O DX.
EJEMPLO:
C:\DEBUG
-A 100
250E:0100
250E:0103
250E:0105
250E:0108
250E:0109
MOV
MOV
IDIV
INT
AX,FFED
BL,2
BL
20
; dividendo = -19
; divisor = 2
-G 108
AX=01F7 BX=0008 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=250E ES=250E SS=250E CS=250E IP=0107 NV UP EI PL NZ AC PO NC
250E:0107 CD20 INT 20
40
rotacin a la izquierda
rotacin a la derecha
rotacin con acarreo a la izquierda
rotacin con acarreo a la derecha
CLC
STC
borrar acarreo
poner acarreo a 1
41
SAL/SHL realiza desplazamiento a la izquierda del primer operando tantos bits como
indique el segundo operando, introduciendo un 0 y guardando el bit que sale en el bit CF el
registro de estado.
CF
CF
42
RCR realiza la rotacin a la derecha de los bits de operando a travs del bit CF del registro
de estado.
CF
RCR mem, CL
CF
43
CF
ROL mem, CL
44
MUL BX
CICLOS
Las instrucciones de CICLOS se usan para realizar estructuras repetitivas, y utilizan el
registro CX como contador.
LOOP
Esta instruccin hace que el programa salte a la direccin especificada (salto dentro del
segmento), mientras que CX sea distinto de 0 y decrementa CX en 1 en cada iteracin.
LOOP salto
Ejemplo:
45
LOOP COMIENZO
;
;
;
;
46
PROGPRIN:
..
..
END EMPIEZA
En el ejemplo anterior se aprecia el uso comn de un salto no condicional intrasegmento.
En el caso de los programas .COM es necesario saltar sobre el rea de datos y llegar a la
etiqueta de comienzo del cdigo; esto se debe a que dichos programas deben contener los
datos y el cdigo en un solo segmento.
..
..
JMP SHORT ETIQUETA
..
..
ETIQUETA:
En el caso anterior, el formato JMP SHORT ETIQUETA es un salto intrasegmento a la
localidad "etiqueta", cuya distancia desde la instruccin JMP no es mayor de 127 bytes.
En caso contrario, el ensamblador desplegar un mensaje de error.
47
SALTE
48
2-
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 efecta si CF=0.
3-
4-
JBE O JNA- Salta si est abajo o si es igual o salta si no est arriba ( jump if
below or equal o jump if not above). El salto se efecta si CF=1 o ZF=1.
5-
JE O JZ- Salta si es igual o salta si es cero (jump if equal o jump if zero). El salto
se efecta si ZF=1 (tambin se aplica a comparaciones de enteros con signo).
6-
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 efecta si ZF=0 (tambin se aplica a comparaciones de
enteros con signo).
2-
3-
49
4-
INSTRUCCIONES
BANDERAS
USADAS
SEGN
EL ESTADO
DEL REGISTRO
DE
1-
2-
JNC- Salta si no hay acarreo (jump if not carry). El salto se efecta si CF=0.
3-
4-
JNP O JPO- salta si no hay paridad o salta si la paridad es non. El salto se efecta si
pf=0
5-
JNS- salta si el signo esta apagado (jump if not sign). El salto se efecta si sf=0.
6-
7-
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 efecta si PF=1.
8-
JS- Salta si el signo esta prendido (jump if sign set). El salto se efecta si SF=1.
50
ESTILO DE PROGRAMACIN
Un programa en lenguaje ensamblador es una serie de sentencias ejecutables que le dicen al
ensamblador que operaciones tiene que realizar. Esta serie de sentencias, a menudo, se
denominan cdigo fuente. Como en cualquier otro lenguaje, el cdigo fuente del lenguaje
ensamblador tiene una sintaxis predefinida.
Cada sentencia de lenguaje ensamblador est compuesta de cuatro campos:
Campo nombre Campo operacin Campo operando
Conocer los campos para la realizacin de un programa
Campo comentario.
51
CAMPO NOMBRE
El campo del nombre, algunas veces denominado el campo rotulo, asigna un nombre
simblico a la direccin de comienzo de memoria real de una instruccin y elimina la
necesidad de seguir la pista de direcciones de las instrucciones. Esto es especialmente til
al generar cdigo reubicable.
Al utilizar una referencia simblica, el programador permite al enlazador (linker)
seleccionar en qu sitio de memoria ser cargado el programa en lenguaje ensamblador.
Todas las referencias a instrucciones pueden entonces variar automticamente con la
colocacin del cdigo. Aunque a cualquier instruccin se le puede dar un nombre, este
campo esta habitualmente reservado para aquellas instrucciones que sern referenciadas en
las definiciones de datos, constantes, segmentos, lazos, bifurcaciones y llamadas a
subrutinas.
Un nombre debe comenzar con un caracter alfabtico y puede contener hasta 31
caracteres, incluyendo:
-todas las letras de la a a la z.
-dgitos numricos del 0 al 9.
-los smbolos especiales siguientes: - $ . ? @ %
Debe tenerse precaucin al seleccionar un nombre, no se puede utilizar un nombre que
coincida con una palabra reservada o directivo del ensamblador. Si el nombre incluye un
punto (.) , entonces el punto debe ser el primer caracter.
VARIABLES
Un nombre de variable representa una posicin de memoria que es accesible por programa;
y el contenido de esta posicin de memoria puede cambiar durante la ejecucin. Las
definiciones de variables incluyen informacin sobre la direccin de posiciones de
memoria, tipos de datos y tamao. Las variables pueden ser utilizadas como operando en
formas simple, indexada o estructurada.
RTULOS
52
label
far
En el ejemplo mostrado, la pseudo-op "label" fue utilizada con el atributo far. Los
atributos far pueden ser tambin utilizados para rotular equate y procedure y sentencias
external, como se ve en los siguientes ejemplos:
diez
imprime
extrn
equ
far
proc far
randm: far
CONSTANTES
10
53
Los nombres tambin pueden ser dados a posiciones de memoria que contienen valores
inicializados que no cambian durante la ejecucin del programa, estos valores inicializados
se denominan constantes, las constantes pueden ser de ocho tipos.
BINARIA: Las constantes binarias contienen una serie de ceros (0) y unos (1) y estn
seguidos por una letra b. por ejemplo:
NUMERO EQU 00001000B
DECIMAL: Las constantes decimales contienen una serie de dgitos del 0 al 9 y estn
opcionalmente seguidas por la letra d. una serie de dgitos se considera como un nmero
decimal a menos que cambie la base, ejemplo:
LUGAR EQU 40D
32H
OFFH
En este ejemplo, el 0 fue aadido para indicar al ensamblador que ffH era un nmero
hexadecimal, no un rtulo o nombre de variable.
OCTAL: Las constantes octales contienen los dgitos del 0 al 7 seguidos por la letra o o q,
por ejemplo:
CANTIDAD EQU 6O 6Q
`B`
"J WILLIAMS"
PUNTO FLOTANTE: Este tipo de dato representa valores en notacin cientfica decimal
y no est soportado por el small assembler de IBM . por ejemplo:
SENO DD O.322E-1
54
REAL HEXADECIMAL: Esta es una constante que contiene los dgitos del 0 al 9 y las
letras de la a a la f, seguidas por la letra r. igual que las constantes hexadecimales, el primer
caracter debe ser uno de los dgitos del 0 al 9. La constante debe contener un nmero total
de dgitos que igualen a 8, 16 o 20, a menos que el primer dgito sea un 0, en este caso, el
nmero total de dgitos debe ser uno mayor (9,17 21). Este tipo de dato tampoco est
soportado por el small assembler de IBM. por ejemplo:
NUMERO_DE_HORAS
DD OFAB12345R
En el primer ejemplo, scradd equ [bp + 16], el nombre scradd puede ser sustituido en lugar
de la expresin ndice [bp + 16]. Igualmente, -basnum- se le puede reasignar un nuevo
valor mientras el programa estaba en ejecucin.
CAMPO OPERACIN
El campo de operacin contiene un nemotcnico para una instruccin real del
microprocesador, el nemotcnico es una "ayuda de memoria" de dos a seis caracteres. En
lugar de ser un valor binario o hexadecimal para una instruccin mquina, el nemotcnico
es una abreviatura en ingls, el nemotcnico de operacin hace el cdigo ms fcil de leer y
comprender y es solamente una tabla de conversin interna del valor binario de cdigo
mquina real. Una operacin o nemotcnico puede representar una instruccin mquina,
macroinstruccin o pseudo-operacin, por ejemplo:
INICIAL:
MOV
AX,19H
MACRO
SERVICIO__ID
55
CAMPO OPERANDO
El campo de operandos contiene la posicin o posiciones donde estn los datos que van a
ser manipulados por la instruccin, la instruccin puede requerir uno o dos operandos, si
hay dos operandos, stos estn separados por una coma (,).
Cuando una operacin requiere dos operandos, el primer operando se denomina operando
destino y el segundo se denomina operando fuente. Operaciones de transferencia de datos,
registros, almacenamiento inmediato y almacenamiento de memoria son ejemplos de
instrucciones que requieren dos operandos, por ejemplo:
MOV
AX,8
Este es un ejemplo de operando inmediato. Aqu, el dato a ser manipulado se incluye como
operando fuente y se desplaza al registro AX, u operando destino.
CAMPO COMENTARIO
El campo comentario es el ltimo de los cuatro campos y puede ser uno de los ms tiles.
El campo comentario se utiliza para documentar internamente el cdigo fuente del
ensamblador y son tiles slo al listar el cdigo fuente. Si un comentario se incluye con una
instruccin de operacin, entonces debe estar separado del ltimo campo por al menos un
espacio en blanco y comenzar con un punto y coma (;), un comentario debe ser utilizado
para describir aquellas lneas de cdigo fuente que no son comprensibles inmediatamente.
por ejemplo:
MOV AH,45H
ALMACENAMIENTO
Un programa es simplemente una secuencia de bytes (visto desde el punto de vista del
procesador), al igual que el rea de datos que maneja, y dichos bytes se encuentran
ubicados en alguna parte de la memoria. El procesador no hace distinciones entre un
nmero entero y una cadena de caracteres, simplemente los trata como localidades de
memoria. Por otro lado, el ensamblador permite distinguir entre formatos y cantidad de
bytes por almacenar, se puede solicitar el almacenamiento como se indica:
DB
1 byte
56
DW
DD
DF, DP
DQ
DT