Вы находитесь на странице: 1из 2

Reg.

Generales: EAX,EBX,ECX,EDX, EBP(apuntador base),EDI(índice de destino),ESI(índice ARITMETICA BCD (DAA,DAS): DAA va después de ADD y ADC para convertirlo en BCD y
de origen) esta instrucción SOLO es para AL, DAS va después de una resta ya sea SUB o SBB.
Reg. Especiales: EIP(apuntador seg.codigo),ESP(apuntador a la stack), EFLAGS(banderas) ARITMETICA ASCII (AAA,AAD,AAM,AAS): Estas instrucciones usan AX como destino, los
Banderas: C(acarreo),P(paridad), A(acarreo aux), Z(cero),S(signo),T(trampa), I números ascii van del 30H hasta el 39H. AAA: ajuste ascii después de suma, requiere
(interrupción),D(dirección d=1 decrementa SI/DS d=0 incrementan automáticamente), números como 30H al 31H deja el resultado solo para sumarle el 3030H; ADD: ajuste
O(desbordamiento) ascii ANTES de la división, requiere q AX sea un número BCD desempacado de dos
Reg.segmento: CS,DS,ES.SS,FF y GS son complementarios dígitos y luego se divide en otro BCD desempacado de 1 digito, el resultado es en HEXA
Segmento+desplazamiento predeterminados: CSIP, SSSP o BP, DS(BX,DI,SI), el cociente esta en AL y el residuo en AH; AAM: ajusta ascii después de la multiplicación,
ESDI requiere dos números bcd de 1 digito desempacados, el resultado es un bcd
Modos de direccionamiento: Registros MOV CX,DX, inmediato MOV AL,22H, desempacado. Otra función de AAM es que convierte números hexa del AX desde el
directo MOV CX,LISTA, reg. Indirecto(usando registros índice y base BP,BX,DI,SI 0000H hasta el 0063H en números BCD desempacados; AAS: ajuste ascii despues de la
MOV AX,[BX], base+índice((BP o BX) + (DI o SI)) MOV [BX+DI],CL, RelativoMOV AX, resta, requiere q los números sea del 30h al 39h.
[BX+4] o MOV AX,ARRAY[BX],Base relativa+índiceMOV AX,ARRAY[BX+DI],Indice *Instrucciones lógicas
escaladoMOV EDX,[EAX+4*EBX]. - AND un modo 1, un modo 2 (no deben referirse a memoria al mismo tiempo ni indicar
registro de segmento) Usar BYTE o WORD PTR si el direcc. no es directo
Notas: 1) si los datos comienzan con una letra, el ensamblador requiere q empiecen con C/A bit modo 1 * C/A bit modo 2 -> Ubicación modo 1
un cero 0F2H. 2)MOV BX,OFFSET DATOS obtiene la dirección de memoria en BX - OR y XOR similar a AND
- TEST: Operación and que afecta únicamente a los bits en el registro de banderas
STACKPUSH(coloca en la pila), POP(extrae de la pila) SP direcciona desde la parte - NOT y NEG: NOT o NEG un modo de direccionamiento (no un reg. de segmento) NOT ->
superior a inferior en SS. STACK 200H establece el tamaño de la pila. complemento a 1 NEG -> complemento a 2
* Instrucciones de desplazamiento
LEA: similar a OFFSET ejemplo: MOV BX,OFFSET LISTA; LEA BX,LISTA -SAL y SHL: Desplaza CL veces los bits de LSB a MSB, El bit MSB anterior se almacena en
LDS, LES, LGS, LSS: cargan cualquier registro de 16 o 32 bits con una dirección de el bit CF, se introducen ceros ej. SHL DX,CL ; CL debe estar cargado antes.
desplazamiento (bases o apuntadores predeterminados) y el reg de segmento. (multiplica dato 2^n)
-SHR: MSB a LSB CL veces, almacena LSB anterior en C (divide entre 2^n) e ingresa 0 en
Trasnferencias de datos de cadena: usa DF(bandera de dirección), STD(D=1) y CLD(D=0) MSB
autodecremento e autoincremento para SI/DI, SI direcciona a DS y DI a ES ( es mejor -SAR: Igual que SHR pero mantiene el bit más significativo es decir lo repite por cada
usar cuando DS=ES) desplazamiento.
LODSB,LODSW,LODSD AL=DS:[SI];SI+-1 AX=DS:[SI];SI+-2 EAX=DS:[SI];SI+-4. Observar * Instrucciones de rotación
que LODS funciona predeterminadamente con DS pero puede cambiarse con LODS ES: RCL, RCR: Rotación C MSB LSB de derecha a izquierda o izquierda a derecha C jalado ant.
DATOS4 por ejemplo. ROL, ROR: Rotación MSB LSB de derecha a izquierda o izquierda a derecha, se almacena
STOSB,STOSW,STOSD  AL=ES:[DI];DI+-1 AX=ES:[DI];DI+-2 EAX=ES:[DI];DI+-4. el MSB o el LSB anterior en bit C
Observar que STOS funciona predeterminadamente con ES. Se pueden usar con las *Instrucciones para comparación de strings
instrucciones de repetición como: REP (se repito hasta q CX=0), REPNE (mientras no sea - SCASB, SCASW, SCASD: compara AL, AX o EAX – Byte, palabra o doble palabra
igual), REPE (mientras sea igual), REPZ (mientras sea cero), REPNZ (mientras sea distinto apuntado por DI dentro del seg. ES, luego se incrementa o decrementa DI según el bit D.
de cero) nota: estas repeticiones pueden ejecutarse un máximo de CX veces por lo que - CMPSB, CMPSW: compara DS:[SI] – ES:[DI] -> afecta estado de bits de banderas
decrementan CX en cada repetición. SI y DI autoincrementan según el bit D.
MOVSB,MOVSW,MOVSD: transfieren datos de una posición de memoria a otra, por *saltos ej. JB ETIQUETA
ejemplo MOVSB ES:[DI]=DS[SI];DI y SI +-1. JMP salto incondicional ej JMP SIGUIENTE salta a la etiqueta siguiente
INS: transfire un byte,palabra o doblepalabra desde un dispositivo E/S hacia ES:[DI] y la *saltos condicionales: cuando se comparan números con signo se usan
dirección de E/S esta contenida en DX. INSB ES:[DI]=[DX];DI+-1. JG,JL,JGE,JLE,JE,JNE los términos mayor q y menor q se refieren a los números con signo.
OUTS: transfiere hacia un dispositivo de E/S un byte,palabra o dobleplabra de DS:[SI] Cuando se comparan los números sin signo se usan JA,JB,JAB,JBE,JE y JNE los términos
hacia la dirección del dispositivo en DX OUTSB [DX]=DS:[SI];SI+-1. por encima de y por debajo de se refieren a los números sin signo. JCXZ( salta si CX=0).

