小编use*_*557的帖子

LEA指令的目的是什么?

对我来说,它看起来像一个时髦的MOV.它的目的是什么,我什么时候应该使用它?

x86 assembly x86-64 x86-16

632
推荐指数
15
解决办法
54万
查看次数

Visual C++编译器的默认选项

你能告诉我从命令行编译时 cl.exe和link.exe 的__DEFAULT__隐式编译器选项是什么,如:

cl whatever.c
Run Code Online (Sandbox Code Playgroud)

谢谢!

更新:澄清:我没有参与可用的命令行选项,我甚至将它们与问题联系起来.我要求的是当您指定none并从命令行编译时使用的隐式命令行选项列表.

c++ visual-c++

7
推荐指数
2
解决办法
2606
查看次数

检查Visual Studio C++编译器生成的代码,第1部分

可能重复:
为什么发出这样复杂的代码用于将有符号整数除以2的幂?

背景

我只是通过检查编译器生成的二进制代码来学习x86 asm.

Visual Studio 2010 beta 2中使用C++编译器编译的代码.

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.21003.01 for 80x86
Run Code Online (Sandbox Code Playgroud)

C代码(sandbox.c)

int mainCRTStartup()
{
    int x=5;int y=1024;
    while(x) { x--; y/=2; }
    return x+y;
}
Run Code Online (Sandbox Code Playgroud)

使用Visual Studio命令提示符编译它

cl /c /O2 /Oy- /MD sandbox.c
link /NODEFAULTLIB /MANIFEST:NO /SUBSYSTEM:CONSOLE sandbox.obj
Run Code Online (Sandbox Code Playgroud)

在OllyDgb中解雇sandbox.exe

以下从入口点开始.

00401000 >/$ B9 05000000    MOV ECX,5
00401005  |. B8 00040000    MOV EAX,400
0040100A  |. 8D9B 00000000  LEA EBX,DWORD PTR DS:[EBX]
00401010  |> 99             /CDQ
00401011  |. 2BC2           |SUB …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly

7
推荐指数
2
解决办法
2600
查看次数

标签 统计

assembly ×2

x86 ×2

c ×1

c++ ×1

visual-c++ ×1

x86-16 ×1

x86-64 ×1