ror
означает «повернуть вправо», а movzwl
означает «переместить слово, расширяющее ноль на длинное» (по историческим причинам, начиная с 8086 года, во всей документации x86 «слова» только 16 бит).
Итак:
ror $0x8, %di
Повернуть 16-битное значение в регистре di
(который в x86-64 содержит первый целочисленный аргумент функции) на восемь бит; другими словами, обменяйте его старшие и младшие байты. Это часть, которая на самом деле делает работу ntohs
.
movzwl %di, %eax
Скопируйте 16-битное значение в di
в eax
, увеличив нулевое значение до 32-битного значения. Эта инструкция необходима, поскольку целочисленное возвращаемое значение функции входит в eax
, а если оно короче 32 бит, оно должно быть расширено до 32 бит.
retq
Возврат из функции. (q
- это просто подсказка, что вы работаете на x86-64.)