nasmで1~100まで数える - Qiita

上記の記事を参考に次のコードを実行しますとエラーが返されました。調べたところオプションを設定する必要があるとかないとかのようですがよくわかりません、よろしくお願いします

extern printf                  ; printf関数を持ってくる

section .data
    fmt: db "iteration: %d", 10, 0         ; printfで用いるフォーマット

section .text
    global _main
_main:
    mov rdx, 1                  ; 初期値
    mov rcx, 10

_loop:
    push rcx                  ; rcxの避難
    push rdx                  ; rdxの避難

    mov rdi, fmt                ; フォーマット
    mov rsi, rdx                ; カウントしている値

    call printf               ; printfをコール
    ; printfのコール時にレジスタの値が消えてしまう

    pop rdx                  ; rdxを持ってくる
    pop rcx                  ; rcxを持ってくる

    add rdx, 1               ; rdxに1加算

    cmp rcx, 0
    loop _loop                  ; ループバック

fin:
    mov rax, 0x2000001
    mov rdi, 0
    syscall

エラー

 $ ld -macosx_version_min 10.14 -lSystem -o p100 p100.o
    Undefined symbols for architecture x86_64:
     "printf", referenced from:
          _loop in p100.o
      ld: symbol(s) not found for inferred architecture x86_64

また、

mov rsi, rdx

としている理由がわかりません