zoukankan      html  css  js  c++  java
  • 如何在Visual Studio中运行和调试汇编代码?

    最简单的方法, 就是在VS2010的C++文件里直接使用__asm{} 直接写汇编代码. 实例代码如下:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        char a[10] = "1234";
    
        __asm
        {
            push eax
            push edx
            push ecx
    
            lea eax, a
    
            mov     cl,byte ptr [eax]
            mov     dl,byte ptr [eax]
            movzx   ecx,cl
            movzx   edx,dl
            shr     ecx,4
            shl     edx,4
            or      ecx,edx
            mov     byte ptr [eax],cl
            inc     eax
            mov     cl,byte ptr [eax]
    
            pop ecx
            pop edx
            pop eax
        }
    }

     

    另外是书写彻底的汇编代码, 具体步骤如下, 就不翻译了.

    How to Use VS2010 to Write Assembly

    ===============================

    Using Visual Studio to write an assembly program may be tricky. Specific steps are to be followed in order to be able to create your first MASM x86 assembly program with VS2010 (images from the configuration steps mentioned below are taken from here):

    Expand the ‘Other Project Types‘ tree, Select ‘Visual Studio Solutions‘, and create a new ‘Blank Solution‘.

    File | Add | New Project…

    Expand the ‘Other Languages‘, ‘Visual C++‘, ‘General‘ section and create a new ‘Empty Project‘.

    Now right click on the Project in the Solution Explorer and select ‘Build Customizations…‘.

    Tick the ‘masm‘ box and say OK.

    Add a new file to the project with the .asm extension by right clicking on the Project in the Solution Explorer and selecting ‘Add | New Item…‘ then ‘Text File‘. Enter a filename ending with .asm (e.g. test.asm). Press OK.

    Now (and if you skipped the last steps, this won’t work) right click on the Project and select ‘Properties‘. You should see a dialog like this (Note the MASM item at the bottom of the tree). If you don’t, then something went wrong.

    There are a few critical things to set up in the Linker options in order to get it to work:

    Set the following property to Windows or Console as appropriate:

    Configuration Properties > Linker > System> SubSystem

    Set the entry point to the name of your main method (as per the END directive – see code):

    Configuration Properties > Linker > Advanced > EntryPoint

    All you have to do now is write some code and run it.

    遵循上面的步骤, 我成功的运行并调试了一段汇编代码.下面是我的源代码和调试截图.

    .586              ;Target processor.  Use instructions for Pentium class machines
    .MODEL FLAT, C    ;Use the flat memory model. Use C calling conventions
    .STACK            ;Define a stack segment of 1KB (Not required for this example)
    .DATA             ;Create a near data segment.  Local variables are declared after
                      ;this directive (Not required for this example)
    .CODE             ;Indicates the start of a code segment.

    main PROC

    push    ebp
    mov     ebp,esp
    mov     edx, 80002418h
    xor     eax,eax
    mov     ecx,20h

    SFT1:
    shr     edx,1
    jnc     LOOP1
    inc     eax

    LOOP1:
    loop    SFT1
    pop     ebp
    ret

    main ENDP
    END

    image

    image

    参考资料

    ======================

    Assembly Programming with Visual Studio 2010

    http://www.codeproject.com/Articles/271627/Assembly-Programming-with-Visual-Studio-2010 

    Assembly sample source codes

    http://www.assembly.happycodings.com/code6.html

  • 相关阅读:
    vs2010下载
    .Net执行cmd命令
    本Blog链接交换
    DNN 04.09.01 StartKit中的新内容。
    如何使一个你没有源代码的DLL文件变为强命名的(Strong Name)
    "Error Creating Control" when creating a custom control
    GridView导出为Excel后,导出的.xls文件无法作为源文件导入的问题
    DotNetNuke的C#版本
    DotNetNuke 5.0 放到CodePlex上提供下载了
    在VS中使用独立的项目(Project)开发DNN模块
  • 原文地址:https://www.cnblogs.com/awpatp/p/2611522.html
Copyright © 2011-2022 走看看