gpt4 book ai didi

c - gcc 汇编字符串表示

转载 作者:太空宇宙 更新时间:2023-11-04 01:49:25 25 4
gpt4 key购买 nike

char a[] = "abc";   // movl    $6513249, -12(%rbp)
char ab[] = "ab"; // movw $25185, -11(%rbp)
char abc[] = "a"; // movw $97, -10(%rbp)

上面的 C 代码在汇编 (gcc -S code.c) 中表示为:

movl    $6513249, -12(%rbp)
movw $25185, -15(%rbp)
movw $97, -17(%rbp)

97在十进制中是a,为什么ab是25185,abc是6513249?

最佳答案

我们取第一行的32位整数的十六进制值:

>>> hex(6513249)
'0x636261'

这是cba

由于处理器是小端字节序的,因此它只是一种优化的方式来初始化一个小字符串,只需移动 32 位,而不是进行繁琐的逐字节复制。

这里没有为所有字符串处理空终止(movw $25185, -15(%rbp) 设置 ab 但是不以 nul 终止),并且它在您未显示的代码的其他地方完成(请注意,nul 终止字节有空间:第一个字符串位于偏移量 -12,第二个字符串位于偏移量 -15,这使得它3个字节长,和最后一个一样)

关于c - gcc 汇编字符串表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46942038/

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