Ошибка MSB3721 при попытке собрать простую программу вычитания в сборке

Я пишу простую программу сборки, которая должна вычесть 3 целых числа, используя только 16-битные регистры. Затем я должен вызвать DumpRegs, чтобы показать вывод.

Я использую Microsoft Visual Studio 2013.

Мой код:

INCLUDE Irvine32.inc    

.386                    

.model flat, stdcall    

.stack 4096             

ExitProcess PROTO, dwExitCode:DWORD

.data                   
    integerOne WORD 10  ; 16 bit WORD integerOne with the value 10
    integerTwo WORD 3   ; 16 bit WORD integerTwo with the value 3
    integerThree WORD 5 ; 16 bit WORD integerThree with the value 5
    finalAnswer WORD ?  ; 16 bit WORD finalAnswer with a unknown value
                        ; to store the subtraction answer

.code   ; Start of the code section
main PROC   ; Main Procedure Start

    mov EAX, 0          ; Moves 0 into the EAX register

    mov AX, integerOne  ; Loads the AX register with integerOne (10)

    sub AX, integerTwo  ; Subtracts integerTwo (3) from the AX register

    sub AX, integerThree    ; Subtracts integerThree (5) from the AX register

    mov finalAnswer, AX ; Moves the contents of the AX register into finalAnswer

    call DumpRegs       ; Outputs the registers

    INVOKE ExitProcess,0    

main ENDP

END main

Ошибка при запуске без отладки заключается в следующем:

Error   2   error MSB3721: The command "ml.exe /c /nologo /Zi /Fo"Debug\Subtracting Three Integers.obj" /W3 /errorReport:prompt  /Ta"Subtracting Three Integers.asm"" exited with code 1.   C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations\masm.targets 50  5   CSE 210 Assignment 2

Я также получаю предупреждение:

Warning 1   warning A4011: multiple .MODEL directives found : .MODEL i  C:\Users\Tapan\Desktop\Desktop Files\VS\CSE 210 Assignment 2\Subtracting Three Integers.asm 14  1   CSE 210 Assignment 2

Вчера эта программа работала нормально, вот скриншот окна вывода:

Окно вывода

1 ответ

Решение

При использовании библиотеки Kip's Irvine Win32 вы делаете это:

INCLUDE Irvine32.inc

Вы неявно делаете это под капотом:

.386                    
.model flat, stdcall    
.stack 4096   

При выполнении include irvine32.inc И, выполнив вышеуказанные 3 строки, вы определяете эти параметры дважды. Microsoft Assembler видит это как ошибку. Это было предложено в этом несколько загадочном сообщении об ошибке, где он жаловался на множественные .model определяемые директивы:

warning A4011: multiple .MODEL directives found : .MODEL i C:\Users\Tapan\Desktop\Desktop Files\VS\CSE 210 Assignment 2\Subtracting Three Integers.asm 14  1   CSE 210 Assignment 2

Я считаю, что, чтобы избежать этой проблемы при использовании include irvine32.inc Вы просто удаляете все три из следующих строк и просто включаете irvine32.inc:

.386                    
.model flat, stdcall    
.stack 4096  ; If a bigger stack is needed(>4096) then define it to be larger 
Другие вопросы по тегам