2014-02-19 169 views
0

我已經開始學習彙編,並試圖編譯下面的代碼在Visual Studio 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? (如果這是什麼使這個錯誤apeare)。


感謝,
伊Sorozon

+3

你在這裏感到非常困惑。你的程序集是真正的模式,16位程序集,在MS-DOS的日子裏使用。 Visual Studio 2010是一個Windows編譯器,不再支持構建DOS可執行文件。你過得好嗎?你是否有機會拿起一本1980年末寫的裝配書(裝配方式更相關)? –

+0

這是我需要學習的程序集的靈感。所以我想我會得到一個DOS編譯器 - 你有什麼建議嗎? –

+1

請參閱@ Seki的回答。如果您必須執行16位實模式彙編,並且我不得不問問你的教授在想什麼,事實上,你需要或者a)在你的系統上安裝DOS - 祝你好運,我希望你不想將它用於其他任何東西 - 或者b)使用模擬器或虛擬機。 –

回答

2

如果你正在學習的彙編語言基礎知識,你應該給與emu8086一個嘗試:它是一個專用於裝配的學習工具,其特點是MASM兼容彙編器支持宏(它也可以支持fasm語法)和一個帶DOS屏幕仿真的8086 cpu模擬器來測試/調試你的工作。

它可以生成16位COM程序,老式EXE甚至引導扇區。

您在問題中顯示的示例程序在組裝時沒有該工具的問題。