UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Assembler MSP430

Tamaño: px
Comenzar la demostración a partir de la página:

Download "UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Assembler MSP430"

Transcripción

1 Interfaz C-Assembler. Código de arranque: Se compila el siguiente programa: void main(void) { ; La memoria flash de 60 KB se inicia en 0x Los vectores de interrupción, están en la zona alta de la memoria flash, desde 0xFFE0 hasta 0xFFFF. Cuando se le da energía al controlador, o se genera una señal de reset externo, se coloca en PC la dirección almacenada en el vector asociado a RESET (0x0FFFE). La RAM, de 2 KB, ocupa desde: 0x0200 hasta 0x09FF. El stack se inicia en el tope de la RAM+2; es decir en 0x0A00. De este modo al efectuar un llamado a subrutina, se decrementa en 2 el valor almacenado en el stack, y se deposita la dirección de PC de orno en el tope del stack. En el caso de rutinas de servicio de interrupción además de empujar la dirección de orno, se almacena el valor del registro de estado del controlador (SR). El código de autoarranque del compilador IAR: setea el stack, el vector de interrupción para reset, y define el la rutina exit, cuya finalidad es detener la ejecución de instrucciones después de ejecutada la rutina principal. En este caso simple, el programa principal es traducido a la instrucción de máquina. #include "msp430x14x.h" ORG 01100h ; Programa en Flash RESET: mov.w #0A00h, SP ; Inicia stackpointer call #main call #exit _exit: br # exit exit jmp # exit main: exit: br #_exit ; Prof. Leopoldo Silva Bijit

2 ; Vector de interrupción asociado a Reset ORG 0FFFEh ; MSP430 RESET Vector DW RESET ; END Variables locales en registros. El siguiente programa define una variable local dentro de la función main: void main(void) { int i1=2; i1+=1; Se dispone de 12 registros, comienzan a usarse desde el número 15. Se ilustra ahora sólo el código assembler de main: main: MOV.W #0x2, R15 ; i1=r15 = 2 ADD.W #0x1, R15 ; i1+=1; RET El símbolo # indica direccionamiento inmediato Uso de registros para variables locales. Si se definen dos variables, se ocupan el R15 para i1, y el registro R14 para i2. void main(void) { int i1=2, i2=-1; i1+=1; i2-=1; Se traduce a: main: MOV.W #0x2, R15 ; i1 = R15 = 2 MOV.W #0xffff, R14 ; i2 = R14 = -1; ADD.W #0x1, R15 ; i1+=1 ADD.W #0xffff, R14 ; i2-=1 RET Prof. Leopoldo Silva Bijit

3 Empleo de registros temporales. Si se siguen empleando registros vemos que el R10 y el R11 son preservados. Y que emplea el R11 como temporal. Como se verá el compilador salva el contenido de los registros R4 a R11. Los registros R12 a R15 no son salvados. void main(void) { int i1=-1; int i2=0; int i3=1; int i4 = 5+1; int i5=1<<5; i1+=1; i2-=1; i3=i1+i2+i4; i4=i3 i2; i5=i5+2*3*4; Para evitar warnings por definir variables que no se empleen, las variables se leen y escriben. main: PUSH.W R10 ;se salvan registros PUSH.W R11 MOV.W #0xffff, R15 ; i1 = R15 = -1 MOV.W #0x0, R14 ; i2 = R14 = 0; MOV.W #0x1, R12 ; i3 = R12 = 1; MOV.W #0x6, R13 ; i4 = R13 = 5+1 = 6 MOV.W #0x20, R10 ; i5 = R10 = 1<<5 = 32 = 0x20 ADD.W #0x1, R15 ; i1+=1 ADD.W #0xffff, R14 ; i2-=1 MOV.W R15, R11 ; R11 se emplea como temporal. ADD.W R14, R11 ADD.W R13, R11 MOV.W R11, R12 ; i3=i1+i2+i4 MOV.W R12, R11 BIS.W R14, R11 MOV.W R11, R13 ; i4=i3 i2 ADD.W #0x18, R10 ; i5=i5+2*3*4; POP.W R11 POP.W R10 RET Prof. Leopoldo Silva Bijit

4 Variables locales en el frame. Cuando el número de locales es mayor que los registros disponibles, se almacenan en el frame de la función. Se emplean registros temporales para la compilación de expresiones que requieren almacenamientos intermedios. void main(void) { int i1 = 1, i2 = 2, i3 = 3, i4 = 4; int i5 = 5, i6 = 6, i7 = 7, i8 = 8; int i9 = 9, i10 = 10, i11 = 11, i12 = 12; i1= i2+i3; i2= i1-i2; i3= i1 & i4; i4= i3 i2; i5= i3 ^i4; main: PUSH.W R10 ;salva registros tipo save PUSH.W R11 PUSH.W R8 PUSH.W R9 PUSH.W R6 PUSH.W R7 PUSH.W R4 PUSH.W R5 SUB.W #0x2, SP ; crea frame MOV.W #0x1, R4 ; i1 = R4 = 1; MOV.W #0x2, R5 ; i2 = R5 = 2; MOV.W #0x3, R14 ; i3 = R14 = 3; MOV.W #0x4, R12 ; i4 = R12 = 4; MOV.W #0x5, R13 ; i5 = R13 = 5; MOV.W #0x6, 0x0(SP) ; tope = 6; Direccionamiento indexado. MOV.W #0x7, R10 ; i7 = R10 = 7; MOV.W #0x8, R11 ; i8 = R11 = 8; MOV.W #0x9, R8 ; i9 = R8 = 9; MOV.W #0xa, R9 ; i10 = R9 = 10; MOV.W #0xb, R6 ; i11 = R6 = 11; MOV.W #0xc, R7 ; i12 = R7 = 12; MOV.W R5, R15 ; emplea R15 como temporal ADD.W R14, R15 MOV.W R15, R4 ; i1= i2+i3; MOV.W R4, R15 SUB.W R5, R15 MOV.W R15, R5 ; i2= i1-i2; MOV.W R4, R15 Prof. Leopoldo Silva Bijit

5 AND.W R12, R15 MOV.W R15, R14 ; i3= i1 & i4; MOV.W R14, R15 BIS.W R5, R15 MOV.W R15, R12 ; i4= i3 i2; MOV.W R14, R15 XOR.W R12, R15 MOV.W R15, R13 ; i5= i3 ^ i4; ADD.W #0x2, SP ; desarma el frame BR #?Epilogue8 ; rótulos automáticos?epilogue8: pop.w R5 ; restaura registros que deben preservarse?epilogue7: pop.w R4 ; por ser modificados dentro de la función.?epilogue6: pop.w R7?Epilogue5: pop.w R6?Epilogue4: pop.w R9?Epilogue3: pop.w R8 pop.w R11 pop.w R10 Variables globales inicializadas. Consideremos las siguientes definiciones de variables globales inicializadas. int i1 = 1; int i2 = 2; int i3 = 3; int i4 = 4; int i5 = 5; int i6 = 6; int i7 = 7; int i8 = 8; int i9 = 9; int i10 = 10; int i11 = 11; int i12 = 12; void main(void) { i1= i2+i3; i2= i1-i2; i3= i1 & i4; i4= i3 i2; i5= i3 ^i4; Prof. Leopoldo Silva Bijit

6 Las variables globales (definidas fuera de las funciones) son almacenadas en RAM, a partir de la dirección 0x200. Los inicializadores se almacenan en la memoria flash, a continuación de la última instrucción del programa. Antes de invocar a main, además de iniciar el stack pointer, se inicializan las variables estáticas en RAM, mediante la función memcpy que es automáticamente insertada por el código de arranque. #include "msp430x14x.h" ORG 01100h ; Programa en Flash RESET: mov.w #0A00h, SP ; Inicia stackpointer mov.w #0x200, R12 ; inicio RAM mov.w #Inicializadores, R14 ; valores iniciales de globales push.w #0xA ; se pasa en el tope el número call #memcpy incd.w SP ;pop call #main call #exit _exit: br # exit exit jmp # exit El código en C, para la función estándar memcpy es el siguiente: void *memcpy(void * destino, const void * fuente, register int n) { register char *d = (char *)destino; register const char *s= (char *)fuente; while(n--) *d++ = *s++; urn destino; memcpy Copia un bloque de n bytes desde la dirección fuente hacia la dirección destino. La siguiente implementación assembler de memcpy, copia n bytes desde la dirección fuente (que se pasa en R14, la cual apunta a la zona de los valores iniciales de las variables globales que se escriben en la memoria flash, inmediatamente después de la última instrucción del programa) hacia la dirección destino (que se pasa en R12, la cual apunta al inicio del segmento de memoria RAM). Entonces memcpy queda: memcpy: push.w R10 mov.w 0x4(SP), R13 ; R13 =número de bytes mov.w R12, R10 jmp testn cpy: mov.w R10, R15 Prof. Leopoldo Silva Bijit

7 inc.w R10 ;d++ ;de flash a ram. s++ testn: mov.w R13, R15 add.w #0xFFFF, R13 ; n-- tst.w R15 jne cpy pop.w R10 ;última instrucción del programa. Inicializadores: DW 0100 ;valor inicial de i1 DW 0200 ;inicializador de i2 DW 0300 DW 0400 DW 0500 El es indirecto. Usa R14 como puntero. Nótese que no se crea el espacio para variables globales que no se emplean en el programa, es el caso de las variables i6 a i12, en el ejemplo que se está desarrollando. ; Segmento RAM, después de memcpy ORG 00200h ; MSP430 Inicio RAM i1: DW 00001h ; 200 i2: DW 00002h ; 202 i3: DW 00003h ; 204 i4: DW 00004h ; 206 i5: DW 00005h ; 208 END El código de main ilustra el direccionamiento empleando variables en la zona de RAM. También se muestra operadores de suma y resta, y operadores al bit. main: mov.w &i2, R15 ;El & es direccionamiento absoluto. add.w &i3, R15 mov.w R15, &i1 ; i1= i2+i3; mov.w &i1,r15 sub.w &i2,r15 mov.w R15,&i2 ; i2= i1-i2; mov.w &i1, R15 and.w &i4, R15 mov.w R15, &i3 ; i3= i1 & i4 Prof. Leopoldo Silva Bijit

8 mov.w &i3,r15 bis.w &i2,r15 mov.w R15,&i4 ; i4= i3 i2; mov.w &i3,r15 xor.w &i4,r15 mov.w R15,&i5 ; i5= i3 ^i4; Variables globales no inicializadas. Consideremos las siguientes definiciones de variables globales no inicializadas. Se ilustra además el tratamiento de arreglos. int i1; int arr[4]; int main(void) { i1=-1; arr[0]=0; arr[1]=1; arr[2]=2; arr[3]=3; arr[0]=arr[1]+i1; urn(0) ; Se crean las globales en RAM y se las inicia automáticamente con valores nulos, antes de invocar a main. Lo anterior se logra invocando a la rutina memset, que inserta el código de arranque. #include "msp430x14x.h" ORG 01100h ; Programa en Flash RESET: mov.w #0A00h, SP ; Inicia stackpointer mov.w #0x200, R12 ; inicio RAM clr.w R14 ; valor a setear en RAM push.w #0xA ; se pasa en el tope el número de bytes a setear call #memset incd.w SP ;pop call #main Prof. Leopoldo Silva Bijit

9 call #exit _exit: br # exit exit jmp # exit Se puede describir en C, el código de memset: void memset(void * destino, const int valor, register int n) { register char *d = (char *)destino; while(n--) *d++ = valor; El código de memset que genera IAR: memset: push.w R10 push.w R11 mov.w 0x6(SP), R13 ;número queda en frame mov.w R12, R10 ;en R10 inicio de RAM jmp testn setram: mov.b R14,R15 mov.w R10,R11 inc.w R10 ;d++ mov.b R15,0x0(R11) testn: mov.w R13, R15 add.w #0xFFFF,R13 ;n-- tst.w R15 jne setram pop.w R11 pop.w R10 ; Segmento RAM, después de memset ORG 00200h ; MSP430 Inicio RAM i1: DW 00000h ; 200 arr: DW 00000h ; 202 arr[0] DW 00000h ; 204 arr[1] DW 00000h ; 206 arr[2] DW 00000h ; 208 arr[3] END El código de main ilustra la manipulación de componentes de un arreglo: Prof. Leopoldo Silva Bijit

10 main: mov.w #0xFFFF,&i1 ; i1=-1; clr.w &arr ; arr[0]=0; mov.w #0x1,&0x204 ; arr[1]=1; mov.w #0x2,&0x206 ; arr[2]=2; mov.w #0x3,&0x208 ; arr[3]=3; mov.w &0x204,R15 add.w &i1,r15 mov.w R15,&arr ; arr[0]=arr[1]+i1; clr.w R12 ; urn(0) ; En este ejemplo, la función main orna un valor entero. El valor de orno de la función se efectúa a través de R12. Definición de punteros. En el siguiente código se definen dos globales iniciadas, y un puntero a entero sin iniciar. int *pi; int x=1; int y=2; int main(void) { pi=&x; y = *pi; urn(0) ; El código de arranque invoca a memcpy para iniciar en RAM las variables enteras y a memset para definir en RAM el puntero a entero, iniciado con valor nulo. ; Segmento RAM, después de memcpy y memset ORG 00200h ; MSP430 Inicio RAM x: DW 00001h ; 200 y: DW 00002h ; 202 pi: DW 00000h ; 204 END Prof. Leopoldo Silva Bijit

11 La función main: main: mov.w #0x200, &pi ; pi = &x mov.w &pi, R15 ; temp=pi &y ; y = *temp; clr.w R12 ; urn(0) ; En los ejemplos a continuación se emplearán variables globales, ya que el direccionamiento hace referencia a los nombres de las variables, y de este modo es más sencillo seguir los ejemplos. Si se emplearan locales, habría que asociar variables a registros, y considerar que algunos pueden ser usados como variables temporales. Alternativas. Ilustra el uso de la instrucción compare y los saltos condicionales. ;if (v8>v7) v6++; else v5--; cmp.w &v8, &v7 jge else ; va a else si: &v8 <=&v7 inc.w &v6 jmp endif else: add.w #0xFFFF,&v5 endif: Luego de compilar la condición, mediante un salto condicional se genera el salto al bloque de acciones asociados al else. ;if (v8>=v7) v6++; else v5--; cmp.w &v7,&v8 jl else ; va a else si: &v7 > &v8 inc.w &v6 jmp endif else: add.w #0xFFFF,&v5 endif: ;if (v8<v7) v6++; else v5--; cmp.w &v7,&v8 jge else ; va a else si: &v7 <=&v8 inc.w &v6 jmp endif else: add.w #0xFFFF,&v5 endif: Prof. Leopoldo Silva Bijit

12 ;if (v8<=v7) v6++; else v5--; cmp.w &v8,&v7 jl else ; va a else si: &v8 > &v7 inc.w &v6 jmp endif else: add.w #0xFFFF,&v5 endif: ;if (v8==v7) v6++; else v5--; cmp.w &v7,&v8 jne else ; va a else si: &v7!= &v8 inc.w &v6 jmp endif else: add.w #0xFFFF,&v5 endif: ;if (v8!=v7) v6++; else v5--; cmp.w &v7,&v8 jeq else ; va a else si: &v7 == &v8 inc.w &v6 jmp endif else: add.w #0xFFFF,&v5 endif: Iteraciones. ;while (v8>v0) v0++; lazo: cmp.w &v8,&v0 jge endwhile ;termina iteración si &v8 <= &v0 inc.w &v0 jmp lazo endwhile: ;do {v1++; while (v8>v1); repeat: inc.w &v1 cmp.w &v8,&v1 jl repeat ;repite si &v8 > &v1 Prof. Leopoldo Silva Bijit

13 ; for(v8=0;v8<v7;v8++) v0--; clr.w &v8 testfor: cmp.w &v7,&v8 jge endfor ;termina si &v7 <= &v8 add.w #0xFFFF,&v0 inc.w &v8 jmp testfor endfor: Condicional. ;v8= (v7>v6)? v7 : v6; cmp.w &v7,&v6 jge else mov.w &v7,&v8 jmp fuera else: mov.w &v6,&v8 fuera: Switch. switch (v7) { case 1: case 2: v2++; break; case 3: v3--; break; default: v3=++v5; ;switch (v7) { mov.w &v7,r15 dec.w R15 jeq caso1 ;si es caso 1 dec.w R15 jeq caso2 ;si es 2 dec.w R15 jeq caso3 ;si es 3 jmp default caso1: Prof. Leopoldo Silva Bijit

14 caso2: inc.w &v2 ; v2++; jmp siga caso3: add.w #0xFFFF,&v3 ; v3--; jmp siga default: inc.w &v5 ; v3=++v5; mov.w &v5,&v3 ; siga: Break y Continue en iteraciones. ;for(v8=0 ;v8<10 ;v8++ ) { v6++; if(v6>8) break; v5++; clr.w &v8 testfor: cmp.w #0xA,&v8 jge endfor inc.w &v6 cmp.w #0x9,&v6 jge endfor ; es el break. Fuera del lazo. inc.w &v5 inc.w &v8 jmp testfor endfor: ;for(v8=0 ;v8<10 ;v8++ ) { v6++; if(v6>8) continue; v5++; clr.w &v8 testfor: cmp.w #0xA,&v8 jge endfor inc.w &v6 cmp.w #0x9,&v6 jge incfor ; es el continue. Al incremento del lazo inc.w &v5 incfor: inc.w &v8 jmp testfor endfor: Ejemplos de diseños de funciones. Ejemplo1. Sea una función f1 de tres variables. Prof. Leopoldo Silva Bijit

15 El llamado a la función en C, v5=f1(v8,v7,v6); Asumiendo que las variables locales están asociadas a registros: v5 con R9, v6 con R8, v7 con R11 y v8 con R10. Se pasa el valor de v6 en el tope del stack. Luego en R14 el valor de v7 y en R12 el valor de v8. La forma de pasar los argumentos es una política del compilador, que en el caso de pasar paso por registros depende de los que ya estén en uso. Es indispensable conocer ese orden para el diseño de la función. La compilación del llamado queda como sigue: ;v5=f1(v8,v7,v6); push.w R8 ;empuja tercer argumento mov.w R11,R14 ;pasa en R14 segundo argumento mov.w R10,R12 ;pasa en R12 primer argumento call #f1 incd.w sp ;recupera posición de sp dir: mov.w R12,R9 ;se asume valor de orno en R12 Después de invocar a f1, los frames en el stack pueden visualizarse según: sp dir valor v6 Fondo y tope del frame de f1 Tope del frame de función que llama a f1 Para compilar el llamado lo único que se necesita conocer es el prototipo de la función f1: int f1(int, int, int ); Si se desea incorporar el código de la función f1 en assembler, debe indicarse en el prototipo que su definición está en otro archivo. Esto se logra anteponiendo la palabra reservada extern, según se indica: exter int f1(int, int, int ); Esta declaración debe figurar, en el texto en C, antes del llamado. Para compilar la función se requiere su definición, y la forma en que se han pasado los argumentos. Prof. Leopoldo Silva Bijit

16 int f1(int a0, int a1, int a2) { a0=a1+a2; a1=a0+a2; urn(a0); f1: mov.w 0x2(SP),R15 ;deja en R15 el valor del argumento a2 mov.w R14,R13 ;en R14 se tiene a1 add.w R15,R13 ; R13 se usa como registro temporal mov.w R13,R12 ; en R12 se tiene a0 mov.w R12,R13 add.w R15,R13 mov.w R13,R14 Ejemplo 2. Si aumentamos el número de argumentos de la función, y también el número de variables locales en registros, tendremos una visualización de la política de asignación que el compilador utiliza para la asignación de registros. int f1(int a0,int a1,int a2,int a3, int a4) { a0=a1+a2+a3+a4; a1=a0+a2; urn(a0); int main(void) { register int v8=8,v7=7,v6=6,v5=5,v4=4,v3=3,v2=2,v1=1; v3=f1(v8,v7,v6,v5,v4); urn(0) ; main: push.w R10 ;salva registros que se usan en locales. push.w R11 push.w R8 push.w R9 push.w R6 push.w R7 Prof. Leopoldo Silva Bijit

17 push.w R4 push.w R5 mov.w #0x8,R7 ;inicio de locales mov.w #0x7,R10 mov.w #0x6,R11 mov.w #0x5,R8 mov.w #0x4,R9 mov.w #0x3,R6 mov.w #0x2,R5 mov.w #0x1,R4 push.w R9 ;paso de argumentos en frame. a4 push.w R8 ;a3 push.w R11 ;a2 mov.w R10,R14 ;al menos dos argumento se pasan en registros. a1 mov.w R7,R12 ;a0 call #f1 dr1: mov.w R12,R6 ; orno de f1 en R12 clr.w R12 ;orno de main. add.w #0x6,SP ;desarma frame de la función main pop.w R5 ;restaura registros usado en locales. pop.w R4 pop.w R7 pop.w R6 pop.w R9 pop.w R8 pop.w R11 pop.w R10 Frame de main en el stack, inmediatamente después de la invocación a f1. sp dr1 a2 a3 a4 R5 R4 R7 R6 R9 R8 R11 R10 dr0 Fondo del frame de f1 Tope del frame de main Fondo del frame de main Prof. Leopoldo Silva Bijit

18 Frame de f1, luego de salvar los registros R10 y R11(tipo save): sp 6 8 A R11 R10 dr1 a2 a3 a4 R5 R4 R7 R6 R9 R8 R11 R10 dr0 Tope del frame de f1 Fondo del frame de f1 Tope del frame de main Fondo del frame de main f1: push.w R10 ; salva R10 que ocupa para a4 push.w R11 ; salva R11 que usa como temporal mov.w 0x6(SP),R15 ; deja en R15 el argumento a2 mov.w 0x8(SP),R13 ; deja en R13 el argumento a3 mov.w 0xA(SP),R10 ; deja en R10 el argumento a4 mov.w R14,R11 add.w R15,R11 add.w R13,R11 add.w R10,R11 mov.w R11,R12 ; a0=a1+a2+a3+a4; mov.w R12,R11 add.w R15,R11 mov.w R11,R14 ; a1=a0+a2; pop.w R11 ;restaura salvados pop.w R10 Prof. Leopoldo Silva Bijit

19 Corrimientos aritméticos. Asumiendo variables globales, la traducción de los corrimientos por constante y por variable se ilustra a continuación: v8=v7<<3; /*corrimiento por constante */ v8=v7>>6; v8=v7>>v6; /*corrimiento por variable */ v8=v7<<v6; El assembler implementa algunas rotaciones como sumas. Además sólo rota un bit a la vez. Por ejemplo, empleando R12 como temporal, el desplazamiento con signo a la izquierda en tres posiciones puede compilarse según: mov.w rla.w rla.w rla.w mov.w &v7,r12 R12 R12 R12 R12,&v8 También pueden desarrollarse rutinas más generales, para corrimientos de 0 a 16 posiciones. Se ilustran los códigos, a continuación, generados por el compilador IAR. mov.w &v7,r12 call #?ShiftLeft16_3 mov.w R12,&v8 ; v8=v7<<3; mov.w &v7,r12 call #?ShiftRight16s_6 mov.w R12,&v8 ; v8=v7>>6; mov.w &v7,r12 mov.w &v6,r14 call #?ShiftRight16s mov.w R12,&v8 ; v8=v7>>v6; mov.w &v7,r12 mov.w &v6,r14 call #?ShiftLeft16 mov.w R12,&v8 ; v8=v7<<v6; Las rutinas tienen diversos puntos de entrada, de acuerdo al número de corrimientos que deben efectuarse. Prof. Leopoldo Silva Bijit

20 ; R12=R12>>R14?ShiftLeft16: lazoshlf: skipshlf?shiftleft16_7:?shiftleft16_6:?shiftleft16_5:?shiftleft16_4:?shiftleft16_3: tst.b R14 jeq skipshlf rla.w R12 dec.b R14 jne lazoshlf rla.w R12 rla.w R12 rla.w R12 rla.w R12 rla.w R12 rla.w R12 rla.w R12 A la derecha con signo:?shiftright8s: sxt R12?ShiftRight16s: tst.b R14 jeq skipshrt lazoshrt: rra.w R12 dec.b R14 jne lazoshrt skipshrt:?shiftright16s_7: rra.w R12?ShiftRight16s_6: rra.w R12?ShiftRight16s_5: rra.w R12?ShiftRight16s_4:?ShiftRight16s_3: rra.w R12 rra.w R12 rra.w R1 rra.w R12 Si las variables son sin signo, los llamados para corrimientos a la izquierda no cambian; pero los corrimientos a la derecha deben convertirse en rotaciones lógicas. Para corrimiento sin signo, se limpia el carry. A la derecha sin signo:?shiftright8u: and.b #0xFF,R12?ShiftRight16u: tst.b R14 jeq skipsru lazosru: clrc rrc.w R12 Prof. Leopoldo Silva Bijit

21 skipsru:?shiftright16u_7:?shiftright16u_6:?shiftright16u_5:?shiftright16u_4:?shiftright16u_3: dec.b R14 jne lazosru clrc rrc.w R12 clrc rrc.w R12 clrc rrc.w R12 clrc rrc.w R12 clrc rrc.w R12 rra.w R12 rra.w R12 Si el número de corrimientos es mayor que 15 el compilador debería generar un cero (cuestión que IAR realiza). También deberían tratarse en forma especial situaciones que podrían producir pérdidas del signo del número. División de enteros sin signo y con signo. La división de enteros sin signo se implementa mediante algoritmos usuales. El siguiente segmento ilustra el llamado mov.w &v7,r12 mov.w &v6,r14 call #?DivMod16u mov.w R12,&v8 ; v8=v7/v6;?divmod8u: and.b #0xFF,R12 ;para enteros sin signo de 8 bits and.b #0xFF,R14?DivMod16u: mov.w R14,R15 ;R12/R14 clr.w R14 mov.w #0x1,R13 rot1: bit.w #0x1,R13 rlc.w R12 rlc.w R14 cmp.w R15,R14 ;R14-R15 Prof. Leopoldo Silva Bijit

22 jnc rot2 sub.w R15,R14 rot2: rlc.w R13 jnc rot1 rra.w R13 rlc.w R12 La división con signo, determina el signo del resultado (dejando positivos los operandos) y efectúa la división sin signo. Luego coloca el signo del cuociente y el resto.?divmod8s: sxt R12 sxt R14?DivMod16s: push.w R9 clr.w R9 tst.w R14 jge test1 inv.w R14 inc.w R14 bis.w #0x1,R9 test1: tst.w R12 jge test2 inv.w R12 inc.w R12 inv.w R9 test2: call #?DivMod16u bit.w #0x1,R9 jeq set1 inv.w R12 inc.w R12 set1: bit.w #0x2,R9 jeq set2 inv.w R14 inc.w R14 set2: pop.w R9 Prof. Leopoldo Silva Bijit

23 Multiplicación de enteros con signo. El microcontrolador tiene una unidad aritmética que efectúa multiplicación de enteros. En caso de multiplicaciones por potencias de dos, es más eficiente realizar la multiplicación mediante sumas que utilizar el hardware de multiplicación. ;v8=v7*2; mov.w rla.w mov.w &v7,r15 R15 R15,&v8 ; v8=v7*v6; mov.w mov.w call mov.w &v7,r12 &v6,r14 #?Mul16Hw R12,&v8?Mul8Hw: and.b #0xFF,R12 ;operandos de 8 bits and.b #0xFF,R14?Mul16Hw: push.w SR dint ;no se puede interrumpir nop mov.w R12,&MPY mov.w R14,&OP2 mov.w &RESLO,R12 mov.w &RESHI,R13 ;orno en R12 y R13 i PC ;recupera SR Operaciones lógicas. Se implementan con cortocircuitos y asignan valores 0 y 1. ; v8=v7&&v6; tst.w &v7 jeq esfalso ;primer operando falso tst.w &v6 jeq esfalso mov.b #0x1,R15 ;ambos verdaderos jmp esverdad Prof. Leopoldo Silva Bijit

24 esfalso: clr.b R15 esverdad: and.w #0xFF,R15 mov.w R15,&v8 ;v7=v6 v5; tst.w &v6 jne yaesverdad tst.w &v5 jeq esfalso ;ambos son falsos yaesverdad: mov.b #0x1,R15 jmp esverdad esfalso: clr.b R15 esverdad: and.w #0xFF,R15 mov.w R15,&v7 v7=!v6; tst.w &v6 jne argverdad mov.b #0x1,R15 ;setea a uno jmp setvalor argverdad: clr.b R15 setvalor: and.w #0xFF,R15 mov.w R15,&v7 Se ilustra la composición de una expresión. ;v8=(v7&&v6)&&v5; tst.w &v7 jeq esfalso tst.w &v6 jeq esfalso tst.w &v5 jeq esfalso mov.b #0x1,R15 jmp setvalor esfalso: clr.b R15 setvalor: and.w #0xFF,R15 mov.w R15,&v8 Prof. Leopoldo Silva Bijit

Programación en C para Sistemas Embebidos

Programación en C para Sistemas Embebidos SASE 2012 Programación en C para Sistemas Embebidos (con ejemplos basados en MSP430) Mg. Guillermo Friedrich UTN-FRBB Tópicos destacados - Generalidades sobre la arquitectura MSP430 - Paso de parámetros

Más detalles

Tema 2. El lenguaje JAVA

Tema 2. El lenguaje JAVA Tema 2. El lenguaje JAVA Nomenclatura habitual Variables Tipos de variables Tipos primitivos Referencias Arrays Operadores Operadores de Java Precedencia de operadores Sentencias de control Sentencias

Más detalles

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

Más detalles

Tema 3 SUBRUTINAS. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía

Tema 3 SUBRUTINAS. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía Tema 3 SUBRUTINAS ÍNDICE Definición e instrucciones básicas Soporte para el tratamiento de subrutinas (ejecución de la subrutina y gestión del bloque de activación) Interrupciones vs llamadas a procedimiento

Más detalles

Lección 2 Introducción al lenguaje C

Lección 2 Introducción al lenguaje C Lección Introducción al lenguaje C Decimal Binario Hexadecimal A B C D E F Octal Equivalencia entre decimal, binario, hexadecimal y octal. Código ASCII (American Standard Code for Information Interchange)

Más detalles

LENGUAJE. Tema 2 Elementos de un programa

LENGUAJE. Tema 2 Elementos de un programa LENGUAJE Tema 2 Elementos de un programa ELEMENTOS DE UN PROGRAMA Comentarios. Identificadores. Constantes. Variables. Operadores. Sentencias o instrucciones. COMENTARIOS Los comentarios en C pueden ocupar

Más detalles

Conceptos de Arquitectura de Computadoras Curso 2015

Conceptos de Arquitectura de Computadoras Curso 2015 PRACTICA 1 Assembly, Instrucciones, Programas, Subrutinas y Simulador MSX88 Objetivos: que el alumno Domine las instrucciones básicas del lenguaje assembly del MSX88. Utilice los diferentes modos de direccionamiento.

Más detalles

Estructuras de Datos Declaraciones Tipos de Datos

Estructuras de Datos Declaraciones Tipos de Datos Departamento de Informática Universidad Técnica Federico Santa María Estructuras de Datos Declaraciones Tipos de Datos Temas: 2-3-4 IWI-131, paralelo 01 Profesor: Teddy Alfaro O. Lenguaje de Programación

Más detalles

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática Programación de Computadores 4 Iteraciones y Decisiones Prof. Javier Cañas Universidad Técnica Federico Santa María Departamento de Informática Contenido 1 Introducción 2 Operadores Relacionales y Lógicos

Más detalles

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main. LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan

Más detalles

Estructura de Microprocesadores. Profesor Ing. Johan Carvajal Godínez

Estructura de Microprocesadores. Profesor Ing. Johan Carvajal Godínez Estructura de Microprocesadores PIC 18F4550 Administración de la memoria Profesor Ing. Johan Carvajal Godínez Contenidos Organización de la memoria del MCU Administración de la memoria de programa (Flash)

Más detalles

Introducción a la Computación. Capítulo 10 Repertorio de instrucciones: Características y Funciones

Introducción a la Computación. Capítulo 10 Repertorio de instrucciones: Características y Funciones Introducción a la Computación Capítulo 10 Repertorio de instrucciones: Características y Funciones Que es un set de instrucciones? La colección completa de instrucciones que interpreta una CPU Código máquina

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java I... 5 Tipos de datos... 6 Tipos de datos simples... 7 Operadores... 11 Operadores Aritméticos... 12 Operadores relacionales...

Más detalles

Tema 13: Apuntadores en C

Tema 13: Apuntadores en C Tema 13: Apuntadores en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Introducción

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

Construyendo Programas más Complejos

Construyendo Programas más Complejos Arquitectura de Ordenadores Construcciones de Alto Nivel en Ensamblador Abelardo Pardo abel@it.uc3m.es Universidad Carlos III de Madrid Departamento de Ingeniería Telemática Construyendo Programas más

Más detalles

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES. APUNTADORES. La memoria de una máquina esta ordenada en forma de celdas numeradas consecutivamente y que se pueden manipular individualmente o en grupos contiguos. La siguiente figura muestra una representación

Más detalles

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA APUNTES DE JAVA FUNCIONAMIENTO DE UN PROGRAMA Assembler Ensamblador Ejecuta Programador Programa fuente BASIC Interprete Ejecuta C, C++, Pascal Compilador Compila Ejecuta Programa fuente Programa Objeto

Más detalles

Práctica de constantes, expresiones y operadores. Programación en C 1

Práctica de constantes, expresiones y operadores. Programación en C 1 Práctica de constantes, expresiones y operadores Programación en C 1 Definición de variables (II) Las variables (automáticas) no inicializadas tienen cualquier valor. Una variable (automática) se inicializa

Más detalles

Programcaión Básica. Secuencias de Control y Repetición. Arturo Vega González.

Programcaión Básica. Secuencias de Control y Repetición. Arturo Vega González. Programación Básica Arturo Vega González a.vega@ugto.mx Division de Ciencias e Ingenierías Universidad de Guanajuato Campus León Sesión 5 Universidad de Guanajuato, DCI, Campus León 1 / 31 Universidad

Más detalles

Tema 7. Generación de código

Tema 7. Generación de código Departamento de Tecnologías de la Información Tema 7 Generación de código Ciencias de la Computación e Inteligencia Artificial Índice 7.1 Visión general 7.2 Código de tres direcciones 2 Índice 7.1 Visión

Más detalles

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC. Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC. Variables Conceptos de Memoria Una variable es un espacio en la memoria del PC Cada variable tiene un nombre, un tipo, un tamaño y un valor

Más detalles

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. TRUJILLO 1.- Resumen de Prog1 Comentarios es C++ Declaraciones de variables.

Más detalles

Programación. Test Autoevaluación Tema 3

Programación. Test Autoevaluación Tema 3 Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.

Más detalles

REFERENCIA DEL LENGUAJE

REFERENCIA DEL LENGUAJE REFERENCIA DEL LENGUAJE Sesión 07 Mg. Cadenas de caracteres Una cadena de caracteres es un arreglo de caracteres. Los caracteres son letras, números y signos de puntuación. Cuando un número se usa como

Más detalles

Apuntadores en C y C++

Apuntadores en C y C++ Apuntadores en C y C++ Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Prof. Marcos A. Gil T. 8 de diciembre de 2004 1. Introducción Los apuntadores en C y C++ son una herramienta

Más detalles

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * /

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * / undamentos de sintaxis en algunas instrucciones de C#.Net Dr. Ramón Roque Hernández Identificadores Un identificador le da nombre único a un elemento en un programa (ariables, procedimientos, etc.). No

Más detalles

Java para programadores

Java para programadores Java para programadores Java y Servicios Web I Master en Ingeniería Matemática Manuel Montenegro Dpto. Sistemas Informáticos y Computación Desp. 467 (Mat) montenegro@fdi.ucm.es Contenidos Variables. Tipos

Más detalles

Arquitectura (Procesador familia 80 x 86 )

Arquitectura (Procesador familia 80 x 86 ) Arquitectura (Procesador familia 80 x 86 ) Diseño de operación Basada en la arquitectura Von Newman Memoria CPU asignadas direcciones I / O BUS: Es un canal de comunicaciones Bus de direcciones: Contiene

Más detalles

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

USO DE SUBRUTINAS, TRANSMISIÓN DE PARÁMETROS Y COMPILACIÓN CONDICIONAL EN C++

USO DE SUBRUTINAS, TRANSMISIÓN DE PARÁMETROS Y COMPILACIÓN CONDICIONAL EN C++ USO DE SUBRUTINAS, TRANSMISIÓN DE PARÁMETROS Y COMPILACIÓN CONDICIONAL EN C++ Bruno López Takeyas Instituto Tecnológico de Nuevo Laredo Reforma Sur 2007, C.P. 88250, Nuevo Laredo, Tamps. México http://www.itnuevolaredo.edu.mx/takeyas

Más detalles

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes: Constantes Las constantes se pueden declarar con la palabra reservada const y se le asigna un valor en el momento de la declaracion, este valor no se puede modificar durante el programa y cualquier intento

Más detalles

Programación Estructurada

Programación Estructurada Programación Estructurada PROGRAMACIÓN ESTRUCTURADA 1 Sesión No. 2 Nombre: El lenguaje de programación C Contextualización Una constante en todos los lenguajes de programación (viejos y nuevos) es la implementación

Más detalles

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC. Programación n Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño o Vargas MsC. Variables y expresiones aritméticas Variables Conceptos de Memoria Una variable es un espacio en la memoria

Más detalles

Estatutos de Control C# Estatutos de Decisión (Selección)

Estatutos de Control C# Estatutos de Decisión (Selección) SELECCIÓN Estatutos de Control C# Estatutos de Decisión (Selección) IF Condición THEN Estatuto1 ELSE Estatuto2 Estatuto1 Statement Condición... Antes de ver esta presentación: Lee el Capítulo correspondiente

Más detalles

TEMA 3: El proceso de compilación, del código fuente al código máquina

TEMA 3: El proceso de compilación, del código fuente al código máquina TEMA 3: El proceso de compilación, del código fuente al código máquina 3.1 Fase de compilación y linkado (link, montado o enlace) Un programa escrito en un lenguaje de alto nivel, no puede ser ejecutado

Más detalles

Contenido. Conjunto de Instrucciones. Formato de la Instrucción. Instrucciones de 1 byte. Formato de la Instrucción 28/09/2011

Contenido. Conjunto de Instrucciones. Formato de la Instrucción. Instrucciones de 1 byte. Formato de la Instrucción 28/09/2011 1 ontenido 2 UNIDAD 5 EL LENGUAJE DE ENSAMBLADOR DEL Z80 onjunto de instrucciones Tipos de instrucciones Modos de direccionamiento El ensamblador del Z80 El simulador AVOET Implementación de un sistema

Más detalles

Principios de Computadoras II

Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Operadores y Expresiones rcoppo@uns.edu.ar Primer programa en Java 2 Comentarios en Java Comentario tradicional (multi-línea) Comentario de línea Comentario

Más detalles

El Diseño de un Lenguaje Máquina

El Diseño de un Lenguaje Máquina Arquitectura de Ordenadores Juego de Instrucciones del Procesador Intel Pentium Abelardo Pardo abel@it.uc3m.es Universidad Carlos III de Madrid Departamento de Ingeniería Telemática El Diseño de un Lenguaje

Más detalles

Diseño de compiladores. Organización de memoria. Organización de memoria. Organización de memoria. Zona de código 04/05/2014 ORGANIZACIÓN DE MEMORIA

Diseño de compiladores. Organización de memoria. Organización de memoria. Organización de memoria. Zona de código 04/05/2014 ORGANIZACIÓN DE MEMORIA Diseño de compiladores Gestión de la memoria / Generación de código ORGANIZACIÓN DE MEMORIA Organización de memoria Depende del tipo de lenguaje (declarativos, imperativos), del compilador y del sistema

Más detalles

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros Práctica 3. Paso de parámetros entre subrutinas 1. Objetivo de la práctica El objetivo de esta práctica es que el estudiante se familiarice con la programación en ensamblador y el convenio de paso de parámetros

Más detalles

TEMA 4. ESTRUCTURAS DE CONTROL

TEMA 4. ESTRUCTURAS DE CONTROL M.P. Sesmero, P. de Toledo, F.J. Ordoñez, J. Gómez-Romero, J.A. Iglesias, J.L. Mira Programación TEMA 4. ESTRUCTURAS DE CONTROL Grado en Ingeniería en Tecnologías Industriales Programación CONTENIDOS 4.1.

Más detalles

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS Una vez que ya sabes crear tus propios programas, vamos a analizar los fundamentos del lenguaje de programación C. Este capítulo incluye además los siguientes temas:

Más detalles

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C Algoritmo y Estructura de Datos Ing. M. Laura López 1 Estructura de un programa en C 2 Estructura de un programa en C #include Archivos de cabecera # define Definición de constantes Declaraciones Globales

Más detalles

8.4. El software en los μprocesadores

8.4. El software en los μprocesadores 8.4. El software en los μprocesadores Ejemplo de comandos de la CPU: Tarea: Sumar dos números A y B. Suponer los datos A y B almacenados en las posiciones 1000 2 y 1010 2 respectivamente. El resultado

Más detalles

1. Cuántas sentencias hay en la secuencia principal del siguiente programa?

1. Cuántas sentencias hay en la secuencia principal del siguiente programa? 1. Cuántas sentencias hay en la secuencia principal del siguiente programa? public class PruebaSwitch { System.out.print ("Opcion: "); case 3: System.out.println ("miércoles "); A. 1. B. 4. C. Más de 10.

Más detalles

Aprendiendo Sistemas Operativos: Programación de Procesadores de Arquitectura IA-32

Aprendiendo Sistemas Operativos: Programación de Procesadores de Arquitectura IA-32 Aprendiendo Sistemas Operativos: Programación de Procesadores de Arquitectura IA-32 Este documento forma parte de la serie Aprendiendo Sistemas Operativos y sirve como una introducción a los aspectos básicos

Más detalles

Instrucción De Salto Incondicional

Instrucción De Salto Incondicional INSTRUCCIONES DE CONTROL DE FLUJO Los programas que se han desarrollado hasta ahora se ejecutan en forma secuencial, esto es, el programa inicia su ejecución con la primera instrucción y continúa de arriba

Más detalles

El lenguaje C. 1. Identificadores, constantes y variables

El lenguaje C. 1. Identificadores, constantes y variables Principios de Programación El lenguaje C 1. Identificadores, constantes y variables 1.1. Conceptos de memoria Los nombres de variable como x, y, suma corresponden a localizaciones o posiciones en la memoria

Más detalles

SISTEMAS OPERATIVOS Arquitectura de computadores

SISTEMAS OPERATIVOS Arquitectura de computadores SISTEMAS OPERATIVOS Arquitectura de computadores Erwin Meza Vega emezav@unicauca.edu.co Esta presentación tiene por objetivo mostrar los conceptos generales de la arquitectura de los computadores, necesarios

Más detalles

Lenguaje de programación C. Introducción

Lenguaje de programación C. Introducción Lenguaje de programación C Introducción 1 Elementos del lenguaje C Colección de funciones Estas funciones contienen declaraciones, sentencias, expresiones y otros elementos que en conjunto indican a la

Más detalles

Fundamentos de JAVA. Angel Kuri Enero, /2/2006

Fundamentos de JAVA. Angel Kuri Enero, /2/2006 Fundamentos de JAVA Angel Kuri Enero, 2006 Enunciados y Expresiones Los siguientes son enunciados sencillos: int i = 1 import java.awt.font System.out.println( Esta moto es una + color + + marca); m.enginestate

Más detalles

Guía rápida para gestionar el puerto paralelo del PC

Guía rápida para gestionar el puerto paralelo del PC Guía rápida para gestionar el puerto paralelo del PC Descarga desde: http://eii.unex.es/profesores/jisuarez/descargas/ip/guia_rapida_pp.pdf José Ignacio Suárez Marcelo Universidad de Extremadura Escuela

Más detalles

Curso de Programación Avanzada en C

Curso de Programación Avanzada en C Curso de Programación Avanzada en C Copyright, 1996 Universidad Sim on Bol ivar 1 Prof. Mariela J. Curiel Contenido del Curso Conceptos BásicosB Estructuras de Control Arreglos Otros tipos de datos derivados

Más detalles

4. Operadores Operador asignación

4. Operadores Operador asignación Programación orientada a objetos con Java 43 4. Operadores Objetivos: a) Describir los operadores (aritméticos, incrementales, de relación, lógicos y de asignación) y los tipos de dato primitivos sobre

Más detalles

Se guardan en archivos con extencion c y los cabezales con extension h

Se guardan en archivos con extencion c y los cabezales con extension h Se guardan en archivos con extencion c y los cabezales con extension h Tipos de Variables: Tipo Tamaño(bytes) Limite inferior Limite superior char 1 -- -- unsigned char 1 0 255 short int 2-32768 +32767

Más detalles

TIPOS DE DATOS BASICOS EN LENGUAJE C

TIPOS DE DATOS BASICOS EN LENGUAJE C TIPOS DE DATOS BASICOS EN LENGUAJE C TIPO char int float double void ANCHO EN BIT 64 0 TIPOS DE DATOS RANGO EN PC -12 a 127 3.4E-3 a 3.4E+3 1.7E-30 a 1.7E+30 sin valores TIPO ANCHO EN BIT RANGO EN PC char

Más detalles

Relación de Problemas I

Relación de Problemas I Relación de Problemas I 352) $1'5e6 52/'È1 $5$1'$ 1. Realizar el cálculo del tiempo que transcurre durante la ejecución del bloque de instrucciones sombreado, en función del contenido de los registros

Más detalles

Apuntadores (Punteros)

Apuntadores (Punteros) Apuntadores (Punteros) x9ff10 X int 209 SESION 7 *ptr Definición Llamados también punteros. Un Apuntador es una variable que contiene una dirección de memoria, la cual corresponderá a un dato o a una variable

Más detalles

PHP: Lenguaje de programación

PHP: Lenguaje de programación Francisco J. Martín Mateos Carmen Graciani Diaz Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Tipos de datos Enteros Con base decimal: 45, -43 Con base octal: 043, -054

Más detalles

Tema 5: La pila, las macros y los procedimientos

Tema 5: La pila, las macros y los procedimientos Tema 5: La pila, las macros y los procedimientos S La pila S Las macros S Definición de procedimientos S Tipos de procedimientos: NEAR y FAR S Paso de parámetros a un procedimiento S Mediante registros

Más detalles

Contenido. Capítulo 1. Introducción a lenguaje C 1

Contenido. Capítulo 1. Introducción a lenguaje C 1 Contenido Capítulo 1. Introducción a lenguaje C 1 Introducción... 2 Qué es un lenguaje de programación?... 2 Tipos de lenguajes de programación... 2 Introducción a lenguaje C... 2 Historia de lenguaje

Más detalles

Operadores de comparación

Operadores de comparación Operadores de comparación Los operadores de comparación en C son: Igual (==) Distinto (!=) Mayor (>) y Mayor o igual (>=) Menor (

Más detalles

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA ELO311 Estructuras de Computadores

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA ELO311 Estructuras de Computadores 6.5. Comunicación de las funciones con su entorno. Hasta el momento se ha conceptualizado una subrutina como un segmento de código que ocurre a menudo en un programa. La idea puede flexibilizarse y aumentar

Más detalles

Instrucciones de control

Instrucciones de control Instrucciones de control Instrucciones de control de flujo C# ofrece un conjunto de sentencias similar al de C, C++ o Java. A continuación se estudian muy brevemente cada una de ellas. if if se utiliza

Más detalles

Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas

Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas Unidad V Análisis Semántico M.C. Juan Carlos Olivares Rojas Agenda 5.1 Analizador semántico 5.2 Verificación de tipos en expresiones. 5.3 Conversión de tipos. 5.4 Acciones agregadas en un analizador sintáctico

Más detalles

Programación En Lenguaje C

Programación En Lenguaje C Programación En Lenguaje C Introducción Básica para Primero de Bachillerato TECNOLOGÍA DE LA INFORMACIÓN IES PALAS ATENEA Lenguaje C Estructurado Secuencial De alto Nivel Altamente portable Necesita un

Más detalles

Tema 6 Organización y gestión de la memoria

Tema 6 Organización y gestión de la memoria Departamento de Tecnologías de la Información Tema 6 Organización y gestión de la memoria Ciencias de la Computación e Inteligencia Artificial Índice 6.1 Organización de la memoria en tiempo de ejecución

Más detalles

Fundamentos de Informática E.U.P. Universidad de Sevilla

Fundamentos de Informática E.U.P. Universidad de Sevilla Fundamentos de Informática E.U.P. Universidad de Sevilla Capítulo 3: FUNDAMENTOS DE PROGRAMACIÓN ÍNDICE (1) INTRODUCCIÓN A LA PROGRAMACIÓN IMPERATIVA Programación en lenguaje C INSTRUCCIÓN DE ASIGNACIÓN

Más detalles

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior PUNTEROS

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior PUNTEROS PUNTEROS 1 Punteros en C Un puntero es una variable que almacena direcciones de memoria tipo *puntero; tipo variable; puntero = &variable; ffd0 valor variable fff0 ffd0 puntero A partir de la última sentencia

Más detalles

Fundamentos de Programación 2017-I

Fundamentos de Programación 2017-I Fundamentos de Programación 2017-I Fundamentos para la construcción de código a partir del algoritmo Objetivo: El alumno construirá programas utilizando el lenguaje de programación C a través de un análisis

Más detalles

Programación en ensamblador y en alto nivel (C)

Programación en ensamblador y en alto nivel (C) Programación en ensamblador y en alto nivel (C) Taller de Microcontroladores año 2012 Optativa de grado y Curso de Posgrado El ISAdel AVR Preliminares 32 registros de 8 bits: R0 a R31 Los registros pueden

Más detalles

Lenguajes de programación

Lenguajes de programación Lenguajes de programación Un computador solo entiende lenguaje binario Un procesador tiene un conjunto finito de operaciones binarias Un programa de computador es una secuencia de estas instrucciones Etapas

Más detalles

= RETURN =3 7-. ELSE K

= RETURN =3 7-. ELSE K 11-. Pida Al Usuario Dos Números Enteros (Que Se Guardaran En Las Variables Num 1 Y Num2). Si Num2 Es Cero, Deberá Mostrar Un Mensaje De Error, Y En Caso Contrario Mostrara En Pantalla El Resto De La División

Más detalles

PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I

PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I Table of contents 1 INFORMACIÓN GENERAL...2 2 INTRODUCCIÓN... 2 3 OBJETIVOS GENERALES DE LA ASIGNATURA... 3 4 OBJETIVOS, TEMAS Y SUBTEMAS... 3 5 PLAN TEMÁTICO...6

Más detalles

Elementos léxicos del lenguaje de programación C

Elementos léxicos del lenguaje de programación C Elementos léxicos del lenguaje de programación C Elementos léxicos de los lenguajes de programación (tokens) Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices

Más detalles

Práctica 4 - Arquitectura CPU

Práctica 4 - Arquitectura CPU Práctica 4 - Arquitectura CPU Organización del Computador 1 1er. Cuatrimestre 2006 Programación en Assembler Ejercicio 1 Dados los siguientes valores de la memoria y del registro R0 de la arquitectura

Más detalles

SISTEMAS BASADOS EN MICROPROCESADORES

SISTEMAS BASADOS EN MICROPROCESADORES SISTEMAS BASADOS EN MICROPROCESADORES Grado en Ingeniería Informática ENUNCIADO PROBLEMA 1 A continuación se incluye el código de una aplicación formada por un programa principal escrito en lenguaje C,

Más detalles

Ejercicios. Arquitectura de Computadoras. José Garzía

Ejercicios. Arquitectura de Computadoras. José Garzía jercicios de rquitectura de Computadoras José Garzía n la figura se representa el diagrama de flujo de un algoritmo. B X Y +B í + 7=? No B B+ C +B Los registros, B y C tienen una longitud de 8 bits. 7

Más detalles

Introducción a la programación en Lenguaje Assembler.

Introducción a la programación en Lenguaje Assembler. Introducción a la programación en Lenguaje Assembler. Que son las instrucciones El set de instrucciones de un microprocesador es el set de entradas binarias que producen acciones definidas durante un ciclo

Más detalles

Programación estructurada (Introducción a lenguaje C)

Programación estructurada (Introducción a lenguaje C) Programación estructurada (Introducción a lenguaje C) M. en C. Sergio Luis Pérez Pérez UAM CUAJIMALPA, MÉXICO, D. F. Trimestre 15-I Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada

Más detalles

Laboratorio de Arquitectura de Redes. Entrada y salida estándar

Laboratorio de Arquitectura de Redes. Entrada y salida estándar Laboratorio de Arquitectura de Redes Entrada y salida estándar Entrada y salida estándar Entradas y salidas Salida con formato: printf() Entrada de datos con formato: scanf() El buffer de teclado Entrada

Más detalles

Fundamentos de programación

Fundamentos de programación Fundamentos de programación Estructuras de Control Estructuras de control Estructuras de control Estructura secuencial Estructura alternativa Sentencias if, if else Sentencias if else anidadas El operador

Más detalles

Sistemas Operativos Practica 1: procesos y concurrencia.

Sistemas Operativos Practica 1: procesos y concurrencia. Sistemas Operativos Practica 1: procesos y concurrencia. Objetivos: Introducir al alumno a los conceptos de programa, concurrencia, paralelismo y proceso o tarea. Manejo del concepto de concurrencia haciendo

Más detalles

Introducción a la Programación en Lenguaje Ensamblador.

Introducción a la Programación en Lenguaje Ensamblador. CAPITULO 5 Introducción a la Programación en Lenguaje Ensamblador. 5.1. INTRODUCCION Se entiende por modelo de programación al conjunto de registros accesibles por el usuario que junto al set de instrucciones

Más detalles

Unidad II Fundamentos de C++ M.C. Juan Carlos Olivares Rojas

Unidad II Fundamentos de C++ M.C. Juan Carlos Olivares Rojas Unidad II Fundamentos de C++ M.C. Juan Carlos Olivares Rojas Agenda 2.1 Familiarización con el ambiente de programación 2.2 Análisis de la estructura de un programa 2.3 Envío de mensajes a la salida estándar

Más detalles

Funciones. Diseño de funciones. Uso de instrucción jal y retorno de subrutina.

Funciones. Diseño de funciones. Uso de instrucción jal y retorno de subrutina. MIPS Funciones 1 Funciones Diseño de funciones. Uso de instrucción jal y retorno de subrutina. Se suelen denominar funciones, procedimientos, subrutinas, subprogramas a las estructuras que emplean los

Más detalles

Circuitos Digitales II y Laboratorio Electrónica Digital II y Laboratorio

Circuitos Digitales II y Laboratorio Electrónica Digital II y Laboratorio Circuitos Digitales II y Laboratorio Electrónica Digital II y Laboratorio Fundamentos de Arquitectura de Computadores Modelo de von Neumann Profesor: Felipe Cabarcas Correo:cabarcas@udea.edu.co Oficina:

Más detalles

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs. Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1

Más detalles

Tiempo de Compilación. Programa fuente. Secuencia. de caracteres. Scanner. Secuencia. de símbolos Parser. Compilador.

Tiempo de Compilación. Programa fuente. Secuencia. de caracteres. Scanner. Secuencia. de símbolos Parser. Compilador. ORGANIZACIÓN DE LA MEMORIA EN TIEMPO DE EJECUCIÓN Compilador Tiempo de Compilación Programa fuente Secuencia de caracteres Scanner Secuencia de símbolos Parser Árbol sintáctico Analizador semántico Generador

Más detalles

Informática Ingeniería en Electrónica y Automática Industrial

Informática Ingeniería en Electrónica y Automática Industrial Informática Ingeniería en Electrónica y Automática Industrial Entrada y salida estándar V1.3 Autores Entrada y salida estándar Entradas y salidas Salida con formato: printf() Entrada de datos con formato:

Más detalles

CÓMO FUNCIONA UN PLC Control Combinacional Programación del PLC

CÓMO FUNCIONA UN PLC Control Combinacional Programación del PLC CÓMO FUNCIONA UN PLC Control Combinacional Programación del PLC PROGRAMACIÓN DE PLC Procedimiento para programar y cargar: Determinar los requisitos del sistema al cual se aplica el PLC. Identificar los

Más detalles

Examen 23 de Febrero de 2007

Examen 23 de Febrero de 2007 Instrucciones Examen 23 de Febrero de 2007 Indique su nombre completo y número de cédula en cada hoja. Numere todas las hojas e indique la cantidad total de hojas que entrega en la primera. Escriba las

Más detalles

Paso de parámetros y gestión del marco de pila

Paso de parámetros y gestión del marco de pila Paso de parámetros y gestión del marco de pila Estructura de Computadores 1. Introducción En clases previas se ha presentado el modelo de programación del 88110 y se ha explicado cómo se ubican las distintas

Más detalles

FUNDAMENTOS DE INFORMÁTICA

FUNDAMENTOS DE INFORMÁTICA FUNDAMENTOS DE INFORMÁTICA Tema 2 Expresiones, operadores y estructuras de control Departamento de Ingeniería de Sistemas y Automática Universidad de Vigo Fundamentos de Informática. Departamento de Ingeniería

Más detalles

Guía práctica de estudio 05: Diagramas de flujo

Guía práctica de estudio 05: Diagramas de flujo Guía práctica de estudio 05: Diagramas de flujo Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Revisado por: Ing. Laura Sandoval Montaño Guía práctica de estudio 05: Diagramas de

Más detalles

Ciclos de máquina. Otro ejemplo: decremento de un registro par (donde rp = HL, DE, BC, SP) DCX rp

Ciclos de máquina. Otro ejemplo: decremento de un registro par (donde rp = HL, DE, BC, SP) DCX rp Ciclos de máquina Otro ejemplo: decremento de un registro par (donde rp = HL, DE, BC, SP) DCX rp Acceso a periféricos: función del pin IO/M Este μp cuenta con dos instrucciones específicas para I/O, llamadas

Más detalles

Interrupciones. Temporizadores y Contadores de eventos en microcontroladores.

Interrupciones. Temporizadores y Contadores de eventos en microcontroladores. Interrupciones. Temporizadores y Contadores de eventos en microcontroladores. Objetivos. Conocer y poder usar interrupciones externas. Programar rutinas de servicio de interrupciones. Entender las diferencias

Más detalles

Java para no Programadores

Java para no Programadores Java para no Programadores Programa de Estudio Java para no Programadores Aprende a programar con una de las tecnologías más utilizadas en el mercado de IT. Este curso está orientado a quienes no tienen

Más detalles

Práctica 3: Programación con subrutinas

Práctica 3: Programación con subrutinas Práctica 3: Programación con subrutinas 3.1 Objetivos El objetivo de esta práctica es estudiar el soporte del ensamblador del ARM para la gestión de subrutinas, para lo que resulta necesario familiarizarse

Más detalles