ej2_prefijo.asm 973 Bytes
Newer Older
1 2 3 4 5 6 7

CHAR_SIZE equ 1

section .text

extern strcpy

Daniel Alejandro Maydana's avatar
Daniel Alejandro Maydana committed
8 9 10 11
global prefijo_de
global quitar_prefijo


12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
;rsi = char* str2
;rdi = char* str1

prefijo_de:
   push rbp
   mov rbp, rsp

   xor rax, rax

   .while:
      mov cl, [rdi]
      mov dl, [rsi]

      test cl, cl
      jz .end

      test dl, dl
      jz .end

      cmp cl, dl
      jne .end

      inc rsi
      inc rdi
      inc rax

      jmp .while

   .end:
   mov rsp, rbp
   pop rbp
   ret



;rsi = char* str2
;rdi = char* str1

quitar_prefijo:
   push rbp
   mov rbp, rsp
   sub rsp, 16
   push r8
   push r9
   
   mov [rbp - 8], rsi ; str2
Daniel Alejandro Maydana's avatar
Daniel Alejandro Maydana committed
58
   mov [rbp - 16], rdi ; str1
59 60 61 62 63
   
   call prefijo_de
   mov r8, rax 
   
   call strlen
Daniel Alejandro Maydana's avatar
Daniel Alejandro Maydana committed
64
   mov r9, rax 
65

Daniel Alejandro Maydana's avatar
Daniel Alejandro Maydana committed
66
   sub r9, r8 
67
   add r9, 1
Daniel Alejandro Maydana's avatar
Daniel Alejandro Maydana committed
68 69 70 71
   
  ;r8 = longitud_prefijo
  ;r9 = res_size 

72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
   mov rax, CHAR_SIZE
   imul r9
   
   mov rsi, rax
   call malloc 
   
   mov rsi, rax
   mov rdi, [rbp - 8]
   add rdi, r8

   call strcpy

   pop r9
   pop r8
   mov rsp, rbp
   pop rbp
   ret