Número de instruções executadas diferentes para o programa Hello World Nasm Assembly e C

Eu tenho um depurador simples (usando ptrace:http://pastebin.com/D0um3bUi) para contar o número de instruções executadas para um determinado programa executável de entrada. Ele usa o modo de execução de etapa única ptrace para contar as instruções.

Para isso, quando o executável do programa 1) (a.out do gcc main.c) é fornecido como entrada para o meu depurador de teste, ele imprime cerca de 100k como instruções executadas. Quando eu uso-static opção fornece 10681 instruções.

Agora em 2) eu crio um programa de montagem e uso o NASM para compilar e vincular e, quando esse executável é fornecido como entrada de depurador de teste, ele mostra 8 instruções como a contagem e qual é o apt.

O número de instruções executadas no programa 1) é alto devido à vinculação do programa às bibliotecas do sistema em tempo de execução? usado -estatic e que reduz a contagem em um fator de 1/10. Como posso garantir que a contagem de instruções seja apenas a função principal do Programa 1) e como é que o Programa 2) está relatando para o depurador?

1)

#include <stdio.h>

int main()
{
    printf("Hello, world!\n");
    return 0;
}    

Eu uso o gcc para criar o executável.

2)

; 64-bit "Hello World!" in Linux NASM

global _start            ; global entry point export for ld

section .text
_start:

    ; sys_write(stdout, message, length)

    mov    rax, 1        ; sys_write
    mov    rdi, 1        ; stdout
    mov    rsi, message    ; message address
    mov    rdx, length    ; message string length
    syscall

    ; sys_exit(return_code)

    mov    rax, 60        ; sys_exit
    mov    rdi, 0        ; return 0 (success)
    syscall

section .data
    message: db 'Hello, world!',0x0A    ; message and newline
    length:    equ    $-message        ; NASM definition pseudo-                             

Nasm -f elf64 -o main.o -s main.asm
ld -o main main.o

questionAnswers(2)

yourAnswerToTheQuestion