Advertisement
jazz_vico

orga 2 1erParcial2C2018

Nov 25th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. typedef struct node_t{
  2.     struct node_t *next;
  3.     struct node_t *prev;
  4.     char *string;
  5. }node;
  6.  
  7.  
  8. %define offset_next=0
  9. %define offset_prev=8
  10. %define offset_string=16
  11. %define size=24
  12. %define null 0
  13.  
  14.  
  15. ;rdi=node**l sil=char c
  16. .borrarTerminadasEn:
  17.     push rbp ;alinea
  18.     mov rbp rsp  
  19.     push r12 ;dealinea
  20.     push r13 ;desalinea
  21.  
  22.     mov r12 rdi
  23.     monv r13 rsi
  24.     .ciclo:
  25.         mov rdi [r12+string]
  26.         mov rsi r13
  27.         call terminadasEn
  28.         cmp rax, 0x01
  29.         je .borrar
  30.         .seguir:
  31.         cmp qword[r12+next], null
  32.         je .fin
  33.         lea r12 [r12+size]
  34.         jmp .ciclo
  35.  
  36.     .borrar:
  37.         mov r8, [r12+offset_prev]
  38.         mov r9, [r12+offset_next]
  39.         mov [r8+offset_next], r9
  40.         mov [r9+offset_prev], r8
  41.         mov rdi [r12+offset_string]
  42.         call free
  43.         mov rdi [r12]
  44.         call free
  45.         jmp .seguir
  46.  
  47.     .fin:
  48.         pop r13
  49.         pop r12
  50.         pop rbp
  51.         ret
  52.  
  53. ;rdi=char* string sil= char c
  54. .terminadasEn:
  55.     push rbp
  56.     mov rbp rsp
  57.     xor rax rax
  58.     cmp byte[rdi], null
  59.     je .fin
  60.     .ciclo:
  61.         cmp byte[rdi+1], null
  62.         je .finCiclo       
  63.         inc rdi
  64.         jmp .ciclo
  65.     .finCiclo:
  66.         cmp [rdi] sil
  67.         jne .fin
  68.         inc rax
  69.         jmp .fin
  70.     .fin:
  71.         pop rbp
  72.         ret    
  73.  
  74.  
  75. ;rdi = node* n
  76. .SuperConcatenar:
  77.     push rbp ;alinea
  78.     mov rbp rsp
  79.     push r12 ;desalinea
  80.     push r15 ;alinea r15 acum res
  81.     push r14 ;dealinea
  82.     lea rsp [rsp+8]
  83.     xor r14 r14 ;r14=contador de string
  84.     mov r12 rdi
  85.     .ciclo:
  86.         cmp [r12] null
  87.         je .fin
  88.         mov rdi [r12+string]
  89.         call strlen ; rax=largo string
  90.         xor rcx rcx
  91.         mov r8 [r12+string]
  92.         .agregarChar:
  93.             mov r9 [r8+rcx]
  94.             mov [r15+r14] r9
  95.             inc r14
  96.             inc rcx
  97.             cmp rax rcx
  98.             jne .agregarChar
  99.         mov r12 [r12+next]
  100.         jmp .ciclo
  101.     .fin:
  102.         mov rax r15
  103.         lea rsp [rsp-8]
  104.         pop r14
  105.         pop r15
  106.         pop r12
  107.         pop rbp
  108.         ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement