将C ++程序转换为程序集

时间:2010-08-17 08:36:00

标签: visual-studio-2010

我正在使用Visual Studio 2010并假设我必须编写一些程序。我可以这样使Visual Studio向我展示这个代码翻译成汇编语言吗?

如果是,我该怎么做?例如,我有一个阶乘计划:

int fact(int n) {
    if (n<=1)  
        return 1;
    return n*fact(n-1);

3 个答案:

答案 0 :(得分:5)

查看this问题的答案:

  

有几种方法:

     
      
  1. 在Visual中调试C ++时,通常可以看到汇编代码   工作室(也是日食)。为此   Visual Studio在代码上放置了一个断点   问题以及调试器何时命中它   点击并找到“Go To Assembly”   (或按CTRL + ALT + D)
  2.   
  3. 第二种方法是在编译时生成汇编列表。对于   这转到项目设置 - &gt; C / C ++    - &GT;输出文件 - &gt; ASM列表位置并填写文件名。也选择   “装配输出”到“装配”   源代码“。
  4.   
  5. 编译程序并使用任何第三方调试程序。您可以使用   OllyDbg或WinDbg。还有你   可以使用IDA(交互式   反汇编)。但这是硬核   这样做的方式。
  6.   

答案 1 :(得分:0)

在你的阶乘函数中加入断点,开始调试,进入调用堆栈窗口,右键单击你的函数,选择Go To Disassembly

答案 2 :(得分:0)

函数.h

struct slot_machine{

int balance=0;

int roll_1=0;

int roll_2=0;

int roll_3=0;

};

void loop();

void printMenu();

void transferFunds();

void spin(slot_machine machine);

void spin(slot_machine machine,int rerolls);

void checkFunds();

void exit();

functions.cpp

#include “functions.h”

#include

#include /* srand, rand */

使用命名空间标准;

char values[]={'a','b','c','d','e','f','g','h','i','k'};

int fund=500;

slot_machine the_machine;

int option=0;

int clean_rolls=5;

void loop(){

while(option!=4){

printMenu();

if(option==1)

checkFunds();

if(option==2)

transferFunds();

if(option==3){

if(clean_rolls>0)

spin(the_machine);

其他

spin(the_machine,40);

clean_rolls–;

}

if(option==4)

退出();

}

}

void printMenu(){

cout

cin>>选项;

}

void spin(slot_machine machine){

cout<

machine.roll_1=(rand() % 10);

machine.roll_2=(rand() % 10);

machine.roll_3=(rand() % 10);

if(machine.roll_1==machine.roll_2 && machine.roll_2==machine.roll_3)

{

cout

machine.balance+=30;

}其他{

if(machine.roll_1==machine.roll_2 || machine.roll_2==machine.roll_3 ||machine.roll_1==machine.roll_2 && machine.roll_1==machine.roll_3){

cout

machine.balance+=1;

}其他{

cout

machine.balance-=1;

}

}

}

void spin(slot_machine machine, int rerolls){

cout<

machine.roll_1=(rand() % 10);

machine.roll_2=(rand() % 10);

machine.roll_3=(rand() % 10);

while((machine.roll_1==machine.roll_2 && machine.roll_2==machine.roll_3)

&& (machine.roll_1==machine.roll_2 || machine.roll_2==machine.roll_3 ||machine.roll_1==machine.roll_2 && machine.roll_1==machine.roll_3)

&& rerolls>0){

machine.roll_1=(rand() % 10);

machine.roll_2=(rand() % 10);

machine.roll_3=(rand() % 10);

重投–;

}

if(machine.roll_1==machine.roll_2 && machine.roll_2==machine.roll_3)

{

cout

machine.balance+=30;

}其他{

if(machine.roll_1==machine.roll_2 || machine.roll_2==machine.roll_3 ||machine.roll_1==machine.roll_2 && machine.roll_1==machine.roll_3){

cout

machine.balance+=1;

}其他{

cout

machine.balance-=1;

返回;

}

}

}

void transferFunds()

{

int toTransfer=0;

cout

cin>>toTransfer;

if(toTransfer>funds)

cout<<“资金不足!”<

其他

cout<<“资金转移”<

the_machine.balance+=toTransfer;

funds-=toTransfer;

}

void checkFunds(){

cout<

}

void exit()

{

cout<<“感谢您的参与!..”<

退出(0);

}

main.cpp

#include

#include “functions.h”

使用命名空间标准;

int main()

{

cout << “老虎机程序” << endl;

循环();

返回0;

}