Advertisement
Guest User

Untitled

a guest
Feb 2nd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 2014-09-17
  2.  
  3. #include <iostream>
  4. using namespace std;
  5. struct st1 { char vc[4]; }; struct st2 { int vd[4]; };
  6. class cl
  7. {   st1 s; int v[4];
  8. public:
  9.     cl(char c, st2& s2);
  10.     void elab1(st1 s1, st2 s2);
  11.     void stampa()
  12.     {   int i;
  13.         for (i=0;i<4;i++) cout << s.vc[i] << ' '; cout << endl;
  14.         for (i=0;i<4;i++) cout << v[i] << ' '; cout << endl << endl;
  15.     }
  16. };
  17.  
  18.  
  19. #include "cc.h"
  20. cl::cl(char c, st2& s2) {
  21.     for (int i = 0; i < 4; i++) {
  22.         s.vc[i] = c + i;
  23.         v[i] = s2.vd[i] + s.vc[i];
  24.     }
  25. }
  26. void cl::elab1(st1 s1, st2 s2) {
  27.     cl cla('a', s2);
  28.     for (int i = 0; i < 4; i++) {
  29.         if (s.vc[i] <= s1.vc[i]) {
  30.             s.vc[i] = cla.s.vc[i];
  31.             v[i] = cla.v[i];
  32.         }
  33.     }
  34. }
  35.  
  36. SOLUZIONE
  37.  
  38. .global _ZN2clC1EcR3st2
  39.  
  40. _ZN2clC1EcR3st2:
  41.  
  42.   # RECORD DI ATTIVAZIONE
  43.  # &s2   -24
  44.  # i   |   c     -16
  45.  # this      -8
  46.  
  47. .set s2,    -24
  48. .set i,   -12
  49. .set c,   -16
  50. .set this,  -8
  51.  
  52.   # PROLOGO
  53.   pushq %rsp
  54.   movq %rsp,    %rbp
  55.   subq $24,   %rsp
  56.  
  57.   # COPIO PARAMETRI
  58.   movq %rdi,    this(%rbp)
  59.   movb %sil,    c(%rbp)
  60.   movq %rdx,    s2(%rbp)
  61.  
  62.   movl $0,    i(%rbp)
  63. for:
  64.   cmpl $4,    i(%rbp)
  65.   jge finefor
  66.  
  67.   movq this(%rbp),    %rdi
  68.   movslq  i(%rbp),    %rcx
  69.   movb c(%rbp),   %al
  70.   addb %cl,    %al
  71.   movb %al,   (%rdi,  %rcx)           # (%rdi,  %rcx) = s.vc[i]
  72.  
  73.   movq s2(%rbp, %rcx, 4),    %r9      # s2.vd[i]
  74.   addq  (%rdi,  %rcx),    %r9
  75.   movq %r9,   4(%rdi,  %rcx, 4)
  76.  
  77.   incl i(%rbp)
  78.   jmp for
  79. finefor:
  80.  
  81.   leave
  82.   ret
  83.  
  84.  
  85. # ELAB1
  86.  
  87. .global _ZN2cl5elab13st13st2
  88.  
  89. _ZN2cl5elab1E3st13st2:
  90.  
  91.   # RECORD DI ATTIVAZIONE
  92.  # cla.s   |    _ _ _ _    -64
  93.  # cla.v[1]    |   cla.v[0]    -56
  94.  # cla.v[3]    |   cla.v[2]    -48
  95.  # cla     -40
  96.  # s2[1]   |   s2[0]   -32
  97.  # s2[3]   |   s2[2]   -24
  98.  # i   |   s1   -16
  99.  # this    -8
  100.  
  101. .set this, -8
  102. .set i, -12
  103. .set s1, -16
  104. .set s2, -32
  105. .set cla, -64
  106.  
  107.   # PROLOGO
  108.   pushq %rsp
  109.   movq %rsp,    %rbp
  110.   subq $64,   %rsp
  111.  
  112.   # COPIO PARAMETRI
  113.   movl %esi,  s1(%rbp)
  114.   movq %rdi,  this(%rbp)
  115.   movq %rdx,  s2(%rbp)          # parte piΓΉ significativa di s2
  116.   movq %rcx,  s2+8(%rbp)        # parte meno significativa di s2
  117.  
  118.   # CREO CLA
  119.   leaq cla(%rbp),   %rdi
  120.   movb $'a',    %sil
  121.   leaq s2(%rbp),    %rdx
  122.   call _ZN2clC1EcR3st2
  123.  
  124.   movl $0,    i(%rbp)
  125. for1:
  126.   cmpl $4,    i(%rbp)
  127.   jge finefor
  128.  
  129.   movslq i(%rbp),    %rcx
  130.   movq this(%rbp),    %r8
  131.   leaq cla(%rbp),   %r9
  132.  
  133. if:
  134.   movb (%r8,  %rcx),    %al     # al prende s.vc[i]
  135.   cmpb s1(%rbp, %rcx),    %al    # confronto  s1.vc[i] con s.vc[i]
  136.   jg fineif
  137.  
  138.   movb (%r9, %rcx), %al       # in al ho salvato l'indrizzo di s.vc[i], quindi
  139.                              # sposto cla.s.vc[i] in s.vc[i]
  140.   movq 4(%r9, %rcx, 4),     %rax
  141.   movq %rax,    4(%r8, %rcx, 4)
  142. fineif:
  143.   incl i(%rbp)
  144.   jmp for1
  145. finefor1:
  146.   leave
  147.   ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement