重复声明错误。部件

时间:2017-03-30 20:53:44

标签: assembly masm emu8086

我正在使用masm和dosbox。在我的程序中,我有3个类似于proc down_left(下面)的程序。在这四个过程中的每一个都使用相同的名称:“down_edge,right_edge,left_edge,up_edge,corner,done,next,normal,czykrawedzboczna”。

如何为每个proc设置这些名称? 我试过像“LOCAL down_edge,right_edge,......”这样的东西。但它不起作用。

proc down_left          
    pusha
    LOCAL down_edge, right_edge, left_edge, up_edgelcorner, done, next, normal, czykrawedzboczna
    mov ah,es:[bishop]      ;x - biskupa
    mov al,es:[bishop+1]    ;y - biskupa 

    cmp ah,0
    jne next
        cmp al,8
        je done
    next:

    cmp al,8
    je down_edge            ; dolna krawedz 

    cmp ah,0                     ;Czy x=0, y<{0,1,2,3,4,5,6,7,8}
    jne normal
        mov cl,0
        czykrawedzboczna:            ;lewa krawedz
            cmp al,cl
            je left_edge
            add cl,1
            cmp cl,8
            ja normal   
       jmp czykrawedzboczna

    normal:
        dec ah
        dec al 
        jmp done     

    down_edge: 
        dec ah
        jmp done  
    left_edge: 
        dec al
        jmp done

    done:
        xor bx,bx
        mov bl,nr ah al 
        inc es:[tablica+bx]    
        mov es:[bishop],ah      ;x - biskupa  ZAPISZ BIERZACE POLOZENIE BISKUPA
        mov es:[bishop+1],al    ;y - biskupa 
    popa              
    ret
down_left  endp       

2 个答案:

答案 0 :(得分:0)

较新的MASM(&gt; = 6)中的标签在PROC和ENDP之间是本地的。较旧的MASM在.MODEL指令中还需要一个langtype,例如: .MODEL small, C

Emu8086不提供本地“程序”标签。你可能会使用棘手的工作,但我建议反对它

关于DOSBox中的调试,谷歌搜索“turbo debugger”。

答案 1 :(得分:0)

如果您使用的是emu8086,并且您需要多次调用宏,则您必须在宏部分中声明您的标签,例如LOCAL label1,label2