Unidad II - 1 Paradigma Imperativo, Introducción, Ensamblador

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 5

Paradigma Imperativo

Dado que este paradigma comprende a aquellos lenguajes en los cuales el problema se resuelve
a través de una secuencia de sentencias, comandos o instrucciones, es inevitable pensar en un
lenguaje de bajo nivel de abstracción como lo es el Lenguaje Ensamblador.

Lenguaje Ensamblador
Para ello debemos conocer la estructura del microprocesador para el cual programaremos en
ensamblador. Una arquitectura simple con un set de instrucciones relativamente simple es el la
correspondiente al microprocesador (µP) Intel 8086/8088, que permite generar código de
máquina compatible con los actuales µP de la empresa.

Registros de los Microprocesadores 8086/88

Registros de propósito general


AH AX AL AX (Acumulador)
BH BX BL BX (Base)
CH CX CL CX (Contador)
DH DX DL DX (Datos)
Registros índices
SI Source Index (Índice origen)
DI Destination Index (Índice Destino)
BP Base Pointer (Puntero Base)
SP Stack Pointer (Puntero de Pila)
Registro de Bandera
- - - - OF DF IF TF SF ZF - AF - PF - CF Flags (Banderas)
Registros de Segmentos
CS Code Segment (Segmento de Código)
DS Data Segment (Segmento de Datos)
ES Extra Segment (Segmento Extra)
SS Stack Segment (Segmento de Pila)
Registro apuntador de instrucciones
IP o PC Instruction Pointer
<------------------------- 16 bits -------------------------->
Registros de uso general
Registro AX: (acumulador), Utilizado para operaciones que implican entrada/salida, y
multiplicación y división, en conjunto con el registro DX. A menudo conserva el resultado
temporal después de una operación aritmética o lógica.
Registro BX: (base), es el único registro de propósito general que puede ser combinados con
el índice (SI) para direccionamiento indexado. A menudo conserva la dirección base (o
desplazamiento) de los datos en memoria.

Paradigmas y Lenguajes / Paradigmas de Programación


Pag. 38
Registro CX: (Contador). Puede contener un conteo de ciertas instrucciones con corrimiento
(CL) y rotaciones del número de bytes (CX) para ciclos de operaciones con cadenas o para
instrucciones LOOP.
Registro DX: (datos). Contiene la parte más significativa de un producto luego de la
multiplicación de 16 o 32 bits.
Registros de Banderas
Es un registro de 16 bits, de los cuales nueve bits sirven para indicar el estado actual del micro
y el resultado del procesamiento. Muchas instrucciones aritméticas y de comparación cambian
el estado de las banderas y apoyándose en ellas se pueden tomar decisiones para determinar la
acción siguiente.
Los 16 bits del registro de banderas (de 0 a 15), de derecha a izquierda, donde la posición 0 se
encuentra a la derecha y la posición 15 a la izquierda.
- - - - OF DF IF TF SF ZF - AF - PF - CF
Los bits de las banderas son las siguientes:

 OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden después de


una operación aritmética de números con signo (1= overflow; 0=no overflow).
 DF (dirección): Controla la selección de incremento o decremento de los registros SI y DI
en las operaciones con cadenas de caracteres (1=decremento automático; 0=incremento).
DF interactúa con las instrucciones STD y CLD.
 IF (interrupción): Controla el disparo de las interrupciones (1=habilita las interrupciones;
0=deshabilita las interrupciones). La interrupciones no enmascarables son las únicas que no
puede ser bloqueadas por esta bandera. IF interactúa con las instrucciones STI y CLI.
 TF (trampa): Permite la operación del procesador en modo de depuración (paso a paso)
 SF (signo): Contiene el signo resultante de una operación aritmética (0=positivo;
1=negativo).
 ZF (cero): Indica el resultado de una operación aritmética o de comparación (0=resultado
diferente de cero; 1=resultado igual a cero).
 AF (acarreo auxiliar): Contiene el acarreo. Esta bandera interactúa con las instrucciones
DAA y DAS para Ajuste Decimal después de una suma o resta BCD.
 PF (paridad): Indica si el número del bit 1, del byte menos significativos de una operación,
es par (0=número de bits 1 es impar; 1=número de bits 1 es par).

Paradigmas y Lenguajes / Paradigmas de Programación


Pag. 39
 CF (acarreo): Contiene el acarreo del bit de mayor orden después de una operación
aritmética; también almacena el contenido del bit desbordado en una operación de
desplazamiento o de rotación.

Sintaxis de una instrucción


[etiqueta] mnemónico [operando1 [,operando2]]

Mnemónico: es la abreviatura de la función que cumple la instrucción con sus operandos.


De la misma sintaxis se puede sacar la conclusión de una primera clasificación tres grupos,
según cantidad de operandos:
• Sin operando. Por ejemplo. CU. STI. D AA. WATT, etc.
• Con un sólo operando. Por ejemplo. JMP. PUSH. CALL. etc.
• Con dos operandos. Por ejemplo. MOV.

Direccionamientos asociados a una instrucción


Inmediato MOV BL, 3AH Mover Datos 3AH a Registro BL
Registro MOV AX, BX Mover Registro BX a Registro AX
Directo MOV [1234H], AX Mover Registro AX a Posición de Memoria [DS:1234H]
Indirecto por registro MOV [BX], AX Mover Registro AX a Posición de Memoria DS:BX
Base más índice MOV [BX + SI], AX Mover Registro AX a Posición de Memoria DS:BX+SI
Relativo por registro MOV [BX + 4], AX Mover Registro AX a Posición de Memoria DS:BX+4
Relativo base más índice MOV ARRAY [BX + SI], AX Mover Registro AX a Posición de Memoria DS:BX+Array+SI

