win32汇编入门了解

下面以一个简单的例子了解VS自带的汇编器:

我们知道,vs的编译器是cl.exe、链接器是link.exe,既然vs自带了masm,那么是不是masm.exe,答案是否定的。vs的汇编器是ml.exe。其在64bit的命令行下是ml64.exe,不知道为何要换一个名字,cl.exe就没有换名字。

下面是一个”hello,world“的代码:

// test.c  
#include <stdio.h>  
  
int main()  
{  
printf("Hello, world\n");  
return 0;  
}

VS2010的命令行(Visual Studio Command Prompt (2010))下编译:

cl test.c /FA /nologo

就会得到test.asm和test.obj和test.exe文件,删除test.obj和test.exe,得到hello,world的asm文件。

; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01   
  
    TITLE   C:\tempLab\asm\test.c  
    .686P  
    .XMM  
    include listing.inc  
    .model  flat  
  
INCLUDELIB LIBCMT  
INCLUDELIB OLDNAMES  
  
_DATA   SEGMENT  
$SG2637 DB  'Hello, world', 0aH, 00H  
_DATA   ENDS  
PUBLIC  _main  
EXTRN   _printf:PROC  
; Function compile flags: /Odtp  
_TEXT   SEGMENT  
_main   PROC  
; File c:\templab\asm\test.c  
; Line 5  
    push    ebp  
    mov ebp, esp  
; Line 6  
    push    OFFSET $SG2637  
    call    _printf  
    add esp, 4  
; Line 7  
    xor eax, eax  
; Line 8  
    pop ebp  
    ret 0  
_main   ENDP  
_TEXT   ENDS  
END

使用VS的汇编器(Assembler)编译上面的test.asm如下:

ml test.asm

生成test.obj和test.exe。

使用vs x64编译可能会报错。

您可能还喜欢...

想说点什么吗?

您将是第一位评论人!

提醒
avatar