Low level code / Assembly

C/C++ Low Level Curriculum
这系列的 blog 简要介绍了(x86上)常用 C++ 的汇编code。
不过注意作者犯了一个比较大的错误:blog 中堆栈相关的汇编示例都是 cdecl,但作者的说明中写的都是 stdcall。应用 callee clean-up 的 stdcall 最显著的特征是用 ret xx 指令在函数返回的同时弹出堆栈,而 caller clean-up 的 cdecl 则直接用 ret 指令。我手上版本的 GCC 和 MSVC 的默认设置都是 cdecl。

实际看代码的话,就算同是 cdecl,GCC 生成的汇编和 MSVC 的也是有些差别的。比如 MSVC 进入函数后立刻 push ebx/esi/edi,而 GCC 则默认这些寄存器不会被修改。

其它架构还没有研究,可以先浏览下 wiki calling convention

如果各位看到其它不错的介绍也请 comment 给我。

Advertisements
This entry was posted in Computer and Internet, Programming and Algorithm and tagged . Bookmark the permalink.

One Response to Low level code / Assembly

  1. rat says:

    正在啃深入理解计算机系统,好像没讲。。。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s