我刚刚学汇编语言,下面的代码是书上的一个例子,我用RadASM2.2.1.8来编译它。

时间:2021-04-08 01:21:18
一、源代码 
DSEG SEGMENT 
  MESS DB "MY NAME IS JACK",02H,0DH,0AH,"$" 
DSEG ENDS 
CSEG SEGMENT 
  ASSUME CS:CSEG,DS:DSEG 
  START: 
    MOV AX,DSEG 
    MOV DS,AX 
    MOV DX,OFFSET MESS 
    MOV AH,09H 
    INT 21H 
    MOV AH,4CH 
    INT 21H 
CSEG ENDS 
END START 
二、错误信息 
D:\RadASM\Masm32\Bin\ML.EXE /c /coff /Cp /nologo /I"D:\RadASM\Masm32\Include" "D:\RadASM\111.asm" 
Assembling: D:\RadASM\111.asm 
D:\RadASM\111.asm(7) : error A2004: symbol type conflict 
D:\RadASM\111.asm(15) : warning A4023: with /coff switch, leading underscore required for start address : START 

构建时出错. 
总共编译时间 141 毫秒 

我非常不明白怎么可能会错误呢!!!请高手解答。

12 个解决方案

#1


  把MESS DB "MY NAME IS JACK",02H,0DH,0AH,"$"改成
   MESS DB 13,10,'MY NEME IS JAKE.$'试试看罗

#2


楼上的改动还是编译错误啊,不过也谢谢你

#3


在工程向导DOS APP--》创建工程名称--》DOSeXE.tpl....一直到完成,然后在新建的工程文件里添加新文件了.

#4


楼主用“Masm for Windows 集成实验环境”运行你的程序没有问题。

#5


16位code不要用/coff选项,楼主先找对项目类型。

#6


引用 3 楼 baynpu 的回复:
在工程向导DOS APP--》创建工程名称--》DOSeXE.tpl....一直到完成,然后在新建的工程文件里添加新文件了.

添加后也还是编译错误、

引用 5 楼 mydo 的回复:
16位code不要用/coff选项,楼主先找对项目类型。

不好意思,/coff选项在哪里

#7


设置编译选项,去掉 /coff ,
不同版本MASM产生的obj文件的格式不同,在DOS和Win16时期,Microsoft使用的obj文件格式为OMF格式(Intel Object Module Format),到了Win32时期后改用了COFF格式(Common Object File Format)

#8


在建工程的时候,在工程向导的最后有设置编译连接的选项。不过貌似这是masm32的编译器和连接器。masm32的编译器可以编译16位的,但是连接器不行,需要从别的masm编译器中提取16位的连接器。对于编译,连接,构建的配置,可以手动改相应工程下的 .rap文件。那就是工程向导生成的配置文件。

#9


引用 8 楼 fandelei1982 的回复:
在建工程的时候,在工程向导的最后有设置编译连接的选项。不过貌似这是masm32的编译器和连接器。masm32的编译器可以编译16位的,但是连接器不行,需要从别的masm编译器中提取16位的连接器。对于编译,连接,构建的配置,可以手动改相应工程下的 .rap文件。那就是工程向导生成的配置文件。

谢谢 我安装的是RadASM集成开发环境,怎么设置可以完成16位的编译--连接--构建的过程。。。。。。。。

#10


如果赚麻烦直接把上面的源代码复制到工程文件的.ASM文件里内就可以汇编了.

#11


引用 10 楼 baynpu 的回复:
如果赚麻烦直接把上面的源代码复制到工程文件的.ASM文件里内就可以汇编了.

复制代码到工程文件:
DSEG SEGMENT
  MESS DB "MY NAME IS JACK",02H,0DH,0AH,"$"
DSEG ENDS
CSEG SEGMENT
  ASSUME CS:CSEG,DS:DSEG
  START:
    MOV AX,DSEG
    MOV DS,AX
    MOV DX,OFFSET MESS
    MOV AH,09H
    INT 21H
    MOV AH,4CH
    INT 21H
CSEG ENDS
END START

编译出现如下信息:
D:\RadASM\Masm32\Bin\ML.EXE /DMASM /DDOS /Zm /c /nologo /I"D:\RadASM\Masm32\Include" "111.asm"
 Assembling: 111.asm

构建完成.
总共编译时间 172 毫秒
点击连接后:
D:\RadASM\Masm32\Bin\ML.EXE /DMASM /DDOS /Zm /c /nologo /I"D:\RadASM\Masm32\Include" "111.asm"
 Assembling: 111.asm

构建完成.
总共编译时间 172 毫秒

再点击构建后:
D:\RadASM\Masm32\Bin\doslnk.exe /NOLOGO "111.obj" "",,,,,""
Object Modules [.obj]: /NOLOGO 111.obj+
D:\RadASM\Masm32\Bin\ML.EXE /DMASM /DDOS /Zm /c /nologo /I"D:\RadASM\Masm32\Include" "111.asm"
 Assembling: 111.asm
D:\RadASM\Masm32\Bin\doslnk.exe /NOLOGO "111.obj" "",,,,,""
Object Modules [.obj]: /NOLOGO 111.obj+
LINK : fatal error L1093: 111.obj : object file not found

构建完成.
总共编译时间 436 毫秒

点击运行后出现如下信息:
执行:
"D:\RadASM\Masm\Projects\111\111.exe"

构建完成.
总共编译时间 2137 毫秒


上述过程好像有问题啊,为什么没有出现 MY NAME IS JACK  

#12


就是这样汇编成功了!
在CMD--然后把屏幕切换到全屏(按ALT+ENTER),输入111.EXE回车就看到 MY NAME IS JACK  。

#1


  把MESS DB "MY NAME IS JACK",02H,0DH,0AH,"$"改成
   MESS DB 13,10,'MY NEME IS JAKE.$'试试看罗

#2


楼上的改动还是编译错误啊,不过也谢谢你

#3


在工程向导DOS APP--》创建工程名称--》DOSeXE.tpl....一直到完成,然后在新建的工程文件里添加新文件了.

#4


楼主用“Masm for Windows 集成实验环境”运行你的程序没有问题。

#5


16位code不要用/coff选项,楼主先找对项目类型。

#6


引用 3 楼 baynpu 的回复:
在工程向导DOS APP--》创建工程名称--》DOSeXE.tpl....一直到完成,然后在新建的工程文件里添加新文件了.

添加后也还是编译错误、

引用 5 楼 mydo 的回复:
16位code不要用/coff选项,楼主先找对项目类型。

不好意思,/coff选项在哪里

#7


设置编译选项,去掉 /coff ,
不同版本MASM产生的obj文件的格式不同,在DOS和Win16时期,Microsoft使用的obj文件格式为OMF格式(Intel Object Module Format),到了Win32时期后改用了COFF格式(Common Object File Format)

#8


在建工程的时候,在工程向导的最后有设置编译连接的选项。不过貌似这是masm32的编译器和连接器。masm32的编译器可以编译16位的,但是连接器不行,需要从别的masm编译器中提取16位的连接器。对于编译,连接,构建的配置,可以手动改相应工程下的 .rap文件。那就是工程向导生成的配置文件。

#9


引用 8 楼 fandelei1982 的回复:
在建工程的时候,在工程向导的最后有设置编译连接的选项。不过貌似这是masm32的编译器和连接器。masm32的编译器可以编译16位的,但是连接器不行,需要从别的masm编译器中提取16位的连接器。对于编译,连接,构建的配置,可以手动改相应工程下的 .rap文件。那就是工程向导生成的配置文件。

谢谢 我安装的是RadASM集成开发环境,怎么设置可以完成16位的编译--连接--构建的过程。。。。。。。。

#10


如果赚麻烦直接把上面的源代码复制到工程文件的.ASM文件里内就可以汇编了.

#11


引用 10 楼 baynpu 的回复:
如果赚麻烦直接把上面的源代码复制到工程文件的.ASM文件里内就可以汇编了.

复制代码到工程文件:
DSEG SEGMENT
  MESS DB "MY NAME IS JACK",02H,0DH,0AH,"$"
DSEG ENDS
CSEG SEGMENT
  ASSUME CS:CSEG,DS:DSEG
  START:
    MOV AX,DSEG
    MOV DS,AX
    MOV DX,OFFSET MESS
    MOV AH,09H
    INT 21H
    MOV AH,4CH
    INT 21H
CSEG ENDS
END START

编译出现如下信息:
D:\RadASM\Masm32\Bin\ML.EXE /DMASM /DDOS /Zm /c /nologo /I"D:\RadASM\Masm32\Include" "111.asm"
 Assembling: 111.asm

构建完成.
总共编译时间 172 毫秒
点击连接后:
D:\RadASM\Masm32\Bin\ML.EXE /DMASM /DDOS /Zm /c /nologo /I"D:\RadASM\Masm32\Include" "111.asm"
 Assembling: 111.asm

构建完成.
总共编译时间 172 毫秒

再点击构建后:
D:\RadASM\Masm32\Bin\doslnk.exe /NOLOGO "111.obj" "",,,,,""
Object Modules [.obj]: /NOLOGO 111.obj+
D:\RadASM\Masm32\Bin\ML.EXE /DMASM /DDOS /Zm /c /nologo /I"D:\RadASM\Masm32\Include" "111.asm"
 Assembling: 111.asm
D:\RadASM\Masm32\Bin\doslnk.exe /NOLOGO "111.obj" "",,,,,""
Object Modules [.obj]: /NOLOGO 111.obj+
LINK : fatal error L1093: 111.obj : object file not found

构建完成.
总共编译时间 436 毫秒

点击运行后出现如下信息:
执行:
"D:\RadASM\Masm\Projects\111\111.exe"

构建完成.
总共编译时间 2137 毫秒


上述过程好像有问题啊,为什么没有出现 MY NAME IS JACK  

#12


就是这样汇编成功了!
在CMD--然后把屏幕切换到全屏(按ALT+ENTER),输入111.EXE回车就看到 MY NAME IS JACK  。