LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1504|回复: 4

如何编译80X86汇编程序?[已解决]

[复制链接]
发表于 2008-8-11 14:19:32 | 显示全部楼层 |阅读模式
要上一门《80X86汇编语言》的课,自然就要写程序。不过书上介绍的都是用windows的汇编编译器来编译。我想在我的openSUSE上写代码+编译,不知道改用哪个软件?

PS:nasm似乎不太好用?下面这个程序好像都过不去……
.386
DATA        SEGMENT                USE16
MSG        DB        "HELLO?$"
DATA        ENDS
CODE        SEGMENT                USE16
        ASSUME        CS:CODE , DSATA
START:
        MOV        AX , DATA
        MOV        DS , AX
        LEA        DX , MSG
        MOV        AH , 2
        INT        21H
        MOV        AH , 4CH
        INT        21H
CODE        ENDS
        END        START
发表于 2008-8-12 01:09:33 | 显示全部楼层
因为你这段代码是针对dos+masm的代码。
所以你可以用linux下的dosbox来模拟dos环境。
下载你要用的dos程序。包括masm5,debug。并且在linux下设置一个目录用来放你要用的dos程序,要处理的汇编程序文件(xxx.asm)也放在同一个目录下,在dosbox下挂载这个目录作为C盘就可以。如果要编辑汇编代码可以直接退出dosbox然后使用linux下的工具编辑。

另外你提供的代码有问题:
MOV AH , 2
这里应该改成
MOV AH , 9
因为int 21h的2功能只显示单个字符,要显示字符串应该用9h。

以上就是我的结果。
回复 支持 反对

使用道具 举报

发表于 2008-8-12 02:00:53 | 显示全部楼层
或者是在你的Linux里安装VirutalBox或者QEMU,然后在虚拟机里装ReactOS(这是个Windows的开源克隆)以及MinGW编译开发包,MinGW里面的NASM可以支持你的代码。
回复 支持 反对

使用道具 举报

发表于 2008-8-12 02:15:14 | 显示全部楼层
你还可以用这个宏汇编程序

1. About
JWasm is a MASM v6 compatible assembler. It's a fork of Open Watcom's WASM and released under the Sybase Open Watcom Public License, which allows free commercial and non-commercial use. JWasm is written in C, source code is open.

JWasm Features:
JWasm natively supports output formats Intel OMF, MS COFF and ELF.
JWasm binaries are available for DOS, Windows and Linux.
Instructions up to SSE3 are supported.
As far as programming for Windows is concerned, JWasm can be used with both Win32Inc and Masm32.
C header files can be converted to include files for JWasm with h2incX.


http://www.japheth.de/JWasm.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-12 12:59:06 | 显示全部楼层
Post by huyongzs;1884965
因为你这段代码是针对dos+masm的代码。
所以你可以用linux下的dosbox来模拟dos环境。
下载你要用的dos程序。包括masm5,debug。并且在linux下设置一个目录用来放你要用的dos程序,要处理的汇编程序文件(xxx.asm)也放在同一个目录下,在dosbox下挂载这个目录作为C盘就可以。如果要编辑汇编代码可以直接退出dosbox然后使用linux下的工具编辑。

另外你提供的代码有问题:
MOV AH , 2
这里应该改成
MOV AH , 9
因为int 21h的2功能只显示单个字符,要显示字符串应该用9h。

以上就是我的结果。


代码确实存在问题。
看来我还是用VBOX来虚拟好了~~正好不怕它崩溃
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表