1 Programación avanzada en Ensamblador Cesáreo Fernández Martínez Álvaro Sánchez Miralles Título Presentación - 2 Tareas que realiza el programa ensamblador • Traduce el fuente .a66 a código máquina .obj – mov Rx, Ry – mov reg, #dato • Resuelve los valores de las etiquetas – Lleva un contador direcciones en memoria de las instrucciones. La etiqueta toma el valor de la dirección de memoria de la instrucción asociada Escribir programa en el editor Ensamblador Fichero *.a66 Código máquina Fichero *.obj Ejecutar Enlazar Librerías .obj Código máquina Fichero *. F0 x y E6 reg dato Código de instrucción Número de GPR Código de instrucción Número de SFR Número de 16 bits
Documento que ayudara a comprender el uso del codigo ensamblador
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1
Programación avanzada en Ensamblador
Cesáreo Fernández Martínez
Álvaro Sánchez Miralles
Título Presentación - 2
Tareas que realiza el programa ensamblador
• Traduce el fuente .a66 a código máquina .obj– mov Rx, Ry
– mov reg, #dato
• Resuelve los valores de las etiquetas– Lleva un contador direcciones en memoria de las
instrucciones. La etiqueta toma el valor de la dirección de memoria de la instrucción asociada
bucle: CMP R0,#5 ; if i>NJMPR cc_sgt,fin ; then goto ´fin’ADD 0xfa00,R1 ; j += 1ADD R0,#1 ; i += 1JMPS bucle ; = jmpr cc_uc,
fin:
Etiquetas (op)
Instrucción Operandos Comentarios (opcional)
Título Presentación - 4
Números con y sin signo
• Un número negativo es el que sumado a el mismo positivo da como resultado 0. ¿Cómo hacerlo?– Ejemplo en 16 bits: 0xFFFF + 0x0001 = 0x0000 (ya que el resultado
no cabe en 16 bits)
– Ejemplo en 8 bits: 0xFF + 0x01 = 0x00 (ya que el resultado no cabe en 8 bits)
0xFFFF (-1)0x0001 (1)
0xFFFE (-2)0x0002 (2)
0xFFFD (-3)0x0003 (3)
Número -Número +
3
Título Presentación - 5
Números con y sin signo
• Aritmética en “Coma fija complemento a 2”– Números positivos: bit más significativo (bit 15) a 0.
– Números negativos: bit más significativo (bit 15) a 1.
• Overflow (Flag V del registro PSW)– Cuando operando dos números positivos se obtiene un número
negativo
0x7FFF + 0x0001 = 0x8000 (“Overflow”; V = 1)
0x7FFE + 0x0001 = 0x7FFF (V = 0)
• Carry (Flag C del registro PSW)– Cuando operando dos números no cabe el resultado en 16 bits
• ¿Cómo se calcula un número negativo?– En decimal se aplica la formula ¿cual es el negativo de 2 en 8 bits?
– En binario o hexadecimal (0000 0010 B)
• Se hace el complemento a 1 del número (1111 1101 B)
• Se le suma uno (1111 1110 B)
– El número negativo de 2 en 8 bits es el 254 ó 0xFE ó 11111110B.
• Como el micro sólo entiende de 0's y 1's cuando hay un número en la memoria (por ejemplo 1111 1110) ¿Quésignifica?– Si se interpreta con signo es el número negativo de 2 ó -2
– Si se interpreta sin signo es el número 254
– Depende del programador y de las instrucciones que use el que le da una interpretación u otra.
• Desplaza num veces a la izquierda los bits de Rx
– SHL Rx, Ry
• Desplaza a la izquierda Rx, el número de posiciones indicadas en Ry
– Introduce ceros por la derecha
MOV R0,#0x0001SHL R0,#9
¿Qué vale R0?
AND R0,#0xFFFD ; se pone a 0 el bit 1 de R0MOV R2,R1 ; para no modificar R1AND R2,#0x0001 ; se selecciona el bit 0 de R2SHL R2,#1 ; el bit 0 pasa a ser el bit 1OR R0,R2 ; R0.1 = R2.1 = R1.1
Se quiere poner el bit1 del registro R0 igual
que el bit 0 del registro R1.
Rx 16 bits C0
Título Presentación - 20
Rotaciones
• ROL (ROtate Left) o ROR (ROtate Right)– ROL Rx, #num
• Desplaza num veces a la izquierda los bits de Rx
• Rota los bits usando el bit de carry C
– ROL Rx, Ry
• Desplaza a la izquierda Rx, el número de posiciones indicadas en Ry
• Rota los bits usando el bit de carry C
MOV R0,#0x8001ROL R0,#9¿Qué vale R0?
Rx 16 bits C
11
Título Presentación - 21
Control de flujo de programa. Saltos.
• Comparación– Ej: CMP Rx, Ry ; Actualiza PSW como una resta Rx - Ry
• Saltos– JMPR va precedido de CMP (compara), de forma que después de
comparar se realiza el salto según una condición.
– JMPR:
• Jmpr cc_eq, dir (equal, salta si igual)
• Jmpr cc_uc, dir (unconditional, salta siempre)
• Jmpr cc_ne, dir (not equal, salta si no igual)
• Jmpr cc_ugt, dir (unsigned greater than)
• Jmpr cc_sgt, dir (signed greater than)
• Jmpr cc_ule, dir (unsigned less or equal)
• ...
CMP R0,R1JMPR cc_ugt,next ;si R0 > R1....
next:
Título Presentación - 22
Saltos “a nivel de bit”
• Salto si el bit está a 1– JB bit, dir
• Salto si el bit está a 0– JNB bit, dir
• Consideraciones– Sólo en zonas bit a bit
– No necesitan CMP antes
F600
FC00
FD00
FFFF
FF00
FE00
RAM
SFR’s
STACK
GPRs
Acceso bit a bit
SFRs
SFRs acceso bit a bit
JB C,next ;si C = 1 salta next....
next:
12
Título Presentación - 23
“move” a nivel de bit
• Poner un bit a 1– BSET bit ; bit = 1
• Poner un bit a 0– BCLR bit ; bit = 0
• Mover un bit– BMOV bit1, bit2 ; bit1 = bit2
• Lógicas (a nivel de bit)– BAND bit1, bit2 ; bit1 <- bit1 and bit2
– BOR bit1, bit2 ; bit1 <- bit1 or bit2
– BXOR bit1, bit2 ; bit1 <- bit1 xor bit2
• Consideraciones– Sólo en zonas bit a bit
;activa bit 1 del P2 BSET P2.1 ; BCLR C ; Carry = 0BMOV V,C ; V=C