你说你想要 pure 或 clean 组装,是这样吗?
取自The Assembly Programmers Master Book
语言masm32汇编器,链接器ml,link
来源;
.586P
; Flat memory model
.MODEL FLAT, STDCALL
;---------------------------------------
; Data segment
_DATA SEGMENT
_DATA ENDS
; Code segment
_TEXT SEGMENT
START:
RET ; Exit
_TEXT ENDS
END START
组装和链接;
ML /c /coff PROG1.ASM
LINK /SUBSYSTEM:WINDOWS PROG1.0BJ
这个程序的字面意思是“什么都不做”,但它是纯粹的 masm,什么都不做。
如果你想在 windows 中编程而不需要 C 的帮助,你将不得不使用 WIN32 api 进行编程,你可以在网上找到这个 api 的引用,称为 win.hlp win32.hlp ,它似乎在这个web-page
也许是一个方便的链接 -> MASM 6.1 Documentation
编辑:使用as (gas) & ld;
.globl _start
_start: // ld looks for _start by default
movl $22, %eax // AT&T syntax
ret
编译;
c:\Users\James\Desktop\asm\>as file.s
c:\Users\James\Desktop\asm\>ld a.out
c:\Users\James\Desktop\asm\>a.exe
c:\Users\James\Desktop\asm\>echo %errorlevel%
22
段.text的反汇编:
00401000 <_start>:
401000: b8 16 00 00 00 mov $0x16,%eax
401005: c3 ret
401006: 90 nop
401007: 90 nop
简单地输入ret 不会让您走得太远,您可以通过使用-S 标志(-masm=intel 为您提供 intel 语法)进行编译来获取 c/c++ 程序的汇编列表。
也就是说你需要为链接器指定一个entry point 才能知道代码从哪里开始,你还需要为代码创建一个text segment,这是一个真的简单示例返回1;
.text
.intel_syntax noprefix
.globl _main
_main: // entry point!
mov eax, 1
ret
gcc [file].s 输出a.exe