Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Le Apendice D PDF
Le Apendice D PDF
________________________________________________________________________________________
APNDICE D
Directivas, Operadores e Instrucciones del Lenguaje
Ensamblador
DIRECTIVAS (PSEUDO-OPERACIONES)
nombre
EQU
expresin
COLUMNAS
FILAS
PANTALLA
MOVER
EDICION
DIRECCION
EQU
EQU
EQU
EQU
EQU
EQU
80
25
FILAS*COLUMNAS
MOV
"PULSAR TECLA"
[SI+BX]
[nom_variable]
EQU
expresin
La directiva DB reserva memoria para datos de tipo byte (8 bits), o para una
variable de este tipo, inicializando o no dicho byte y los posteriores.
El nombre de la variable es opcional, y se asigna dicho nombre para el primer
byte (recordar que el lenguaje mquina no entiende de variables, si no de
direcciones de memoria. Una variable es una etiqueta o referencia para el
compilador, el cual sustituye cada referencia a esta variable por la direccin de
memoria correspondiente).
51
________________________________________________________________________________________
La
expresin
es
el
valor
inicial
de
la
variable,
puede
ser:
VALOR
TEXTO
CALCULO
RESERVA
NODEFIN
DB
DB
DB
DB
DB
111
"HOLA, SOY UN TEXTO"
15*2
15 DUP(?)
?
(Define
(Define
(Define
(Define
(Define
Byte)
Word)
Doubleword)
Quadword)
Terabyte)
Directiva SEGMENT
Sintaxis:
nombre
...
...
...
nombre
ENDS
________________________________________________________________________________________
Directiva ASSUME
Sintaxis:
ASSUME
ASSUME
reg_segmento:nom_segmento,reg_segmento:nom_segmento...
NOTHING
53
________________________________________________________________________________________
nombre
...
...
...
nombre
PROC
[atributo]
ENDP
PROC1
PROC1
PROC
FAR
(instrucciones)
RET
ENDP
;
;
;
;
;
Directiva END
Sintaxis:
END
[expresin]
END
END
INICIO
OPERADORES
Operador OFFSET
Sintaxis:
OFFSET
OFFSET
<variable>
<etiqueta>
54
________________________________________________________________________________________
Ejemplo:
MOV
DB
DB
DB
num DUP(valor)
INSTRUCCIONES
Instruccin MOV (MOVe)
Sintaxis:
MOV op_destino,op_fuente
FORMATOS
MOV reg8,reg8
MOV reg16,reg16
MOV segreg,reg16
MOV reg16,segreg
MOV reg,mem
MOV mem,segreg
MOV segreg,mem
MOV reg,inmediato
MOV mem,inmediato
; Sintaxis bsica
EJEMPLOS
MOV AH,BL
MOV AX,BX
MOV ES,AX
MOV CX,DS
MOV CH,[AA55H]
MOV [DI],DS
MOV SS,[4584H]
MOV CX,2450H
MOV BYTE PTR [SI],20
Ejemplos:
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
AX,BX
DL,CH
BX,1500
AX,[2458H]
[2458H],AL
[BX],AL
AL,[BX]
DS,AX
;
;
;
;
;
;
;
;
AX=BX
DL=CH
BX=1500
AX=contenido
contenido en
contenido en
AL=contenido
DS=AX
55
en DS:2458H
DS:2458H=AL
DS:BX=AL
en DS:BX
________________________________________________________________________________________
MOV
MOV
MOV
MOV
MOV
MOV
MOV
CL,[SI+4]
AX,[BP+7]
[BX+DI-4],DX
DS,[BP+SI]
AX,[BP+SI+4]
BYTE PTR [1547H],25
WORD PTR [1457H],AA55H
;
;
;
;
;
;
;
CL=contenido
AX=contenido
contenido en
DS=contenido
AX=contenido
contenido en
contenido en
AX,[4520H]
AL,[4520H]
AX,1
en DS:SI+4
en SS:BP+7
DS:BX+DI-4=DX
en SS:BP+SI
en SS:BP+SI+4
DS:1547H=25
DS:1457H=AA55H
ES:[45],AL
INSTRUCCIONES ARITMETICAS
Instruccione INC (INCrement)
Sintaxis:
INC
INC
reg
mem
56
________________________________________________________________________________________
AX
; AX=AX+1
DL
; DL=DL+1
WORD PTR ES:[DI+4] ; Increm. palabra contenida
; en ES:DI+4
reg
mem
AX
; AX=AX-1
DL
; DL=DL-1
BYTE PTR ES:[DI+4] ; Decrem. byte contenido en
; ES:DI+4
FORMATOS
ADD
reg,inmediato
ADD
mem,inmediato
ADD
reg,reg
ADD
mem,reg
ADD
reg,mem
; Sintaxis bsica
EJEMPLOS
ADD AX,3500
ADD BYTE PTR [SI],35
ADD BX,DX
ADD [BX],AX
ADD AH,[BX]
FORMATOS
SUB
reg,inmediato
SUB
mem,inmediato
SUB
reg,reg
SUB
mem,reg
SUB
reg,mem
; Sintaxis bsica
EJEMPLOS
SUB AX,3500
SUB BYTE PTR [SI],35
SUB BX,DX
SUB [BX],AX
SUB AH,[BX]
57
________________________________________________________________________________________
BL
CX
BYTE
WORD
CL
DX
BYTE
WORD
PTR
PTR
PTR
PTR
;
;
[BX]
;
[SI]
;
;
;
[SI+2] ;
[BX+DI];
AX=AL*BL
DXAX=AX*CX
AX=AL*byte contenido en DS:BX
DXAX=AX*palabra contenida en DS:SI
AX=AL*CL
DXAX=AX*DX
AX=AL*byte contenido en DS:SI+2
DXAX=AX*palabra contenida en DS:BX+DI
reg
mem
reg
mem
CL
; AX / CL
BX
; DXAX / BX
BYTE PTR [SI+2] ; AX / contenido en DS:SI+2
58
________________________________________________________________________________________
DIV
IDIV
IDIV
IDIV
IDIV
/ contenido en DS:DI+BX
DH
/ CX
contenido en DS:DI+BX
/ contenido en DS:si+8
INTRUCCIONES LOGICAS
reg
mem
Realiza un NOT lgico, bit a bit, con el operando, es decir, que invierte el valor
de cada uno de los bits del operando.
Ejemplos:
NOT
NOT
DI
BYTE PTR [BX]
reg,reg
reg,mem
reg,inmediato
mem,reg
mem,inmediato
Ejemplos:
AND
AND
AND
AND
AND
AX,BX
SI,ES:[DI]
BX,0A34H
ES:[BX],CX
BYTE PTR [SI+4],5
;
;
;
;
;
AX=AX AND BX
SI=SI AND ES:[DI]
BX=BX AND 0A34H
ES:[BX]=ES:[BX] AND CX
[SI+4]=[SI+4] AND 5
Instruccion OR (OR)
Sintaxis:
OR
OR
OR
reg,reg
reg,mem
reg,inmediato
59
________________________________________________________________________________________
OR
OR
mem,reg
mem,inmediato
Ejemplos:
OR
OR
OR
OR
OR
AL,BL
DI,[BX]
CL,34
[DI],BX
BYTE PTR [DI],8
;
;
;
;
;
AL=AL OR BL
DI=DI OR [BX]
CL=CL OR 34
[DI]=[DI] OR BX
[DI]=[DI] OR 8
reg,reg
reg,mem
reg,inmediato
mem,reg
mem,inmediato
Ejemplos:
XOR
XOR
XOR
XOR
XOR
CX,BX
DI,ES:[SI]
AX,4500H
[BX],AX
BYTE PTR [SI+BX],50
;
;
;
;
;
CX=CX XOR BX
DI=DI XOR ES:[SI]
AX=AX XOR 4500H
[BX]=[BX] XOR AX
[SI+BX]=[SI+BX] XOR 50
Instruccin LOOP
Sintaxis:
etiqueta
MOV
...
...
LOOP
CX,valor_inicial
etiqueta
Ejemplo:
60
________________________________________________________________________________________
; ABC.ASM -> Imprime el abecedario
CODIGO SEGMENT
ASSUME CS:CODIGO
INICIO: MOV
DL,65
; Carcter inicial (A)
MOV
CX,26
; Nmero de letras
BUCLE: MOV
AH,2
; Servicio para imprimir carcter
INT
21H
INC
DL
; Incrementar carcter actual
LOOP
BUCLE
; Repetir mientras CX no sea cero
MOV
AX,4C00H
; Salir al DOS
INT
21H
CODIGO ENDS
END
INICIO
direc
etiqueta
Ejemplos:
JMP
JMP
JMP
100H
55AAH:100H
WORD PTR [BX]
JMP
REPITE
;
;
;
;
;
;
Salta a CX:100h
Salto lejano a otro segmento
Salto a la direccin contenida en
la direccin de memoria especificada
por BX (salto indirecto)
Salto a la etiqueta REPITE
direc
CALL
...
...
...
...
RET
direc
; Saltar a direc
; Direccin de retorno
; Direccin de salto
________________________________________________________________________________________
SALTOS CONDICIONALES
etiqueta_corta
SIGNIFICADO
Si est por encima
Si est por encima o igual
Si est por debajo
Si est por debajo o igual
Si hay acarreo
Si CX=0
Si es igual
Si es mayor
Si es mayor o igual
Si es menor
Si es menor o igual
Si no est por encima
Si no est por encima ni igual
Si no est por debajo
Si no est por debajo ni igual
Si no hay acarreo
Si no es igual
Si no es mayor
Si no es mayor ni igual
Si no es menor
62
SALTAR SI
CF=0 y ZF=0
CF=0
CF=1
CF=1 ZF=1
CF=1
CX=0
ZF=1
ZF=0 y SF=OF
SF=OF
SF no = OF
ZF=1 SF<>OF
CF=1 ZF=1
CF=1
CF=0
CF=0 y ZF=0
CF=0
ZF=0
ZF=1 SF<>OF
SF no = OF
SF=OF
________________________________________________________________________________________
JNLE (*)
Si no es menor ni igual
ZF=0 y SF=OF
JNO (*)
Si no hay desbordamiento
OF=0
JNP
Si no hay paridad (impar)
PF=0
JNS (*)
Si no hay signo
SF=0
JNZ
Si no es cero
ZF=0
JO
(*)
Si hay desbordamiento
OF=1
JP
Si hay paridad (par)
PF=1
JPE
Si hay paridad par
PF=1
JPO
Si hay paridad impar
PF=0
JS
(*)
Si hay signo
SF=1
JZ
Si es cero
ZF=1
----------------------------------------------------------------(*) Se usan para aritmtica con valores con signo
EJEMPLOS:
ADD
JC
BL,CL
GRANDE
; BL=BL+CL
; Saltar a GRANDE si hay acarreo
SUB
JNZ
BL,CL
DISTINTO
; BL=BL-CL
; Saltar a DISTINTO si BL no es cero
COMPARACIONES
CONDICION
OPERANDOS SIN SIGNO
fuente < destino
fuente = destino
fuente > destino
OPERANDOS CON SIGNO
fuente < destino
fuente = destino
fuente > destino
operando_destino,operando_fuente
OF
SF
ZF
CF
NI
NI
NI
NI
NI
NI
0
1
0
0
0
1
0/1
0
0/1
0
0
1
0
1
0
NI
NI
NI
NI : No Importa
0/1 : 1 0 dependiendo
del valor de los
operandos
Cuando se utiliza la instruccin CMP para evaluar un salto condicional (se usa
justamente antes de la instruccin de salto condicional), hay que tener en
cuenta la siguiente tabla:
SALTAR SI
SIN SIGNO CON SIGNO
destino>fuente
JA
JG
destino=fuente
JE
JE
destino<>fuente
JNE
JNE
63
________________________________________________________________________________________
destino<fuente
destino<=fuente
destino>=fuente
JB
JBE
JAE
JL
JLE
JGE
TIPOS DE SALTO
MAYOR:
IGUAL:
MENOR:
AL,100
MAYOR
IGUAL
MENOR
MAYOR100
IGUAL100
MENOR100
;
;
;
;
;
;
;
Decodificar la instruccin.
Ejecutar la instruccin.
Salto corto (short jump): Indica un byte en complemento a dos (-128 a +127) que
es el nmero de bytes a restar o sumar a IP. Este valor lo calcula el ensamblador a
travs de las etiquetas.
Salto cercano (near jump): Indica dos bytes (palabra) en complemento a dos (32768 a +32767), que es el nmero de bytes a restar o sumar a IP. Este valor es
calculado por el ensamblador a travs de las etiquetas. Tanto el salto corto, como el
salto cercano se refiere al mismo segmento de cdigo.
64
________________________________________________________________________________________
Salto lejano (far jump): Indica dos palabras, que contienen el offset y el segmento
donde hay que saltar. Este formato copia en IP y CS respectivamente los valores de
la instruccin.
Salto cercano (near jump): Lee de la direccin de memoria una palabra y la copia
a IP.
Salto lejano (far jump): Lee de la direccin de memoria una palabra y la copia
a IP. Despus lee la siguiente palabra y la copia a CS.
EJEMPLOS:
JMP
JMP
JMP
JMP
JMP
JMP
JMP
CERCANA
;
FAR PTR LEJANA;
55AAHH:0100H ;
[BX]
;
WORD PTR [BX] ;
FAR PTR [BX] ;
DWORD PTR [BX];
SALTO
JMP
SALTO
JMP
Salto
Salto
Salto
Salto
Salto
Salto
Salto
directo a
directo a
directo a
indirecto
indirecto
indirecto
indirecto
DW
CERCANO ; Desplazamiento de CERCANO (offset)
...
SALTO ; Salto indirecto al mismo segmento a CERCANO
DD
LEJANO ; Desplazamiento de LEJANO (segmento y offset)
...
SALTO
; Salto indirecto a otro segmento a LEJANO
65