Paradigmas y Lenguajes / Paradigmas de Programación


Pag. 40
Instrucciones
Las instrucciones del 8086 se las puede clasificar según su función:
 Transferencia de datos
 Aritméticas
 Lógicas y manejo de bits
 Transferencia de control
 Manejo de cadenas
 Entrada/salida

Estructura de una instrucción


Si bien hay instrucciones que requieren más bytes para codificarlas, analizamos estos casos
simples para entender la estructura de la instrucción
mnemonicos opcode/argum. Ejemplo En binario
ADD AL,ib 04 i0 ADD AL,0Fh 00000100 00001111
ADD AX,iw 05 i0 i1 ADD AX,0FFFh 00000101 11111111 00001111
Cabe aclarar que:
ib e iw indican direccionamiento inmediato con byte y word respectivamente
i0 e i1 son los bytes 0 y 1 del argumento de la instrucción (el byte 0 es el menos significativo
en el operando word).
El µP Intel 8086/88 tiene una arquitectura CISC, donde las instrucciones tienen de 1 a 6 bytes
de longitud. Los desplazamientos y los datos inmediatos tienen 8 ó 16 bits dependiendo de la
instrucción. El código de operación y el modo de direccionamiento se encuentran en los
primeros uno o dos bytes de la instrucción.

Paradigmas y Lenguajes / Paradigmas de Programación


Pag. 41
Set de instrucciones de los microprocesadores 8086/8088
AAA ASCII Adjust after Addition JS Jump If Sign
AAD ASCII Adjust before Division JZ Jump If Zero
AAM ASCII Adjust after Multiply LAHF Load Register AH from
AAS ASCII Adjust after Subtraction LDS Load Pointer Using DS
ADC Add with Carry LEA Load Effective Address
ADD Addition LES Load Pointer Using ES
AND Logical AND LOCK Lock the Bus
CALL Call Procedure LODS Load String (Byte or Word)
CBW Convert Byte to Word LODSB Load String Byte
CLC Clear Carry Flag LODSW Load String Word
CLD Clear Direction Flag LOOP Loop on Count
CLI Clear Interrupt-Enable Flag LOOPE Loop While Equal
CMC Complement Carry Flag LOOPNE Loop While Not Equal
CMP Compare LOOPNZ Loop While Not Zero
CMPS Compare String (Byte or Word) LOOPZ Loop While Zero
CMPSB Compare String Byte MOV Move (Byte or Word)
CMPSW Compare String Word MOVS Move String (Byte or Word)
CWD Convert Word to Doubleword MOVSB Move String Byte
DAA Decimal Adjust after Addition MOVSW Move String Word
DAS Decimal Adjust after Subtract MUL Multiply, Unsigned
DEC Decrement NEG Negate
DIV Divide, Unsigned NOP No Operation
ESC Escape NOT Logical NOT
HLT Halt OR Logical OR
IDIV Integer Divide, Signed OUT Output to Port
IMUL Integer Multiply, Signed POP Pop a Word from the Stack
IN Input Byte or Word POPF Pop Flags from the Stack
INC Increment PUSH Push Word onto Stack
INT Interrupt PUSHF Push Flags onto Stack
INTO Interrupt on Overflow RCL Rotate through Carry Left
IRET Interrupt Return RCR Rotate through Carry Right
JA Jump If Above REP Repeat
JAE Jump If Above or Equal REPE Repeat While Equal
JB Jump If Below REPNE Repeat While Not Equal
JBE Jump If Below or Equal REPNZ Repeat While Not Zero
JC Jump If Carry REPZ Repeat While Zero
JCXZ Jump if CX Register Zero RET Return from Procedure
JE Jump If Equal ROL Rotate Left
JG Jump If Greater ROR Rotate Right
JGE Jump If Greater or Equal SAHF Store Register AH into
JL Jump If Less SAL Shift Arithmetic Left
JLE Jump If Less or Equal SAR Shift Arithmetic Right
JMP Jump Unconditionally SBB Subtract with Borrow
JNA Jump If Not Above SCAS Scan String (Byte or Word)
JNAE Jump If Not Above or Equal SCASB Scan String Byte
JNB Jump If Not Below SCASW Scan String Word
JNBE Jump If Not Below or Equal SHL Shift Logical Left
JNC Jump If No Carry SHR Shift Logical Right
JNE Jump If Not Equal STC Set Carry Flag
JNG Jump If Not Greater STD Set Direction Flag
JNGE Jump If Not Greater or Equal STI Set Interrupt Enable Flag
JNL Jump If Not Less STOS Store String (Byte or Word)
JNLE Jump If NOt Less or Equal STOSB Store String Byte
JNO Jump If No Overflow STOSW Store String Word
JNP Jump If No Parity SUB Subtract
JNS Jump If No Sign TEST Test
JNZ Jump If Not Zero WAIT Wait
JO Jump If Overflow XCHG Exchange Registers
JP Jump If Parity XLAT Translate
JPE Jump If Parity Even XOR Exclusive OR
JPO Jump If Parity Odd

PP 5 04 95

Paradigmas y Lenguajes / Paradigmas de Programación


Pag. 42

También podría gustarte