【问题标题】:Create Executable From Assembly Code从汇编代码创建可执行文件
【发布时间】:2009-11-29 21:07:23
【问题描述】:

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

.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),但我不想继续使用它,因为它不在 Windows 7 中运行。

谢谢。

【问题讨论】:

  • 这是一个很好的问题,但我会将其表述为“我只是 d/l'ed 免费的 VS Express,现在,究竟如何获得它来构建和运行我的汇编代码? "。
  • 是的,这正是我要找的。你有解决方案吗?谢谢。

标签: windows-7 x86 assembly


【解决方案1】:

如果持续需要开发 MSDOS 程序,请运行 16 位环境,例如 DOSBOX。这样tasm.exe(当时最好的汇编程序之一)也可以与您的程序以及随 tasm 一起运行的工具(Turbo Debugger、Turbo Linker 和 Turbo C)一起运行。

您还可以在 Windows 7 上安装 Windows XP 或 Windows 98,作为多引导系统,或在virtual machine hosted by Windows 7 中。无论哪种方式,您都可以轻松运行 MSDOS 程序。

正如 Greg Hewgill 提到的,需要对程序进行重大重新架构才能在 32 位(或更高版本)环境中运行。

【讨论】:

  • 你的程序也可以运行了。
  • 我不懂汇编语言,这让我摆脱了麻烦,谢谢。
  • 使用 NASM 或其他几个 32 位汇编器可以完美地创建 32 位 dos 程序 :-) 甚至可以使用 (G)AS,但仅适用于受虐狂。
【解决方案2】:

使用微软macro assembler (MASM)

【讨论】:

  • 嘿,我试过了,但我不明白它是如何与 16 位代码一起工作的。
【解决方案3】:

您可以尝试NASMMASM,但您的来源可能需要稍作更改才能使用它们。

【讨论】:

  • 无论如何它都需要更改,程序按原样编译但不起作用。 (第一次调用,Int 10h函数9要求CX为BL颜色打印AL中char的次数,需要的三个寄存器都没有初始化,所以结果未定义)
【解决方案4】:

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

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

【讨论】:

  • 您好,谢谢您的帮助,我使用的是Windows XP和Windows 7,我应该安装哪一个,NASM win32版本还是NASM dos版本?我的代码需要修改吗?
  • 如果 TASM 在 Windows 7 中无法运行(可能是因为它是 16 位程序),那么 NASM DOS 版本可能也无法运行。但它可能会,在这种情况下,您可以继续使用您发布的源代码将 16 位 DOS 代码编译到 .COM 文件中。但是,如果您使用 Win32 NASM 版本,那么您的代码将需要完全不同,因为 32 位土地有不同的规则。
【解决方案5】:

【讨论】:

  • 有人提出了一个绝妙的主意,将其命名为 Gas,而不是通常的首字母缩略词……想到可能引起的一些对话,我不寒而栗。
  • 不给 -1,但向真正想要编写一些汇编程序(尤其是在 DOS 或 Windows 上)的人推荐 Gas 可能被认为是邪恶的。
  • @Matthew Scharley:我以为它叫 GASM
  • @mwc:至少不是根据维基百科。我承认我不知道除此之外。
猜你喜欢
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
相关资源
最近更新 更多