【发布时间】:2014-01-21 05:10:44
【问题描述】:
经过多次尝试和错误,我仍然无法理解为什么我的教科书中使用的汇编语法在使用 Windows 8 时会引起这么多问题。
.MODEL SMALL
.586
.STACK 100h
.DATA
Message DB 'Hello, my name blank', 13, 10, '$'
.CODE
Hello PROC
mov ax, @data
mov ds, ax
mov dx, OFFSET Message
mov ah, 9h
int 21h
mov al, 0
mov ah, 4ch
int 21h
Hello ENDP
END Hello
起初我尝试使用 masm32 运行代码,使用命令提示符和正确的链接器。然后我尝试使用 Visual Studio 2013 Ultimate;即使在 Visual Studio 中使用 masm32,我每次都会遇到类似的问题。汇编器的 @data 行存在问题,并且没有前导下划线作为 Hello。修复后者只会导致块不匹配的问题。
我确实找到了使用 MS-DOS 虚拟环境的解决方法,并且在删除 .586 指令后代码运行良好。
我怀疑主要问题是尝试在 x64 操作系统环境中运行此代码,但我仍在学习该语言,所以我想听听其他意见,了解为什么我最初无法让它运行。
我们使用的书是 Jones, Assembly Language for the IBM PC Family 3rd edition。
【问题讨论】:
-
您的代码是 16 位的,在 64 位架构上不再原生支持。你需要一个 DOS 模拟器。
-
究竟是什么让这段代码成为 16 位和 32 位的?是什么让某些指令在较新的架构中不合格?老实说,我才刚刚开始学习汇编,所以这似乎是一些微不足道的问题,但我对理解语法用法真的很着迷。
-
如果您编写了代码,您应该知道。无论如何,使用
int 21h意味着您很可能正在编写一个 16 位的 DOS 程序。
标签: visual-studio assembly masm32