XCHG: intercambia el contenido de un registro a otro.


LAHF: transfiere los 8 bits de mas a la derecha de las banderas hacia AH
SAHF: transfiere AH hacia los 8 bits mas a la derecha de las banderas
MOVSX: movimiento y extensión con signo ej. 84H (8bits) se conv. A FF84H (16bits)
MOVZX: movimiento y extensión con ceros ej. 34H (8bits) se conv. A 0084H (16 bits)
Ejemplos MOVSX CX,BL ; MOVZX DX,AL
BSWAP: toma el contenido de cualquier registro de 32 bits e intercambia el primer byte
con el cuarto y el segundo con el tercero.
CMOV: mueve datos únicamente si la operación anterior es cero

DIRECTIVAS:
.CODE inicia el seg de código; .DATA inicia el seg de datos; .MODEL selecciona el modelo
a usar; .STACK selecciona el inicio de segmento de pila; .STARTUP indica la instrucción
inicial en un programa; ASSUME: informa al ensamblador q debe nombrar los seg;
DB,DW,DD,DQ definen byte, palabra, d.pabla, cuádruple palabra; DUP genera
duplicados; END,ENDM,ENDP,ENDS fin de programa, macro, procedimiento y segmento;
FAR define un apuntador lejano; NEAR define un apuntador cercano; ORG establece el
origen dentro de un seg; PROC inicia un procedimiento; PTR designa un apuntador;
SEGMENT inicia un seg para seg completos; STACK inicia un seg de pila para seg
completos. Para .MODEL usar TINY o SMALL
Ejemplos: CODESEG SEGMENT ‘CODE’
ASSUME CS:CODESEG, DS:DATASEG *saltos con lazo a CX y condicionales con CX
ENDS LOOP: salta a la etiqueta puesta a continuación y decrementa CX hasta llegar a 0
ADDEM PROC FAR LOOPE: ejecuta ciclo mientras sea igual y CX!=0, decrementa CX
ADDEM ENDP LOOPNE:ejecuta ciclo mientras no sea igual y CX!=0,decrementa CX
Suma (ADD,ADC,INC): ADD AL,BLAL=AL+BL;INC BLBL+1; ADC AL,AHAL=AL+AH+Ac *Interrupciones
Nota: usar BYTE PTR[BP],WORD PTR[BP], DWORD PTR[BP] en casos no claros de qty bits. - AH=01h/INT 21h: Lee carácter ASCII (lo guarda en AL)y lo muestra en posición actual
Resta (SUB,DEC,SBB): SUB CL,BLCL=CL+BL; DEC BHBH-1; SBB AH,ALAH=AH-AL-Ac del cursor.
CMP: compara dos cantidades y no cambia nada solo las banderas CMP CL,BLCL-BL -AH=02h/INT 21h: DL =carácter ascii a imprimir
Multiplicación (IMUL,MUL): multi con signo y multi sin signo -AH=0Eh/INT 10h: Imprime carácter de AL -00h/16h:leer sin echo
respectivamente.Multiplicacion 8 bits: multiplicando es AL y producto es INT 21H Función 09H Visualización de una cadena de caracteres
AX.Multiplicación 16 bits: multiplicando es AX y producto DX-AX, multiplicación 32 bits: LLAMADA:AH = 09H DS:DX = Segmento: Desplazamiento de la cadena a visualizar
multiplicando es EAX y producto es EDX-EAX. Ej.MUL CL; MUL BX, MUL ECX DS debe apuntar al segmento donde se encuentra la cadena.
Division (IDIV,DIV) división con signo y división sin signo respectivamente. 8bits: el DX debe contener el desplazamiento de la cadena dentro de ese segmento.
dividendo es AX luego el cociente es AL y el residuo es AH en esta división uno debe Ejemplo: Definition of the message in Data segment
convertirse en 16 bits para el caso sin signo y con signo como sigue: # sin signo es MSG DB "This is a message$" or "This...","$"
usando MOVZX y # con signo es CBW convierte un numero con signo de AL hacia un Program in Code segment
numero con signo en AX. 16 bits: dividendo DX-AX después el cociente es AX y el residuo Mov AH, 09H
es DX, 32 bits: dividendo EDX-EAX cociente EAX y residuo EDX. CDQ convierte una doble Mov DX, Offset MSG
palabra en una cuádruple palabra. Int 21 H
PIO (Procesador I/O) - > El CPU controla la transferencia de datos entre el disco duro y procesa la primera. La cpu no necesita esperar, puede agarrar una instrucción al final
la memoria RAM. Ya que el disco duro es más lento que la memoria RAM el sistema se del programa y procesarla antes de instrucciones sobre ella.
ralentiza. Ejecución especulativa:-> si existe una derivación condicional (ej. Un salto jae), el
DMA (Acceso directo de memoria) - > El CPU no es el responsable de transferir datos mecanismo fuera de orden ejecuta ambas derivaciones. Dependiendo de la derivación
entre RAM y disco duro. que se usará se descarta el procesamiento de la otra.
Un reloj es una señal para sincronizar cosas dentro de la computadora. Hz –Ciclos de Arquitectura de 7ma generación de Intel .-> netburst
reloj por segundo. RAT: Tabla de Alias de registros, donde se ubican los registros -> Unidad de renombre
Latencia -> ciclos de reloj que se demora en realizar una función de registro.
La CPU tiene una tabla con la cual sabe cuántos ciclos de reloj se necesitan para Con menos transistores es más sencillo obtener una rapidez de reloj mayor
ejecutar cada instrucción por lo tanto sabe en qué ciclo de reloj puede ejecutar la North bridge -> controlador de memoria, conectado direc. A CPU. Luego controlador
siguiente instrucción de memoria y PCI Express embedido
Arquitectura superescalar -> Los procesadores ejecutan diversas instrucciones en South Bridge. ICH controla dispositivos de e/s, conectado a north
paralelo Estándares motherboard:
Una velocidad de reloj mayor no siempre significa un rendimiento mayor, por ejemplo Factor de forma -> forma y diseño de una motherboard
en un procesador con un ciclo de reloj rápido puede requerir más ciclos en ejecutar El socket del microprocesador > que cpu usará
una instrucción que en otro procesador. El chipset > parte del sistema lógico
Rendimiento de una CPU: Número de unidades de ejecución, tamaño de cache, forma El chip del reloj de tiempo real > chip operado por batería que mantiene
en que transfiere información dentro del CPU, formas en que procesa las instrucciones configuraciones básicas y el tiempo del sistema
dentro de la unidades de ejecución, diferentes velocidades de reloj con el exterior. BIOS -> controla las funciones más básicas de la computadora
La motherboard en la que va el procesador no puede trabajar con la misma señal de Ranuras y puertos: componente periférico interconectado (PCI), puerto de gráficas
reloj, los cables comienzan a actuar como antenas a alta frecuencia por lo que se aceleradas (AGP), Drives electrónicos integrados (IDE), Firewire o serial de bus
pierden las señales ya que son mandadas como ondas de radio universal, ranuras de memoria, arreglo redundante de discos independientes (raid)
Concepto de multiplicación de reloj. La CPU tiene un reloj externo, el cual es usado permite a la computadora reconocer multiples drives como uno.
cuando se transfiere información hacia y desde la memoria RAM, y un reloj interno L0-> cache microinstrucciones decod,, l2 cache de medio nivel mlc, l3 cache de ultimo
más veloz. Ej. 3.4GHz Pentium, el 3.4 se refiere al reloj interno, el cual se obtiene nivel L1 cache instrucciones
multiplicando por 17 su reloj externo de 200MHz. Cuando tiene que leer información Pentium 4 se guardaban instrucciones repetidas en el cache, no pasa en el cache de
de la RAM tiene que reducir su reloj. microinstrucción
Técnicas para reducir el impacto de la diferencia en el reloj: Usar memoria cache Arquitectura de anillo. Los componenetes no se comunican directamente, usan el
dentro de la CPU, transferir más de un bloque o “chunk” de datos por ciclo de reloj. anillo para pasar información. Turbo boost-> overclock cpu cuando la cpu pide más
AMD 2 datos por ciclo (DDR: Dual Data Rate) de reloj, INTEL 4 por ciclo (QDR: Quad potencia de procesamiento. TDP potencia térmica diseñada.
Data Rate). Por esta razón una AMD es indicada que tiene el doble de su señal de reloj Pentium iv: 128 registros internos. 5 unidades de ejecución trababjando en paraleo y 2
real (200 MHz de reloj externo se lista como de 400MHz). Similar con Intel. para cargar y almacenar datos en la memoria ram. 64 bits datapath transfer rate =
Ruta de datos entre RAM y CPU 64 bits para configuración de un canal de memoria number of bits x clock / 8
(dual 128 bits). Pentium netburst es más rápido que M solo por la rapidez de los ciclos de reloj. La
Las rutas de datos entre unidades del CPU pueden ser mayores pipeline de Pentium 4 tiene 20 estados, Pentium 3 solo 11. Si trabajaran a la misma
Velocidad de transferencia: Relación entre número de bits usados y velocidad de reloj rapidez de reloj la Pentium 3 sería más rápida
bits x clock/8
Memoria cache (estática) más rápida, consume mayor potencia, más cara y
físicamente más grande que memoria RAM. Puede operar al reloj de la CPU. Cuando la
CPU carga un dato de una dirección específica de memoria, un circuito llamado
controlador de memoria cache carga en la memoria cache todo un bloque de datos
debajo de la posición actual que el CPU solicitó. El CPU no tendrá que salir a buscar
datos ya que estarán en la memoria cache a la cual puede accesar la velocidad de reloj
interna. El controlador siempre está observando la posición de memoria carga y
cargando datos desde varias posición después. Depende del número de páginas, eje:
4kB páginas, se cargan los datos desde 4096 direcciones por debajo de la posición
actual de memoria cargada. “Hit” -> datos en el cache, “miss” no está
L1 data cache(output), L1 instruction cache (input), L2 cache. 128kB separados : 64kB
cache instrucción y 64 cache datos. Cache instrucción = cache de ejecucion de
rastreo(con diferente nomnbre y locación) en ciertos procesadores
Derivacionoes (branching) : problemas cuando hay saltos, sol. los controladores de
cache analizan el bloque de memoria que cargo y cada vez que encuentra un salto,
carga el bloque de memoria de esa posición en L2 antes que el CPU llegue. Si existen
saltos condicionales, el controlador carga ambas condiciones en la memoria cache,
después de que el CPU lo procese se descarta la que no se usó. Es mejor esto que
estar accesando memoria RAM.
La unidad de extracción (fetch) se encarga de leer instrucciones desde la memoria. Ve
si la instrucción está en L1 cache de instrucción, Si no está la busca en L2 memoria de
cache, si no está ahí la lee directamente de la RAM. Manda la instrucción requerida
por la CPU a la unidad de decodificación para procesarla, ve que hará esa instrucción
consultando una memoria ROM dentro de la CPU llamada microcodigo. Ese
microcodigo le enseña a la CPU que debe hacer. Si es necesario datos la unidad de
decodificación se lo pide a la de extracción. Pasa los datos necesarios y los pasos para
ejecutar la instrucción a la unidad de ejecución. (Arquitectura superescalar) Distintas
unidades de ejecución especializadas en un tipo de instrucciones, ej. FPU que se
encarga de instrucciones mate. Cmplx. Usualmente entre unidad de decode y
ejecución -> unidad de envío o programación (dispatch o Schedule) > manda la
instrucción a la unidad de ejec. Correcta. Unidades genéricas “ALU” unidad lógica y
aritmética.
Fin del procesamiento > resultado a L1 cache de datos, el cual puede ser mandado a la
RAM u otro lugar dependiendo de sig. Instruc.
“pipeline”: capacidad de tener distintas instrucciones en diferentes estados de la CPU
al mismo tiempo. (El proceso descrito anterior se puede realizar de tal forma que las
unidades siempre estén trabajando). “CPU con una pipeline de 11 estados” se refiere
que tiene 11 unidades. Lista de todos los estados por los que tiene que pasar una
instrucción para ser ejecutada
Otras formas de incrementar rendimiento de CPUs: OOO (Ejecución fuera de orden)->
el mecanismo fuera de orden instrucciones para mandarlas de tal forma que las
unidades de ejecución siempre estén ocupadas (busca instrucciones sin importar el
orden) eje: se tiene un ALU y un FPU, llegan dos instrucciones que se tienen que
ejecutar por el ALU y después una para el FPU, no se esperará a que se procese la
primera instrucción para que las otras puedan pasar al ALU y el FPU respectivamente,
si no que sin importar el orden se manda al FPU la tercera instrucción mientras aún se

Вам также может понравиться