Разница между системными вызовами в различных ассемблерных средах может заключаться в особенностях реализации механизма системных вызовов для кода 32- и 64-битной разрядности. 1
Для 32-битного кода (x86 ABI, архитектура i386) есть два варианта вызова системных функций: 1
Для 64-битного кода в Unix System V ABI, который обязателен как для Linux, так и для других юниксов, совершение системного вызова требует положить код вызова в регистр rax, а параметры к нему (до 6) — в регистры rdi, rsi, rdx, rcx, r8, r9, и дополнительные параметры (если есть) — на стек. 3 Затем используется инструкция syscall и проверяется rax для получения кода возврата, где 0 обычно означает отсутствие ошибок. 3
Также в разных ассемблерных средах для реализации системных вызовов могут использоваться различные макросы, например, в NASM это макросы lsyscall и lsyscallr, которые загружают параметры в регистры в прямом и обратном порядке. 1