【问题标题】:Syntax errors in my assembly code from header file来自头文件的汇编代码中的语法错误
【发布时间】:2014-10-03 09:06:12
【问题描述】:

我正在我的大学学习汇编代码。我对任何类型的汇编编程都不熟悉。我不明白为什么在尝试构建时会出现错误。 IDE 是 Visual Studio 2012。错误来自 io.h 头文件。我直接从书中复制了汇编程序指令,所以我认为这是作者想要的,并包含了我需要的一切。

; Assembler directives    
.586                ;accept instrucions for 586
.MODEL FLAT         ;generate code for flat memory
INCLUDE io.h        ;header file for input/output
.STACK 4096         ;reserve 4096-byte stack


.DATA               ;reserve storage for data
x                   DWORD               ?                                       
y                   DWORD               ?                                       
z                   DWORD               ?                                       
result              DWORD               ?                                       
prompt1             BYTE                "Enter the value for x",0               
prompt2             BYTE                "Enter the value for y",0               
prompt3             BYTE                "Enter the value for z",0               
asciiIn             BYTE                15 DUP (?)                              
msgLabel            BYTE                "The result is",0                       
msgText             BYTE                11 DUP (?),0                            

.CODE               ;start of main program code
_MainProc           PROC
                    ;read ASCII input for first number, convert to 2's comp, and
                    input               prompt1, asciiIn, 15                    
                    atod                asciiIn                                 
                    mov                 x, eax                                  

                    ;read ASCII input for second number, convert to 2's comp, an
                    input               prompt2, asciiIn, 15                    
                    atod                asciiIn                                 
                    mov                 y, eax                                  

                    ;read ASCII input for third number, convert to 2's comp, and
                    input               prompt3, asciiIn, 15                    
                    atod                asciiIn                                 
                    mov                 z, eax                                  

                    ;perform the requested calculations
                    mov                 eax, x                                  
                    add                 eax, x                                  
                    add                 eax, x                                  
                    add                 eax, x                                  
                    add                 eax, y                                  
                    add                 eax, y                                  
                    sub                 eax, z                                  
                    sub                 eax, z                                  
                    inc                 eax                                     
                    neg                 eax                                     

                    ;store the result in memory, convert from 2's comp to ASCII,
                    mov                 result, eax                             
                    dtoa                msgText, result                         
                    output              msgLabel, msgtext                       

                    mov                 eax, 0                                  
                    ret
_MainProc           ENDP                                                        
                    END                                                         

这些是我在尝试构建时收到的错误消息。

1>------ Build started: Project: windows32, Configuration: Debug Win32 ------
1>  Assembling ..\..\main.asm...
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(1): error A2008: syntax          error : /
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(2): error A2008: syntax error : io
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(3): error A2008: syntax  error : *
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(4): error A2008: syntax error : Copyright
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(5): error A2008: syntax  error : *
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(6): error A2008: syntax error : *
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(7): error A2008: syntax error : *
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(8): error A2008: syntax  error : file
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(9): error A2008: syntax error : *
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(10): error A2008: syntax er  ror : *
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(11): error A2008: syntax error : *
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(12): error A2008: syntax error : *
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(14): error A2044: invalid character in file
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(15): error A2044: invalid character in file
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(16): error A2044: invalid character in file
1>E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\io.h(17): error A2044: invalid character in file

【问题讨论】:

  • Hmmm.... 您是否尝试将 C 标头包含到程序集文件中?这没有机会工作......
  • io.h 是框架中包含的头文件。它为宏输入 atod 等提供代码。我应该问为什么它试图包含 c io 头文件?
  • .h 通常为 C 头文件保留。汇编者可以使用.inc等。你最好重命名它。但如果不可能,请使用包含目录列表。
  • 正如其他人所指出的,io.h 很可能用于 C 程序,而不是汇编程序。快速浏览一下您的文件应该会发现这一点,因为您应该能够知道只是盯着它看。程序集包含文件通常以 .inc 结尾。

标签: assembly


【解决方案1】:

我做了一些研究,似乎 io.h (也是)一个包含一些(旧)版本 MASM 的程序集包含文件。现代版本的visual studio使用的似乎不使用它们。如果您打算在汇编中进行输入/输出,ypu 可能必须找到其他方法。我不知道汇编器本身是否提供了任何替代品,但如果您不想依赖任何其他库,您可以use WinAPI directly

如果对您来说太过分了,您应该对一些额外的软件包感兴趣,例如 irvine - 那么您可能会对 documentation 感兴趣。

【讨论】:

    【解决方案2】:

    看看这是不是你的问题...

    • 在文本编辑器中打开文件io.h
    • 查看第 1 行,因为汇编程序已标记它
    • 从表面上看,我的猜测是第 1 行开始了 C 风格的注释(这很有意义)
    • 如果情况确实如此,那么您已经找到了问题

    建议修复

    • 自行编译io.h;但不要链接它
    • 将所需函数的名称添加为 Extern 指令(使用您特定选择的汇编程序想要的任何语法;看来您正在使用 Masm,这里是不错的选择)
    • 自行组装(但不要链接)您的汇编语言文件
    • 现在这两个文件都是OBJ 格式,将它们链接在一起

    很明显,你真的很想学习这些东西,就我而言,这里欢迎你的态度。

    我应该在 3 或 4 小时后回来。这里的其他人比我聪明得多,他们应该会得到更好的帮助和答案,所以让我们知道你在哪里得到这个。

    哦,老手给新学生的小贴士:一旦你解决了这个问题,就提前做好准备迎接另一个烦恼。当它出现时不要气馁。组装就是这样。相信我,你会明白的。我已经可以通过您评论代码和提出问题的方式来判断了。

    【讨论】:

      猜你喜欢
      • 2011-11-23
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2023-03-12
      • 2021-01-19
      相关资源
      最近更新 更多