3 04 2008

用Vim编写汇编程序设置

Published by muzuiget at 7:20 下午 under Vim

最近学汇编,看王爽的《汇编语言》,非常好的书!开始就是用MASM5.0版的编译程序(包括连接器),记事本写代码,然后在cmd下输入命令编译连接和调试,后来用的多,开始觉得烦,于是看看有没有IDE来用用。

微软有个MASM8.0,不过要先Visual C++ 2005 Express,幸好我有,下载安装后,打开Visual C++ 2005 Express,感觉没加了什么。

找到一篇文章,跟着试了下,编译自己写的显示字符串的小程序(就是王爽的《汇编语言》的实验9,运行效果如图),运行,居然没有显示出来,郁闷,这样感觉也很麻烦,放弃。

汇编抓图3

去下了MASM32ver9, 安装,自带一个IDE,目前对我来说还很复杂,不用,添加bin目录到PATH。masm.exe改成ml.exe,能自动调用连接器连接,看起来很爽, 不过参数不用masm.exe了,直接用“ml test.asm”,不过连接总是失败,死活输出不了exe(我的代码问题),加上“/AT”参数输出com文件也不行,再Google,有人说那个连接 器不支持16位的代码,不过用回MASM5.0的那个连接器就可以。

用旧版本的总有点不爽,不够与时俱进,后来又在masm32的网站一个页面找到个16位的连接器,版本比MASM5.0新,用法也差不多,试了下,能输出exe。
ml.exe有个参数“/Zm”是启用兼容MASM5.0版的,还能指定连接器,为了避免和32位的混淆,我把16位那个改名为link16.exe了,用“/Bl”指定。

编译一个test.asm文件就是,运行cmd然后输入

ml /Zm /Bl link16 test.asm

然后输出test.exe了,然后输入出test.exe运行,没有显示,跟Visual C++ 2005 Express一个样,而用masm编就可以。

汇编抓图2

用debug凋试,用“U”命令看了下指令,没什么问题啊,然后退出debug,郁闷,无意中再输入test.exe,这次居然有显示了。

汇编抓图1

奇怪啊奇怪啊真奇怪啊,用鼠标双击出test.exe,SSM报告启动了一个ntvdm.exe的程序,而不是test.exe,Google一下个这个程 序,原来是个16位程序的虚拟机,当运行masm.exe和debug时就自动出现这个程序。当在cmd里运行debug时,右边的滚动条没有了(之前我 用debug时也发现不知道什么时后没了滚动条),窗口也变小了,退出debug时,输入help命令,发现一切都变成英文,中文也不支持了。

哦 耶耶,我知道原因了,因为masm.exe和debug是16位的程序,当运行这些程序时,windows就自动启动一个16位的shell(或者叫终端 吧)来运行,退出debug后,依然在这个16位的shell里,这个接着运行test.exe,修改了内存(应该叫显存吧,地址B8000)里的内容, 在这个shell里显示出来,cmd是属于32位的,内存的地址不同,因此没有显示。怎么直接启动这个16位的shell?运行“command”就是 了。之前用masm.exe成功因为当时编译连接运行都是一气呵成,就没发觉有问题,如果编译连接后退出cmd(这时应该变成command的吧),在启 动一个新的cmd执行程序,同样没有显示。

以上问题解决,就开始配置Vim了。
用Vim打开asm文件,发现高亮不是很好,查了下手册,原来汇编语言也有好几种的,这里我用的是masm,用

:set filetype=masm

命令就搞定,接下来是定义键盘映射,
<F9>键是编译,也就是“:make %”,之前已经设置好了,定义编译程序就行了,命令

:set makeprg=ml /Zm /Bl link16 %

调试是

:map <F5> :!debug %:r.exe<CR>

运行就

:map <F6> :!command<CR>

因为Vim“:!”命令是cmd的,我要用command,然后再输入文件名运行。因为我试过用

:!command /c %:r.exe

结果也是不行。
在vimfiles\ftplugin里建立一个“asm.vim”文件,把上边的命令写进去,这样这些配置专为asm设置。

asm.vim内容为:

set filetype=masm
set makeprg=ml /Zm /Bl link16 %
map <F6> :!command<CR>
imap <F6> <Esc><F6>
map <F5> :!debug %:r.exe<CR>
imap <F5> :<Esc><F5>

2 Responses to “用Vim编写汇编程序设置”

  1. xiaomao101on 30 7 2008 at 12:44 下午

    呵呵,好用啦,不过Vim现在键盘映射还是有点问题,比如backspace键就是不好用。。。

  2. muzuigeton 02 8 2008 at 11:00 上午

    @hxiaomao101
    不知道backspace键哪里不好用了?

Trackback URI | Comments RSS

Leave a Reply