来自头文件的汇编代码中的语法错误

时间:2014-10-03 09:06:13

标签: assembly

我在大学学习汇编代码。我是任何类型汇编编程的新手。我不明白为什么我在尝试构建时遇到错误。 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

2 个答案:

答案 0 :(得分:0)

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

  • 在文本编辑器中打开文件io.h
  • 查看第1行,因为汇编程序已将其标记为
  • 从事物的外观来看,我的猜测是第1行开始一个C风格的评论(这很有道理)
  • 如果情况确实如此,那么您已找到问题

建议修复

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

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

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

哦,从老手那里为新生提示:一旦你解决了这个问题,请提前准备好迎接另一个烦恼。出现时不要气馁。这是集会的方式。相信我,你会得到它。我已经可以通过您对代码的评论方式和问题来说明。

答案 1 :(得分:0)

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

如果对你来说太过分了,你应该对irvine之类的其他软件包感兴趣 - 那么你可能对documentation感兴趣。