【问题标题】:error A2013: .MODEL must precede this directive错误 A2013:.MODEL 必须在此指令之前
【发布时间】:2013-07-07 22:55:59
【问题描述】:

稍微修改一下 MASM,我不知道这些错误是什么意思,或者我是否正在编写接近正确的代码。按照目前的写法,它应该只是向用户打招呼,询问两个数字并说再见(在进行任何计算或任何特殊操作之前尝试让骨架工作)。

INCLUDELIB Irvine32.inc ;  Note: line number 7


.data
userName    BYTE    33 DUP(0)   ;string to be entered by user
firstNumber DWORD   ?           ;integer to be entered by user
secondNumber    DWORD     ?         ;integer to be entered by user
intro_1     BYTE        "Elementary Arithmetic by Marshall Todt", 0
intro_2     BYTE        "Enter 2 numbers, and I'll show you the sum, difference,", 0
intro_3     BYTE        "product, quotient, and remainder.", 0
prompt_1        BYTE        "Enter the first integer: ", 0
prompt_2        BYTE        "Enter the second integer: ",0
goodBye     BYTE        "Impressed?  Bye!", 0

.code
main PROC

;Introduction
    mov     edx, OFFSET intro_1 
    call    WriteString
    call    CrLf
    move        edx, OFFSET intro_2
    call WriteString
    call CrLF
    move        edx, OFFSET intro_3
    call WriteString
    call CrLF

;Get the data
    mov     edx, OFFSET prompt_1
    call    WriteString
    call    ReadInt
    mov     firstNumber, eax
    mov     edx, OFFSET prompt_2
    call    WriteString
    call    ReadInt
    mov     secondNumber, eax



;Say "Good-bye"
    mov     edx, OFFSET goodBye
    call    WriteString
    call    CrLf
    exit    ; exit to operating system
main ENDP

END main

这些是我得到的错误:

Error   1   error A2013: .MODEL must precede this directive c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   10  1   Assignment1
Error   2   error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   11  1   Assignment1
Error   3   error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   12  1   Assignment1
Error   4   error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   13  1   Assignment1
Error   5   error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   14  1   Assignment1
Error   6   error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   15  1   Assignment1
Error   7   error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   16  1   Assignment1
Error   8   error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   17  1   Assignment1
Error   9   error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   18  1   Assignment1
Error   10  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   19  1   Assignment1
Error   11  error A2013: .MODEL must precede this directive c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   21  1   Assignment1
Error   12  error A2034: must be in segment block : main    c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   22  1   Assignment1
Error   13  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   25  1   Assignment1
Error   14  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   26  1   Assignment1
Error   15  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   27  1   Assignment1
Error   16  error A2008: syntax error : edx c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   28  1   Assignment1
Error   17  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   29  1   Assignment1
Error   18  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   30  1   Assignment1
Error   19  error A2008: syntax error : edx c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   31  1   Assignment1
Error   20  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   32  1   Assignment1
Error   21  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   33  1   Assignment1
Error   22  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   36  1   Assignment1
Error   23  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   37  1   Assignment1
Error   24  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   38  1   Assignment1
Error   25  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   39  1   Assignment1
Error   26  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   40  1   Assignment1
Error   27  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   41  1   Assignment1
Error   28  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   42  1   Assignment1
Error   29  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   43  1   Assignment1
Error   30  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   48  1   Assignment1
Error   31  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   49  1   Assignment1
Error   32  error A2034: must be in segment block   c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   50  1   Assignment1
Error   33  error A2008: syntax error : exit    c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   51  1   Assignment1
Error   34  error A1010: unmatched block nesting : main c:\Users\Marshall\documents\visual studio 2010\Projects\Solution1\Assignment1\Assignment1.asm   52  1   Assignment1
Error   35  error MSB3721: The command "ml.exe /c /nologo /Zi /Fo"Debug\Assignment1.obj" /W3 /errorReport:prompt  /TaAssignment1.asm" exited with code 1.   C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\masm.targets  49  6   Assignment1

【问题讨论】:

  • 我在代码中添加了:.model flat .486,但现在出现错误:错误 1 ​​错误 A2008:语法错误:edx c:\Users\Marshall\documents\visual studio 2010 \Projects\Solution1\Assignment1\Assignment1.asm 29 1 分配1
  • 另一个愚蠢的问题,我应该将 irvine32.inc 在视觉工作室层次结构中的哪个位置移动,以便它可以在不添加额外路径的情况下实际找到它?
  • 通过将所有内容复制到工作目录来修复它,所以回答了我自己的问题

标签: visual-studio assembly masm irvine32


【解决方案1】:

您需要在代码开头使用.model flat - 在此之前可能还需要.486。我认为这将解决您几乎所有的问题。

【讨论】:

  • 确实绕过了这些错误,但现在我得到了不同的错误。附加在上面的评论中。
  • @MarshallTigerus:不同的主题,新的问题。只是问一个新问题。不能帮助未来的内部人员找到由 OP 更改的问题的答案。
【解决方案2】:

如果您使用 x64 而不是 x86 作为平台,也可以避免这种情况。当您在代码中使用 64 位 x 寄存器时,您可能正在为 x64 编码!!!

【讨论】:

  • 我在这里看不到rdx 或其他64位寄存器的任何使用。这显然是将地址放入 32 位寄存器,例如 mov edx, OFFSET intro_1。我不建议将其组装为 64 位代码,因为 Irvine32 库本身(不出所料)是 32 位的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 2021-10-09
  • 2021-11-01
  • 1970-01-01
相关资源
最近更新 更多