马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一条指令可能有很多细节,比如第二个操作数和第一个操作数中,哪个只能是寄存器,哪个不能用寄存器加立即数等。如果要用手写汇编语言来开发一个软件的话,这些知识很重要。但是实际上,现在需要的是用C语言或更高级的语言进行开发,只是需要理解一些没有C代码的部分。读者可以认为,那些代码的汇编指令用法一定是正确的,因为它们是编译器生成的。 1.2节(简要复习常用的汇编指令)将简要地回顾那些指令,并保证这些回顾非常容易理解。 1.1.1 用Visual Studio 创建工程 建议读者的计算机操作系统的版本最好是windows xp或者更高的版本,使用Vista 问题也不大,虽然可能操作细节和界面与本书描述的情况稍有不同。然后,请安装某个版本的Visual Studio,推荐Visual Studio 2003或者更高的版本。下面的描述同时顾及Visual Studio 2003和Visual Studio 2005的情况,语言版本为英文。 下面的步骤将在Visual Studio上建立一个用于实验的工程。有经验的读者可以忽略下面的描述。 1、打开Microsoft Visual Studio2005,选择主菜单“File”。 2、选择子菜单“New”下面的“Project”,打开“New Project”对话框。 3、左边选择Visual C++,Win32;右边选择Win32 Console Application;下面输入一个工程名,然后单击“OK”按钮,出现向导。一切都选择默认设置,最后单击“Finish”按钮。 此时新建立的主文件是一个扩展名为.cpp的文件,请将它改为扩展名为.c的文件。 Windows底层代码基本上都是用C语言编写的,研究C语言和汇编指令的关系是本节的任务。为此,这个文件必须改变为扩展名为.c的文件,这样VC才会自动以C语言的方式进行编译。 4、如果读者使用的是Visual Studio2005,直接在左边的Solution Explorer中用鼠标右键单击文件YourProjectName.cpp,选择“Rename”,然后把.cpp改为.c即可。 如果是更老的Visual Studio版本,请单击右键,Remove这个文件。然后在外面改名,再对工程单击右键,选择“Add”;再选择“Exist Item”,追加进来。 此时程序是这样的: - #include <stdio.h>
- int main(int argc,char* argv[])
- {
- return 0;
- }
复制代码
1.1.2 用Visual Studio查看汇编代码 C语言程序对应的汇编代码,可以在VC中非常清楚地显示出对应关系。但是并不是所有的读者都知道哦如何调出汇编指令窗口。这个诀窍在下面描述。 1、VC必须处于调试状态才能看到汇编指令窗口。因此,请在return 0一句上设置一个断点:把光标移到那一行,然后按下F9键设置一个断点。 2、按下F5键调试程序。当程序停止在这一行的时候,打开菜单“Debug”下的Windows子菜单,选择“Disassembly”。这样,出现一个窗口,显示下面的信息: - 1: #include <stdio.h>
- 2: int main(int argc,char* argv[])
- 3: {
- 00401010 55 push ebp
- 00401011 8B EC mov ebp,esp
- 00401013 83 EC 40 sub esp,40h
- 00401016 53 push ebx
- 00401017 56 push esi
- 00401018 57 push edi
- 00401019 8D 7D C0 lea edi,[ebp-40h]
- 0040101C B9 10 00 00 00 mov ecx,10h
- 00401021 B8 CC CC CC CC mov eax,0CCCCCCCCh
- 00401026 F3 AB rep stos dword ptr [edi]
- 4: return 0;
- 00401028 33 C0 xor eax,eax
- 5: }
- 0040102A 5F pop edi
- 0040102B 5E pop esi
- 0040102C 5B pop ebx
- 0040102D 8B E5 mov esp,ebp
- 0040102F 5D pop ebp
- 00401030 C3 ret
复制代码
如果上面的内容完全看不懂,也许读者需要复习一下汇编指令。以上的汇编指令数量非常的少,只需要了解push、mov、sub、lea、stos、xor、pop、ret,就可以继续本书的学习之旅了。所以请不用担心,接下来就会熟悉这些代码。
|