Advertisement
jazz_vico

orga2 1erParcial2C18ej1

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