Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Getopt - getopt.asm

getopt.asm

Caricato da: ZioCrocifisso
Scarica il programma completo

  1. global getopt
  2.  
  3. global optarg
  4. global opterr
  5. global optind
  6. global optopt
  7.  
  8. section .data
  9.         optarg dq 0
  10.         opterr dd 0
  11.         optind dd 1
  12.         optopt dd 0
  13.  
  14. section .text
  15.         getopt:
  16.                 mov rbx, 0
  17.                 mov ebx, [optind]
  18.  
  19.                 cmp ebx, edi
  20.                 jge .end
  21.  
  22.                 mov rbx, [rsi + rbx * 8]
  23.                 cmp rbx, 0
  24.                 je .end
  25.  
  26.                 cmp byte [rbx], '-'
  27.                 jne .end
  28.  
  29.                 inc rbx
  30.                 mov rax, qword 0
  31.                 mov al, [rbx]
  32.  
  33.                 cmp al, 0
  34.                 je .end
  35.  
  36.                 cmp al, '-'
  37.                 je .last
  38.  
  39.                 mov r15, rdx
  40.                 .loop:
  41.                         mov cl, [rdx]
  42.                         cmp cl, 0
  43.                         je .unknown
  44.  
  45.                         cmp al, cl
  46.                         je .found
  47.  
  48.                         inc rdx
  49.                         jmp .loop
  50.  
  51.                 .found:
  52.                 cmp byte [rdx + 1], ':'
  53.                 jne .next
  54.  
  55.                 inc rbx
  56.                 cmp byte [rbx], 0
  57.                 je .argvarg
  58.  
  59.                 mov [optarg], rbx
  60.                 jmp .next
  61.  
  62.                 .argvarg:
  63.                 inc dword [optind]
  64.                 cmp dword [optind], edi
  65.                 jge .missing
  66.  
  67.                 mov rbx, 0
  68.                 mov ebx, dword [optind]
  69.                 mov rbx, [rsi + rbx * 8]
  70.  
  71.                 mov qword [optarg], rbx
  72.                 jmp .next
  73.  
  74.                 .missing:
  75.                 mov [optopt], al
  76.  
  77.                 cmp byte [r15], ':'
  78.                 jne .unknown
  79.  
  80.                 mov rax, ':'
  81.                 jmp .next
  82.  
  83.                 .unknown:
  84.                 mov rax, '?'
  85.                 jmp .next
  86.  
  87.                 .last:
  88.                 mov rax, -1
  89.  
  90.                 .next:
  91.                 inc dword [optind]
  92.                 ret
  93.  
  94.                 .end:
  95.                 mov rax, -1
  96.                 ret