如何在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‘.

1.png

File | Add | New Project…

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

2.png

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

3.png

Tick the ‘masm‘ box and say OK.

4.png

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.

5.png

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.

6.png

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

7.png

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

Configuration Properties > Linker > Advanced > EntryPoint

8.png

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值