obj в фасме и насме

Тема в разделе "WASM.ASSEMBLER", создана пользователем NeTxXx, 26 июн 2006.

  1. NeTxXx

    NeTxXx New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    11
    вот отрывок кода (nasm):
    Код (Text):
    1.  
    2. org 0
    3. bits 16
    4. extern _cstart
    5. start:
    6.    call _cstart
    7.    jmp $
    8.  
    9. global _set_curpos
    10. _set_curpos
    11.    push bp
    12.    mov bp,sp
    13.    push dx
    14.    push ax
    15.    push bx
    16.  
    17.    mov dh,[bp+4]
    18.    mov dl,[bp+6]
    19.    mov ah,02h ; set cursor position
    20.    mov bh,0
    21.    int 10h  
    22.  
    23.    pop dx
    24.    pop ax
    25.    pop bx
    26.    pop bp
    27. ret
    28.  




    ну и допустим код на си:
    Код (Text):
    1.  
    2. extern void set_curpos(char row, char col);
    3.  
    4. void cstart(void) {
    5.    set_curpos(5,0);
    6. }
    7.  


    линкуем jloc'ом.. все ок..



    делаю подобное на фасме:
    Код (Text):
    1.  
    2. format coff
    3. org 0
    4. use16
    5. extrn _cstart
    6. start:
    7.     call _cstart
    8.     jmp $
    9.  
    10. public set_curpos as '_set_curpos'
    11. set_curpos:
    12.     ...
    13.     ...
    14.     ...
    15.  
    16.  


    пробую компилить, а он орет типа

    call _cstart: error: invalid use of symbol.

    почему???
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine


    Во-первых, фасм не поддерживает OMF, так что подобное на фасме сделать нельзя. Во-вторых зачем тут org, если это не бинарник, а обдж?





    Надо явно указывать что за символ, хотя бы так:
    Код (Text):
    1. extrn '_cstart' as cstart:dword
    2. call [cstart]