2014-02-19 1 views
0

Я начал изучать сборку и попытался скомпилировать следующий код на визуальной студии 2010Не удается скомпилировать этот код сборки

 
DSEG SEGMENT 
    A DW 8 
    B DW 10 
DSEG ENDS 

SSEG SEGMENT STACK 
    DW 100H DUP(?) 
SSEG ENDS 

CSEG SEGMENT 
ASSUME CS:CSEG, DS:DSEG, SS:SSEG 

MAIN PROC FAR 
    PUSH DS 
    MOV AX, 0 
    PUSH AX 
    MOV AX, DSEG 
    MOV DS, AX 

    ; The start of the program 

    MOV AX, A 
    MOV BX, B 
    ADD AX, BX 
    MOV A, AX 

    RET 
MAIN ENDP 

CSEG ENDS 

END MAIN 

я получил следующие ошибки:

1>main.asm(17): error A2004: symbol type conflict 
1>main.asm(32): warning A4023: with /coff switch, leading underscore required for start address : MAIN 
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\masm.targets(49,5): error MSB3721: The command "ml.exe /c /nologo /Zi /Fo"Debug\main.obj" /W3 /errorReport:prompt /coff /Tamain.asm" exited with code 1. 

Я искал веб для души, и единственное, что я нашел, это то, что ошибка A2004 происходит из-за директивы/coff.

Как удалить/coff из списка аргументов? (Если это то, что нужно использовать для этой ошибки).


Спасибо,
идо Sorozon

+3

Вы серьезно запутались здесь. Ваша сборка - это реальный режим, 16-разрядная сборка, вид, используемый в дни MS-DOS. Visual Studio 2010 является компилятором Windows и больше не поддерживает создание исполняемых файлов DOS. Что вам нужно, пожалуйста? Вы случайно взяли книгу об сборке, написанную в конце 1980-х годов (когда сборка была более актуальной)? –

+0

Это новая сборка, которую мне нужно изучить. Поэтому я думаю, что я получу компилятор DOS, есть ли у вас предложения? –

+1

См. Ответ @ Seki. Если вы ДОЛЖНЫ выполнить 16-битную сборку в реальном режиме, и мне нужно будет спросить, что думает ваш профессор, если это так, вам нужно либо: a) установить DOS в вашей системе - удачи , и я надеюсь, что вы не хотите использовать его ни для чего другого - или б) используйте эмулятор или виртуальную машину. –

ответ

2

Если вы изучаете основы ассемблера, вы должны дать попробовать с emu8086: это инструмент, посвященный обучению сборки, который имеет совместимый ассемблер MASM с поддержкой макросы (он также может поддерживать синтаксис fasm) и симулятор 8086 cpu с эмуляцией экрана DOS для тестирования/отладки вашей работы.

Это позволяет создавать 16-битные COM-программы, старомодные EXE и даже загрузочные сектора.

Образец программы, которую вы показываете в своем вопросе, собрал без проблем с этим инструментом.