Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef struct node_t{
- struct node_t *next;
- struct node_t *prev;
- char *string;
- }node;
- %define offset_next=0
- %define offset_prev=8
- %define offset_string=16
- %define size=24
- %define null 0
- ;rdi=node**l sil=char c
- .borrarTerminadasEn:
- push rbp ;alinea
- mov rbp rsp
- push r12 ;dealinea
- push r13 ;desalinea
- mov r12 rdi
- monv r13 rsi
- .ciclo:
- mov rdi [r12+string]
- mov rsi r13
- call terminadasEn
- cmp rax, 0x01
- je .borrar
- .seguir:
- cmp qword[r12+next], null
- je .fin
- lea r12 [r12+size]
- jmp .ciclo
- .borrar:
- mov r8, [r12+offset_prev]
- mov r9, [r12+offset_next]
- mov [r8+offset_next], r9
- mov [r9+offset_prev], r8
- mov rdi [r12+offset_string]
- call free
- mov rdi [r12]
- call free
- jmp .seguir
- .fin:
- pop r13
- pop r12
- pop rbp
- ret
- ;rdi=char* string sil= char c
- .terminadasEn:
- push rbp
- mov rbp rsp
- xor rax rax
- cmp byte[rdi], null
- je .fin
- .ciclo:
- cmp byte[rdi+1], null
- je .finCiclo
- inc rdi
- jmp .ciclo
- .finCiclo:
- cmp [rdi] sil
- jne .fin
- inc rax
- jmp .fin
- .fin:
- pop rbp
- ret
- ;rdi = node* n
- .SuperConcatenar:
- push rbp ;alinea
- mov rbp rsp
- push r12 ;desalinea
- push r15 ;alinea r15 acum res
- push r14 ;dealinea
- lea rsp [rsp+8]
- xor r14 r14 ;r14=contador de string
- mov r12 rdi
- .ciclo:
- cmp [r12] null
- je .fin
- mov rdi [r12+string]
- call strlen ; rax=largo string
- xor rcx rcx
- mov r8 [r12+string]
- .agregarChar:
- mov r9 [r8+rcx]
- mov [r15+r14] r9
- inc r14
- inc rcx
- cmp rax rcx
- jne .agregarChar
- mov r12 [r12+next]
- jmp .ciclo
- .fin:
- mov rax r15
- lea rsp [rsp-8]
- pop r14
- pop r15
- pop r12
- pop rbp
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement