注册 登录
编程论坛 汇编论坛

编译器相关

vfdff 发布于 2008-10-14 17:50, 2719 次点击
stack    segment    stack
    dw    100 dup (?)
stack    ends
data    segment   
    x1    db    'please input a letter','$'    ;必须'$'结尾
    x2    db    'zhongyunde','$'  ;
data    ends
code    segment
    assume    cs:code,ds:data,ss:stack
start:   
    push    ds
    xor    ax,ax
    push    ax
    mov    ax,data
    mov    ds,ax
    mov    ah,1h
    int    21h
    cmp    al,0
    jz    start
   
    call    far ptr xx2  
    mov    ah,1h
    int    21h
    ret

xx2    proc    ;far

    ;mov    ax,data
    ;mov    ds,ax
    mov    dx,offset    x2
    mov    ah,    9h
    int    21h   
    ret
xx2    endp
code   ends
    end    start
上面的代码在 masm5.0上能够编译、链接
但是使用 RadASM2.2.1.1却不能通过编译
提示:
C:\RadASM\projects\dd.asm(14) : error A2004: symbol type conflict
C:\RadASM\projects\dd.asm(36) : warning A4023: with /coff switch, leading underscore required for start address : start
是不是因为 masm5.0 编译的是16位汇编代码
而现在这个 RadASM2.2.1.1 却只能编译32位汇编代码??
6 回复
#2
ONEPROBLEM2008-10-14 18:33
是不是因为 masm5.0 编译的是16位汇编代码
而现在这个 RadASM2.2.1.1 却只能编译32位汇编代码??
;===============================
有些编译器还是有一定的兼容性的,如MASMPlus 也能编译16位的汇编代码.
RadASM2.2.1.1能不能编译,你查看一下它的相关说明.是不是像MASMPlus一样,在源文件的头部加点东西就行的.
#3
cnhanxiao2008-10-17 07:43
mov    ax,data

RadASM默认使用MASM32编译器,各段都是32位的,mov eax,data,那第一个错误就过去了。试了一下,在MASM32下,给你的程序前加.8086或者对段做出限制都无法编译,只能在编译时候加上/Zm选项才能编译通过:
E:\>ml /c /Zm test.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
 Assembling: test.asm
E:\>
( /Zm Enable MASM 5.10 compatibility——兼容MASM5.10)
不过按照加选项能编译通过,应该在程序中也可以限定的,这是MASM给用户的两种选择,只是我没能找到在程序告知编译器的伪指令?

这样的程序还是用MASM5.0,可以对你锻炼很多的。真喜欢集成环境的话,你可以把MASM5.0加入RadASM,并设置成默认的。

[[it] 本帖最后由 cnhanxiao 于 2008-10-17 08:06 编辑 [/it]]
#4
cnhanxiao2008-10-17 14:44
好了,在RadASM下一样可以的:
你选择新建项目——DOS程序,然后把这个程序粘贴进去,就OK了!
#5
zklhp2008-10-17 17:02
偶发现很多人有个误解

其实 masmplus也好 radasm也好 都是ide

他们都是用的masm呀

只要编译参数对了 比如 /Zm 什么ide都行的
#6
cnhanxiao2008-10-17 17:56
回复 5# zklhp 的帖子
是,只是连接时候,要用DOSLINK,折腾我不久
#7
zklhp2008-10-17 18:16
[bo][un]cnhanxiao[/un] 在 2008-10-17 17:56 的发言:[/bo]

是,只是连接时候,要用DOSLINK,折腾我不久


还是偶经常说的那句话:ide真好!

其实知道原理后 用什么编译都行 用ide很方便 比如masmplus
1