首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何理解ntohs的实现?

如何理解ntohs的实现?
EN

Stack Overflow用户
提问于 2011-04-14 10:45:37
回答 1查看 3.1K关注 0票数 3
代码语言:javascript
复制
(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在这里做什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-14 10:58:08

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

所以:

代码语言:javascript
复制
ror     $0x8, %di

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

代码语言:javascript
复制
movzwl  %di, %eax

di中的16位值复制到eax,将其零扩展为32位值。此指令是必需的,因为函数的整型返回值以eax为单位,如果返回值小于32位,则必须将其扩展到32位。

代码语言:javascript
复制
retq

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5657989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档