Advertisement
lukhavi

AVRtiny2313_ReferenciaC++

May 1st, 2020
4,355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 2.64 KB | None | 0 0
  1.  #include<avr/io.h>
  2. int main(void){
  3. int x = 17;
  4. int& ref_x = x;
  5. ref_x = 33;
  6. return 0;
  7. }
  8.      
  9.  
  10.  
  11.  
  12.  
  13.  .file   "tiny2.cpp"
  14. __SP_L__ = 0x3d
  15. __SREG__ = 0x3f
  16. __tmp_reg__ = 0
  17. __zero_reg__ = 1
  18.  
  19.         .text
  20. .global main
  21.         .type   main, @function
  22. main:
  23.         push r28         ;                      // reserva YL en Pila y Stack = Stack -1
  24.         push r29         ;                      // reserva YH en Pila y Stack = Stack -1
  25.         in r28,__SP_L__  ;                      // YL = r28 = Stack-2 = SPL
  26.         clr r29  ;                              // SPH = r29 = 0
  27.         subi r28,lo8(-(-4))      ;              // SP = SPL-4  ---> puntal de referencia
  28.         out __SP_L__,r28         ;              // SP == Y
  29. /* prologue: function */
  30. /* frame size = 4 */                            // marco de pila 4 bytes
  31. /* stack size = 6 */                            // SP = SPL:SPH --> r28:r29 == YL:YH = Y --> YH:YL=SPH:SPL= SP
  32. .L__stack_usage = 6                             // x es de 16 bits = 1 palabra
  33.         ldi r24,lo8(17)  ;  tmp44,              // low(x)
  34.         ldi r25,0        ;                      // hi(x)
  35.         std Y+4,r25      ;  x, tmp44            // store hi(x) en SP+4
  36.         std Y+3,r24      ;  x, tmp44            // store low(x) en SP+3
  37.         movw r24,r28     ;  tmp45,              // r28=SPL=YL i.e.  r24 = SPL
  38.         adiw r24,3       ;  tmp45,              // add (SP + 3) en R25:R24
  39.         std Y+2,r25      ;  ref_x, tmp45        // store (SP+3) en Stack  
  40.         std Y+1,r24      ;  ref_x, tmp45        // idem
  41.         ldd r24,Y+1      ;  tmp46, ref_x        // load (SP +3) desde Stack a r25:r24
  42.         ldd r25,Y+2      ;  tmp46, ref_x        // idem
  43.         ldi r18,lo8(33)  ;  tmp47,              // r19:r18 = 33
  44.         ldb r19,0        ;                      // idem
  45.         movw r30,r24     ; , tmp46              // Z = r31:r30 = r25:r24 => Z = (SP+3)
  46.         std Z+1,r19      ;  *ref_x_1, tmp47     // store r19:r18=33 en Z+1 = (SP+4) y Z = (SP +3)
  47.         st Z,r18         ;  *ref_x_1, tmp47     //  x esta en xH:xL = |(SP+4):(SP+3)|
  48.         ldi r24,0        ;  D.1984              // r24 = 0      
  49.         ldi r25,0        ;  D.1984              // r25 = 0
  50. /* epilogue start */
  51.         subi r28,lo8(-(4))       ;              //  r28 = SP+4  // restaura Puntero de Pila
  52.         out __SP_L__,r28         ;              //  Stack = Y+4
  53.         pop r29  ;                              //  retira r29 y Stack = Stack +1
  54.         pop r28  ;                              //  retira r28 y Stack = Stack +1 = RAMEND
  55.         ret                                     // retorna
  56.         .size   main, .-main
  57.         .ident  "GCC: (GNU) 4.8.2"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement