Windows 7 从汇编代码创建可执行文件

Windows 7 从汇编代码创建可执行文件,windows-7,x86,assembly,Windows 7,X86,Assembly,我需要从下一个汇编代码创建一个可执行文件: .MODEL SMALL .DATA TEXT DB 'Hello world!$' .CODE .STACK 20 .STARTUP MOV AX, @DATA MOV DS, AX MOV AH, 9 MOV BL, 02H INT 10H MOV Dx, OFFSET TEXT INT 21H MOV AH, 4CH INT 21H END 它可以与Turbo Assembler(tasm.exe)一起使用,但我不想继续使用它,因为它不在Wi

我需要从下一个汇编代码创建一个可执行文件:

.MODEL SMALL
.DATA
TEXT DB 'Hello world!$'

.CODE
.STACK 20
.STARTUP
MOV AX, @DATA
MOV DS, AX
MOV AH, 9
MOV BL, 02H
INT 10H
MOV Dx, OFFSET TEXT
INT 21H
MOV AH, 4CH
INT 21H
END
它可以与Turbo Assembler(tasm.exe)一起使用,但我不想继续使用它,因为它不在Windows7中运行


谢谢。

使用Microsoft(MASM)

使用Microsoft(MASM)

您可以尝试或,但您的源代码可能需要一些小的更改才能使用它们。

您可以尝试或,但您的源代码可能需要一些小的更改才能使用它们。

您给出的代码适用于16位DOS系统。要使用现代汇编程序,您必须修改代码以在32位环境中工作,这可能是一个非常重要的过程。到目前为止,您给出的所有代码都需要重写


我建议您这样做,因为它是一个活跃的、支持良好的项目。

您给出的代码适用于16位DOS系统。要使用现代汇编程序,您必须修改代码以在32位环境中工作,这可能是一个非常重要的过程。到目前为止,您给出的所有代码都需要重写


我推荐,因为它是一个活跃的、支持良好的项目。

如果需要开发MSDOS程序,请运行16位环境,如。通过这种方式,
tasm.exe
——当今最优秀的汇编程序之一也可以与您的程序以及与tasm Turbo Debugger、Turbo Linker和Turbo C配套的工具一起运行

您也可以在Windows7上安装WindowsXP或Windows98,作为一个多引导安装在它旁边,或者安装在一个单独的系统中。无论哪种方式,您都可以轻松运行MSDOS程序


正如Greg Hewgill所提到的,为了在32位(或更高)环境中运行,需要对程序进行重大的重新编译。

如果需要继续开发MSDOS程序,请运行16位环境,如。通过这种方式,
tasm.exe
——当今最优秀的汇编程序之一也可以与您的程序以及与tasm Turbo Debugger、Turbo Linker和Turbo C配套的工具一起运行

您也可以在Windows7上安装WindowsXP或Windows98,作为一个多引导安装在它旁边,或者安装在一个单独的系统中。无论哪种方式,您都可以轻松运行MSDOS程序



正如格雷格·休吉尔(Greg Hewgill)所提到的,要想在32位(或更高)的环境中运行,需要对程序进行重大的重新编译。

有人想出了一个好主意,将其命名为Gas,而不是普通的首字母缩略词。。。想到可能会引起的一些对话,我不寒而栗。不给-1,但向真正想编写汇编程序(特别是在DOS或Windows上)的人推荐Gas,可能会被认为是邪恶的。@Matthew Scharley:我以为它被称为GASM@mwc:至少维基百科上没有。我承认我不知道更多。有人想出了一个好主意,把它命名为Gas,而不是普通的首字母缩略词。。。想到可能会引起的一些对话,我不寒而栗。不给-1,但向真正想编写汇编程序(特别是在DOS或Windows上)的人推荐Gas,可能会被认为是邪恶的。@Matthew Scharley:我以为它被称为GASM@mwc:至少维基百科上没有。我承认我不知道更多。这是一个好问题,但我会用“我刚刚开发了免费VS Express,现在,到底如何让它构建和运行我的汇编代码?”。是的,这正是我想要的。你有解决办法吗?谢谢。这是一个很好的问题,但我会用“我刚刚下载了免费VS Express,现在,到底如何让它构建和运行我的汇编代码?”。是的,这正是我想要的。你有解决办法吗?谢谢。嗨,谢谢你的帮助,我正在使用Windows XP和Windows 7,我应该安装哪一个,NASM win32版本还是NASM dos版本?我的代码需要修改吗?如果TASM在Windows7中不工作(可能是因为它是一个16位程序),那么NASM DOS版本也可能不工作。但它可能会,在这种情况下,您可以继续使用发布的源代码将16位DOS代码编译成
.COM
文件。但是,如果您使用Win32 NASM版本,那么您的代码将需要完全不同,因为32位land具有不同的规则。您好,感谢您的帮助,我使用的是Windows XP和Windows 7,我应该安装哪一个,NASM Win32版本还是NASM dos版本?我的代码需要修改吗?如果TASM在Windows7中不工作(可能是因为它是一个16位程序),那么NASM DOS版本也可能不工作。但它可能会,在这种情况下,您可以继续使用发布的源代码将16位DOS代码编译成
.COM
文件。但是,如果您使用Win32 NASM版本,那么您的代码将需要完全不同,因为32位land具有不同的规则。无论如何,它需要更改,程序可以编译,但不能工作。(第一次调用,Int 10h函数9要求CX是以BL颜色打印字符的次数,所需的三个寄存器均未初始化,因此结果未定义)它无论如何都需要更改,程序按原样编译但不工作。(第一次调用,Int 10h函数9要求CX是以BL颜色打印字符的次数,所需的三个寄存器都没有初始化,因此结果是未定义的),您的程序也可以运行。我对汇编语言不太懂,这让我摆脱了麻烦,谢谢。你可以用NASM或其他几种32位汇编程序完美地创建32位dos程序:-)甚至可以用(G)AS,但只适用于受虐狂。你的程序也可以运行。我不懂汇编语言,这让我摆脱了麻烦,谢谢。你可以用NASM或其他几种32位汇编程序完美地创建32位dos程序:-)甚至可以用(G)AS,但只适用于受虐狂。嘿,我试过了,但我不明白它是如何用16位代码工作的。嘿,我试过了,但我不明白它是如何用16位代码工作的。