Откройте файл из аргумента командной строки

Я пытаюсь создать программу сборки, которая создает файл, указанный в командной строке (argv [1]). Он отлично работает, если строка уже сохранена, но если я запустил ее как есть, а имя_файла не было перемещено в rbx, он прекрасно работает.

section .text
   global _start

_start:

  ; Equivalent to mov rsp, [rsp+8]
  pop   rbx; argc
  pop   rbx; argv[0]
  pop   rbx; argv[1]

  mov   rax, 8
 ;mov   rbx, file_name  ; Commented out 
  mov   rcx, 0744
  syscall

  ; Exit
  mov   rax, 1
  mov   rbx, 0
  syscall

section .data
  file_name db'file.txt'

Я также попробовал это изВот и теперь я понимаю, что это прыжок на выход, хотя argc равен 2, но, тем не менее, я попытался безрезультатно:

  pop   rcx
  cmp   rcx, 2
  jne   exit
  add   rsp, 8
  pop   rbx

  mov   rax, 8
  mov   rcx, 0744
  syscall

Как я могу это исправить?

Изменить 1:

Перешел на 64-битные системные вызовы. Вот моя привет мировая практика:

section .text
   global _start

_start:
  mov   rax, 1
  mov   rdi, 1
  mov   rsi, string
  mov   rdx, strlen
  syscall

  ; Exit
  mov   rax, 60
  mov   rbx, 0
  syscall

  section .data
    string      db 'Hello, World!', 10
    strlen      equ $ - string

Теперь с созданием файла:

section .text
   global _start

_start:
  mov   rax, 85
  mov   rdi, file_name
  mov   rsi, 0744
  syscall

  ; Exit
  mov   rax, 60
  mov   rbx, 0
  syscall

section .data
  file_name     db 'File.txt'

И, наконец, с аргументами файла:

section .text
   global _start

_start:
  pop   rbx
  pop   rbx
  pop   rbx
  mov   rdi, rbx

  mov   rax, 85
  mov   rsi, 0744
  syscall

  ; Exit
  mov   rax, 60
  mov   rbx, 0
  syscall

Ответы на вопрос(0)

Ваш ответ на вопрос