gpt4 book ai didi

assembly - 如何理解ntohs的实现?

转载 作者:行者123 更新时间:2023-12-03 00:10:33 26 4
gpt4 key购买 nike

(gdb) disas htons
Dump of assembler code for function ntohs:
0x00000037aa4e9470 <ntohs+0>: ror $0x8,%di
0x00000037aa4e9474 <ntohs+4>: movzwl %di,%eax
0x00000037aa4e9477 <ntohs+7>: retq

rormovzwl 在这里做什么?

最佳答案

ror 代表“向右旋转”,movzwl 代表“移动,零扩展字长”(出于历史原因,可以追溯到8086,在所有 x86 文档中“字”只有 16 位)。

所以:

ror     $0x8, %di

将寄存器 di(在 x86-64 上,包含函数的第一个整数参数)中的 16 位值右移 8 位;换句话说,交换其高字节和低字节。这实际上是完成 ntohs 工作的部分。

movzwl  %di, %eax

di中的16位值复制到eax,并将其零扩展为32位值。该指令是必要的,因为函数的整数返回值位于 eax 中,如果它短于 32 位,则必须扩展为 32 位。

retq

从函数返回。 (q 只是表明您使用的是 x86-64 的线索。)

关于assembly - 如何理解ntohs的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5657989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com