Professional Documents
Culture Documents
x y
Nmero de GPR
reg
Nmero de SFR
dato
Ensamblador
Nmero de 16 bits
Ejecutar
Ttulo Presentacin - 2
Ejemplo de ensamblador
Las etiquetas facilitan la programacin en ASS
Etiquetas (op)
bucle:
; ; ; ; ; ; ;
fin:
Instruccin
Operandos
Comentarios (opcional)
Ttulo Presentacin - 3
Ejemplo en 8 bits: 0xFF + 0x01 = 0x00 (ya que el resultado no cabe en 8 bits)
Ttulo Presentacin - 4
Como el micro slo entiende de 0's y 1's cuando hay un nmero en la memoria (por ejemplo 1111 1110) Qu significa?
Si se interpreta con signo es el nmero negativo de 2 -2 Si se interpreta sin signo es el nmero 254 Depende del programador y de las instrucciones que use el que le da una interpretacin u otra.
Ttulo Presentacin - 6
Instruccin MOV.
Directo a registro
MOV r0,r1 r0,#3 r0,0fa00H r0,[r1] r0,[r1+] r0,[-r1] r0,[r1+#4] rl0,#3 rh0,[r1+] ; R0 <- R1 ; R0 <- 3 (no olvidar # !) ; R0 <- Mem[fa00 H] ; R0 <- Mem[R1] (R1 Puntero) ; R0 <- Mem[R1], R1 <- R1 + 2 ; R1 <- R1 - 2, R0 <- Mem[R1] ; R0 <- Mem[R1+#4] ; R0 <- 3 ; R0 <- Mem[R1], R1 <- R1 + 1
Inmediato
MOV MOV MOV MOV MOV MOV MOVB MOVB
A nivel de byte
Ttulo Presentacin - 7
MOVBS Carga el byte en parte baja, extiende (a los 16 bits) con bit de signo
MOVBS MOVBS R0,#0xFF ; r0 <- 0xFFFF R0,#-1 ; r0 <- -1 respeta el signo
Constantes
el_uno equ MOVB 1 RL0,#el_uno
Ttulo Presentacin - 9
Little/Big Endian
En la operacin (16 bits)
mov r0,0fa00H ; R0 <- Mem[fa00 H]
Ttulo Presentacin - 10
Instrucciones aritmticas
Instruccin ADD
Suma a nivel de word (16b) Ej: ADD Rx, op ; Rx <- Rx + op
Qu vale R0?
Instruccin ADDB
Suma a nivel de byte
MOV ADDB R0,#0x0001 Rh0,#0x01
Qu vale R0?
Ttulo Presentacin - 11
Instrucciones aritmticas
Instruccin SUB
Resta a nivel de word (16b) Ej: SUB Rx, op
MOV MOV SUB ADD R0,#0x01FF 0xFA00,R0 R0,#0x0009 0xFA00,R0
; Rx <- Rx - op
Qu vale R0?
Instruccin SUBB
Resta a nivel de byte
MOV SUBB R0,#0x01FF Rh0,#0x01
Qu vale R0?
Ttulo Presentacin - 12
Instrucciones aritmticas
Instruccin NEG
Complemento a dos de un nmero Un cambio de signo NEG Rx ; Rx <- 0 - Rx
MOV NEG R0,#0x01FF R0
Qu vale R0?
Instruccin NEGB
Cambio de signo a nivel de byte
MOV NEGB R0,#0x01FF Rl0
Qu vale R0?
Ttulo Presentacin - 13
Instrucciones aritmticas
Instruccin MUL
Multiplica dos nmeros con signo Resultado en 32 bits en el registro MD MDL: Parte baja de MD (16 bits). MDH: Parte alta de MD (16 bits). MUL Rx, Ry ; [MDH, MDL] <- Rx * Ry
Instruccin MULU
Multiplica dos nmeros sin signo
Ttulo Presentacin - 14
Instrucciones aritmticas
Instruccin DIV
Divide dos nmeros (MDL y un GPR) con signo Resultado en dos registros de 16 bits MDL: Almacena el cociente de la divisin (16 bits). MDH: Almacena el resto de la divisin (16 bits). DIV Rx ; MDL <- MDL / Rx MDH <- MDL mod Rx
Instruccin DIVU
Divide dos nmeros sin signo
MOV MOV MOV DIV MOV MOV MOV MOV DIVU R3,#0xFFFF MDL,R3 R0,#0x0001 R0 R1,MDL R2,MDH R3,#0xFFFF MDL,R3 R0
Ttulo Presentacin - 15
Instrucciones lgicas
Instruccin AND
Realiza un AND bit a bit de dos nmeros Ej: AND Rx, op ; Rx <- Rx and op
MOV AND
R0,#0x0001 R0,#0x0009
Qu vale R0?
Sirve como mscara: una especie de filtro para seleccionar nicamente ciertos bits de un registro
Se quiere poner el bit 1 del registro R0 a 0. O lo que es lo mismo, se seleccionan el resto de bits del registro R0
AND
R0,#0xFFFD
Ttulo Presentacin - 16
Instrucciones lgicas
Instruccin OR
Realiza un OR bit a bit de dos nmeros Ej: OR Rx, op ; Rx <- Rx or op
MOV OR R0,#0x0001 R0,#0x0009
Qu vale R0?
Sirve como mscara: una especie de filtro para seleccionar nicamente ciertos bits de un registro
Se quiere poner el bit 1 del registro R0 igual que el bit 1 del registro R1.
AND MOV AND OR OR R0,#0x0002
Se quiere poner el bit 1 del registro R0 a 1. O lo que es lo mismo, se seleccionan el resto de bits del registro R0
; ; ; ;
Ttulo Presentacin - 17
Instrucciones lgicas
Instruccin XOR
Realiza un XOR bit a bit de dos nmeros Ej: XOR Rx, op ; Rx <- Rx xor op
MOV XOR R0,#0x0101 R0,#0xFFFF
; R0 <- 0xFEFE
Instruccin CPL
Realiza el complemento a 1 de un nmero CPL Rx ; Rx <- complemento a 1 de Rx
MOV CPL
R0,#0x0101 R0
; R0 <- 0xFEFE
Ttulo Presentacin - 18
Desplazamientos
SHL (SHift Left) o SHR (SHift Right)
SHL Rx, #num Desplaza num veces a la izquierda los bits de Rx SHL Rx, Ry Desplaza a la izquierda Rx, el nmero de posiciones indicadas en Ry Introduce ceros por la derecha
MOV SHL R0,#0x0001 R0,#9
Qu vale R0? Se quiere poner el bit 1 del registro R0 igual que el bit 0 del registro R1.
0
AND MOV AND SHL OR
Rx 16 bits
C
; ; ; ; ;
se pone a 0 el bit 1 de R0 para no modificar R1 se selecciona el bit 0 de R2 el bit 0 pasa a ser el bit 1 R0.1 = R2.1 = R1.1
Ttulo Presentacin - 19
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 nmero de posiciones indicadas en Ry Rota los bits usando el bit de carry C Rx 16 bits
Qu vale R0?
MOV ROL
R0,#0x8001 R0,#9
Ttulo Presentacin - 20
10
Saltos
JMPR va precedido de CMP (compara), de forma que despus de comparar se realiza el salto segn una condicin.
CMP JMPR .... R0,R1 cc_ugt,next
;si R0 > R1
next:
cc_eq, dir (equal, salta si igual) cc_uc, dir (unconditional, salta siempre) cc_ne, dir (not equal, salta si no igual) cc_ugt, dir (unsigned greater than) cc_sgt, dir (signed greater than) cc_ule, dir (unsigned less or equal)
Ttulo Presentacin - 21
Consideraciones
Slo en zonas bit a bit No necesitan CMP antes
RAM
GPRs
FC00
STACK
F600
JB .... next:
C,next
Ttulo Presentacin - 22
11
Poner un bit a 0
BCLR bit ; bit = 0
;activa bit 1 del P2 BSET P2.1 ; BCLR C ; Carry = 0 BMOV V,C ; V=C
BMOV bit1, bit2 ; bit1 = bit2 BAND bit1, bit2 ; bit1 <- bit1 and bit2 BOR bit1, bit2 ; bit1 <- bit1 or bit2 BXOR bit1, bit2 ; bit1 <- bit1 xor bit2
Consideraciones
Slo en zonas bit a bit
Ttulo Presentacin - 23
C y Ensamblador
if ( )
Alto nivel
if (a == b) ...; else ...;
Ensamblador
MOV R0,a CMP R0,b JMPR cc_ne,else ; condicin if .. JMPR cc_uc,endif ; condicin else ..
else: endif:
Ttulo Presentacin - 24
12
Bucles
for ( )
Alto nivel
for (i=START; i <= STOP; i++){ a = STOP - i;
Ensamblador
for:
test: next:
; r0 (i) ; r1 (STOP-START)
; i += 1 ; i <= STOP
Ttulo Presentacin - 25
Otro ejemplo
while ( )
Alto nivel
i = 0; while (i<10) { a[i] = i; i += 1; }
Ensamblador
MOV MOV MOV CMP JMPR MOV ADD ADD JMPR R0,#0 ; R0 es i R1,#1 ; es el incremento de i R2,#0xfa00 ;R2 almacena la direccin de memoria de a R0,#10 cc_sge,next [R2],R0 R0,R1 R2,#2 cc_uc,otro
otro:
next:
Ttulo Presentacin - 26
13
Directivas. Pseudoinstrucciones
Las directivas a usar en el while anterior :
maxdata $nonsegmented equ 0x10 ; constante section data at 200H dsw 10 ; array de datos ends section proc MOV MOV MOV CMP JMPR MOV ADD ADD JMPR NOP endp ends end code at 300H NEAR R0,#0 R1,#1 R2,#j R0,#maxdata cc_sge,next [R2],R0 R0,R1 R2,#2 cc_uc,otro
otro:
next: ej1 ej
Final de programa
Ttulo Presentacin - 27
Directivas. Pseudoinstrucciones
El ensamblador de Keil (Siemens) no tiene ORG ! Section: Comienzo de una seccin
De cdigo (programa) datos, a partir de una POS de memoria Ends: Cierra la seccin
dsw: Reserva espacio para un word (dsb: para un byte) equ: Fuera de las secciones
Define una constante/variable (para esto ltimo se prefiere dsw)
Ttulo Presentacin - 28
14
Subrutinas (funciones)
f(x), ejemplo pow2(x)
Alto nivel
pot = pow2(n);
Ensamblador
R1,#n pow2
R0,#1 R0,R1
Ttulo Presentacin - 29
Subrutinas: stack
Cmo se encuentra la direccin de vuelta de una subrutina?
Est almacenada en el STACK
CALL
SP <- SP - 2 ; SP (Stack Pointer) (SP) <- IP SP SP ; almacena la dir de vuelta en el stack
FC00 FBFE FC00
RET
IP <- (SP)
FC00 FBFE IP
SP
SP SP
Ttulo Presentacin - 30
15
Push y Pop
PUSH R0
SP <- SP - 2 SP SP
FC00 FBFE R0
FC00 FBFE
SP
POP R0
R0 <- (SP)
FC00 FBFE R0
SP
FC00 FBFE
SP SP
Push y Pop sirven para poder reutilizar los GPRs en las funciones llamadas (dentro de la funcin se comportan como las variables locales de C)
Ttulo Presentacin - 31
16