马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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,就可以继续本书的学习之旅了。所以请不用担心,接下来就会熟悉这些代码。
|