Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ESEG SEGMENT
;Definición de datos extra
ESEG ENDS
DSEG SEGMENT
;Definición de datos
DSEG ENDS
Primera BYTE 15
Segunda WORD -123
Tercera DWORD 45678
Cuarta QWORD 987654
Nombre BYTE “Juan Pérez”
Longitud EQU $ - Nombre
PrimerVector BYTE 1, 9, 2, 8, 3, 7, 4, 6, 5
SegundoVector WORD 2 DUP ( “Vacio” )
Elementos EQU 10
TercerVector DWORD Elementos DUP ( 0 )
Ultimo WORD -32768
2.1.1 Movimiento
2.1.2 Pila
2.1.3 Matemáticos
2.1.4 Ajuste
2.1.5 Comparación
MOV Destino, Fuente ;Move
Combinaciones válidas:
Combinaciones no válidas:
Memoria, memoria
Registro segmento, registro segmento
Registro segmento, inmediato
LEA Registro32, Memoria ;Load effective address
Ejemplo.-
ESI = 00000201H
EDI = 00000205H
LDS Registro32, Memoria
LES Registro32, Memoria
Entonces:
Combinaciones válidas:
Combinaciones no válidas:
Memoria, memoria
Ejercicio.- Determinar cual de las siguientes instrucciones es
correcta. Indique los errores en las instrucciones incorrectas.
1. Aritmética binaria
2. Aritmética empacada en BCD
3. Aritmética desempacada en BCD
Investigar que son los números BCD.
1 Hoja manuscrita.
Fecha:
a).- Adición entera:
ADD/ADC {Registro/Memoria},{Registro/Memoria/Inmediato}
Combinaciones no válidas:
Memoria, memoria
Combinaciones no válidas:
Memoria, memoria
Combinaciones válidas:
NEG/INC/DEC {Registro/Memoria}
d).- Extensión del signo:
Multiplicación:
AL AX EAX
X operando de 8 bits X operando de 16 bits X operando de 32 bits
AX DX:AX EDX:EAX
División:
AL AX
Operando de 8 bits AX Operando de 16 bits DX:AX
AH DX
EAX
Operando de 32 bits EDX:EAX
EDX
MUL Operando ;Multiplicación sin signo
IMUL Operando ;Multiplicación con signo
DIV Operando ;División sin signo
IDIV Operando ;División con signo
BCD BINARIO
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
Los números BCD pueden ser empacados o desempacados. En
los números BCD empacados se pueden almacenar dos dígitos
en un byte (8 bits) y en los números BCD desempacados sólo
se puede almacenar un dígito por byte.
Ejemplo.-
a) 24 00100100
+ 13 00010011
---- ---------
37 00110111
b) 19 00011001
+ 24 00100100
--- ---------
3D 00111101
c) 19 00011001
+28 00101000
--- ---------
mal 41 01000001
a) 24 00100100
-13 00010011
--- ---------
00100100
11101101 (Complemento a dos del 13 BCD)
---------
11 00010001
b) 24 00100100
-18 00011000
--- ---------
00100100
11101000 (Complemento a dos del 18 BCD)
---------
0C 00001100
Ejemplo.-
Combinaciones válidas:
2.2.1 Incondicional
2.2.2 Condicional
JMP Destino ;Jump
Ejemplos.-
JMP Etiqueta
JMP SHORT Etiqueta ;Salta distancias de –128 bytes a 127 bytes
JMP NEAR PTR Etiqueta ;Salta distancias de –32,768 bytes a 32,767 bytes
JMP FAR PTR Etiqueta ;Salta a otro segmento
Antes de ver las instrucciones de transferencia condicional, se darán
los significados de las iniciales utilizadas en estas instrucciones:
S => Sign
C => Carry
O => Overflow
P => Parity
A continuación vienen las treinta instrucciones de salto condicional y
las banderas que deben ser verificadas antes de saltar:
OF (Overflow)
1 – El resultado esta fuera del rango de los números con signo
0 – El resultado esta dentro del rango de los números con signo
CF (Carry)
Acarreo del (prestamo del ) bit de mayor orden.
SF (Sign)
El bit de mayor orden del resultado.
ZF (Zero)
1 – El resultado es cero.
0 – El resultado es diferente de cero.
Instrucción Bandera verificada
JS SF = 1
JNS SF = 0
JC CF = 1
JNC CF = 0
JO OF = 1
JNO OF = 0
JP/JPE PF = 1
JNP/JPO PF = 0
Nota.- Etiqueta sólo puede especificar un salto corto (de –128 bytes).
Nota.- Ninguna instrucción de ciclo afecta el registro de banderas.
Ejemplos.-
a)
MOV ECX, N
CICLO:
------
------
------
LOOP CICLO
b)
MOV ESI, -1
MOV ECX, 100
CICLO:
INC ESI
CMP Tabla[ESI], 10
LOOPNE CICLO
;Busca en el arreglo
;Tabla el valor 10
2.4 Operadores lógicos.
AND Destino, Fuente ;AND lógico
OR Destino, Fuente ;OR
XOR Destino, Fuente ;OR exclusivo
NOT Destino ;Negación (complemento a 1)
Combinaciones válidas:
Prender un bit.-
AH = 11110000
Poner un 1 en el tercer bit
OR AH, 00001000B
Apagar un bit.-
AH = 10101010
Poner un 0 en el séptimo bit
AND AH, 01111111B
Uso de las instrucciones lógicas:
Preguntar si un bit está prendido o apagado.-
AH = 11001100
¿El bit #2 está prendido?
AND AH, 00000100B
JNZ PRENDIDO
JZ APAGADO
Uso de XOR.-
La instrucción XOR tiene la característica que después de haberla aplicado
dos veces con el mismo valor, se recupera el valor original:
AH= 11111111
XOR 01010101
RES. 10101010
XOR 01010101
ORIG. 11111111
2.5 Desplazamientos.
2.5.1 Lineal
2.5.2 Circular
SHL Destino , Contador
SAL Destino , Contador
SHR Destino , Contador
SAR Destino , Contador
SHL CF DESTINO 0
SAL CF DESTINO 0
SHR 0 DESTINO CF
SAR DESTINO CF
ROL CF DESTINO
ROR DESTINO CF
RCL CF DESTINO
RCR DESTINO CF
2.6 Procesos de control.
2.6.1 Banderas
2.6.2 Cadenas
CLC ;Clear carry
CMC ;Complement carry
STC ;Set carry
CLD ;Clear direction
STD ;Set direction
CLI ;Clear interrupt
STI ;Set interrupt
LAHF ;Load AH flags
SAHF ;Set AH flags
Bandera de acarreo
CLC => CF = 0
CMC => CF <> CF
STC => CF = 1
Bandera de dirección
CLD => DF = 0
STD => DF = 1
Bandera de interrupción
CLI => IF = 0
STI => IF = 1
MUL EBX
MOV DL, [ESI]
AND EDX, 0000000FH ; Convertir dígito a número
ADD EAX, EDX
INC ESI
JMP Empezar
; Si tenía signo, negar el número
Terminar: CMP EDI, 0
JE Salir
NEG EAX
; Dejarlo en número
Salir: MOV Numero, EAX
POPAD
1. E.U.P.E. que lea un número desde el teclado y determine si el número es
primo o no primo y muestre un mensaje indicando el resultado.
Ejemplos:
Ejemplo:
2.- E.U.P.E. que obtenga un substring. Lea del teclado los datos (string,
posición inicial y número de caracteres a obtener). Despliegue en pantalla su
resultado.
3.- E.U.P.E. que encuentre la posición de un carácter. Lea del teclado el string
y el carácter a buscar, en caso de no encontrarlo enviar un mensaje.