回 帖 发 新 帖 刷新版面

主题:@F、@B、@@ 等是什么符号?

诸位高手,请问@F、@B、@@ 等是什么符号?用MASM 汇编成功,但链接出错,用RADASM等汇编,错误众多:
    ...   ...            
    MOV    AL,BYTE PTR G_RAM:[BootSel]    

        CMP    AL,2
        JB    SHORT @F
        CMP    BYTE PTR NumHDSKS,0
        JNE    SHORT @F
        CALL    Reset_INT13
@@:
ENDIF   
        MOV    AX,1202h        
        MOV    BL,30h            
        INT    10h            

        MOV    AX,3            
IFDEF    DOUBLE_BYTE_LANGUAGE            
        TEST    BYTE PTR DISP_MODE[BP], IS_DOUBLE_BYTE    
        JZ    SHORT @F                
        CALL    init_Int10h                
        MOV    AX,12h                    
@@:                                
ENDIF                   
        INT    10h    
    ...   ...            
Assembling Report:
(1125): error A2004: Redefinition of symbol
    ...   ...            

回复列表 (共6个回复)

沙发

我晕,连标号都不认识呐??这是一个普通的标号啊。


汇编中的标识符可以由数字和字母再加上@、?、$和_组成。

板凳

感谢C语言爱好者的回复,我不是搞8086/8088汇编语言的,临时需要,下载一些,但无论用任何WIN32的编译工具都报错。能否再详细些?错在哪里,怎样解决?既然是常识,为什么好多教材未提及?能否介绍一些,最好是网上的。

3 楼

你列出的代码使用了条件汇编,从出错的信息来看,应该是符号重复定义了,但你给的资料不足,还无法判断是哪里出了问题。

4 楼

错了,在MASM中,@@有特殊的含义,例如:

@@:
  .....
  .....
  .....
  jmp @B
  .....
  jmp @F
@@:
  mov al, bl

例子中执行jmp @B 会跳到离该@B最近最前的第一个@@符号,B 也就是before的意思。而相对应的@F则跳到离该@F最近最后的第一个@@符号,例子中执行mov al, bl 指令。

5 楼

我虽不懂,但能听到讲得颇有道理,多谢!但能否告知为什么几乎所有的WIN32编程环境(如《轻松汇编》、《VisualASM》、《Win_Masm》,并且都是选在MASM611)都会报错?

6 楼

看你的程序也是DOS程序,这是兼容性问题,masm32是用来开发32位的windows程序的,建议所有的DOS程序都用masm5.11进行编译链接。

我来回复

您尚未登录,请登录后再回复。点此登录或注册