问一段代码

MagiSu 2010-02-08 10:54:03
我的main.cpp

const char* data="abcdefg...............................(very long string)"
char l[10];

strcpy(l,data);

编译-O3之后得到代码


0x00000000004004a0 <main+0>: lea -0x18(%rsp),%rdi
0x00000000004004a5 <main+5>: mov $0x4005c0,%esi
0x00000000004004aa <main+10>: mov $0x94,%ecx
0x00000000004004af <main+15>: rep movsq %ds:(%rsi),%es:(%rdi)
这个是strcpy

0x00000000004004b2 <main+18>: mov (%rsi),%eax
0x00000000004004b4 <main+20>: mov %eax,(%rdi)
0x00000000004004b6 <main+22>: movzwl 0x5a7(%rip),%eax # 0x400a64
0x00000000004004bd <main+29>: add $0x4,%rdi
0x00000000004004c1 <main+33>: mov %ax,(%rdi)
0x00000000004004c4 <main+36>: movzbl 0x59b(%rip),%eax # 0x400a66
0x00000000004004cb <main+43>: mov %al,0x2(%rdi)
上面的又是什么?
0x00000000004004ce <main+46>: retq
...全文
121 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
MagiSu 2010-02-09
  • 打赏
  • 举报
回复
仔细一想果然如此。楼上的果然英明。
toborac 2010-02-08
  • 打赏
  • 举报
回复
还是strcpy 用来清理串尾巴
你看main+15行是 movsq 是按q处理就是4个byte
main+22是movzwl 是w word
main+36是movzbl 是b byte

好久不用了 不细究了 应该差不多

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