2013年1月23日星期三

ml64.asm


64位汇编怎能不会。

以前以为64位汇编和32位汇编差不多,学好32位汇编就可以了。

直到用到了,才知道还有点小麻烦。

最主要的是环境的搭建.

支持64位汇编的环境有好几个,这里就不列举了。
因为是Windows上的编程,所以要首选ml64.exe了。

暂时没有发现微软的64位汇编环境,也许孤陋寡闻,也许懒得搜索。
知道masm32的原理,那就自己来吧!

所有的产品来自微软,如:mvs,sdk,wdk,所以需要先安装以上的东西。

收集过程就不说了,假定你已经熟悉mvs和masm32了。
罗嗦一句,那些东西要来自64位的目录。

具体的编写与编译有点小区别,这就令当别论了。

实验一下:

; Sample x64 Assembly Program
; Chris Lomont 2009 www.lomont.org
extrn ExitProcess: PROC   ; external functions in system libraries
extrn MessageBoxA: PROC
.data
caption db '64-bit hello!', 0
message db 'Hello World!', 0
.code
Start PROC
  sub    rsp,28h      ; shadow space, aligns stack
  mov    rcx, 0       ; hWnd = HWND_DESKTOP
  lea    rdx, message ; LPCSTR lpText
  lea    r8,  caption ; LPCSTR lpCaption
  mov    r9d, 0       ; uType = MB_OK
  call   MessageBoxA  ; call MessageBox API function
  mov    ecx, eax     ; uExitCode = MessageBox(...)
  call ExitProcess
Start ENDP
End

编译命令:ml64 hello.asm /link /subsystem:windows /defaultlib:kernel32.lib /defaultlib:user32.lib /entry:Start

从此开始我的64位汇编之旅。

汇编很少用,有时候必须用(或者用变相的方式),因为64位不支持内联汇编。

其实最根本的还是汇编,因为机器运行的是指令,相信汇编,坚信!

没有评论:

发表评论