Помогите перенести проект из Dev-C++ IDE в студию 2005

Тема в разделе "WASM.BEGINNERS", создана пользователем ajak, 23 июл 2009.

  1. ajak

    ajak New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2007
    Сообщения:
    463
    А то чтот у меня ошибки и не пойму чтото да и синтаксис какой то странный

    void gbz80_inc(byte* reg)
    {
    asm volatile (
    "movl $0, %1\n" // load 0 to NFLAG

    "incb %2\n"

    "lahf\n" // get flags
    "andb $1,%%bh\n" // carry not affected
    "andb $0xFE,%%ah\n"
    "orb %%ah, %%bh \n"

    : "=b" (flags), "=g" (NFLAG), "=q" (*reg)
    : "2" (*reg), "0" (flags)
    : "cc", "ah");
    }

    Вот, студия ругается так

    c:\documents and settings\администратор\мои документы\visual studio 2005\projects\gest\gest\opcodes.h(22) : error C2059: syntax error : '<cv-qualifer>'


    : "=b" (flags), "=g" (NFLAG), "=q" (*reg)
    : "2" (*reg), "0" (flags)
    : "cc", "ah");


    и ещё двоеточия какие то странные
     
  2. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    visual-studio, насколько я знаю, не поддерживает AT&T-синтаксис inline-ассемблера.
     
  3. ajak

    ajak New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2007
    Сообщения:
    463
    Тю, точно я только ща понял что это такой синтаксис. ФАк. Скажи а что за двоетоция. Это тоже присуще этому синтаксису?
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    есть неплохие howto про встроенный асм gcc.
     
  5. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    нужны для... как бы сказать.. передачи параматров inline-ассемблеру.
    Код (Text):
    1. void gbz80_inc(byte* reg)
    2. {
    3.     asm volatile (    
    4.      "movl $0, %1\n"      // load 0 to NFLAG
    5.      
    6.      "incb %2\n"
    7.          
    8.      "lahf\n"             // get flags
    9.      "andb $1,%%bh\n"     // carry not affected
    10.      "andb $0xFE,%%ah\n"
    11.      "orb %%ah, %%bh \n"
    12.      
    13.      : "=b" (flags), "=g" (NFLAG), "=q" (*reg)
    14.      : "2" (*reg), "0" (flags)
    15.      : "cc", "ah");  
    16. }
    после первого двоеточия - выходные параметры
    после второго - входные параметры
    после третьего - список регистров, которые будут использованы (т.е. затерты).

    вот ссылка по gcc inline-ассемблеру.
    http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
     
  6. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    ajak
    1. Делаешь файл, например, t.c
    Код (Text):
    1. typedef unsigned char byte;
    2. extern int NFLAG;
    3. extern unsigned short flags;
    4.  
    5. void gbz80_inc(byte* reg)
    6. {
    7.      asm volatile (    
    8.      "movl $0, %1\n"      // load 0 to NFLAG
    9.      
    10.      "incb %2\n"
    11.          
    12.      "lahf\n"             // get flags
    13.      "andb $1,%%bh\n"     // carry not affected
    14.      "andb $0xFE,%%ah\n"
    15.      "orb %%ah, %%bh \n"
    16.      
    17.      : "=b" (flags), "=g" (NFLAG), "=q" (*reg)
    18.      : "2" (*reg), "0" (flags)
    19.      : "cc", "ah");  
    20. }
    2. Скармливаешь его какому-нибудь gcc, например gcc-g++-3.4.5-20060117-1.tar.gz (4’710’429 байт),
    Код (Text):
    1. c++.exe -S t.c
    3. Получаешь t.s
    Код (Text):
    1.     .file   "t.c"
    2.     .text
    3.     .align 2
    4. .globl __Z9gbz80_incPh
    5.     .def    __Z9gbz80_incPh;    .scl    2;  .type   32; .endef
    6. __Z9gbz80_incPh:
    7.     pushl   %ebp
    8.     movl    %esp, %ebp
    9.     pushl   %ebx
    10.     movl    8(%ebp), %eax
    11.     movzbl  (%eax), %edx
    12.     movzwl  _flags, %ebx
    13. /APP
    14.     movl $0, _NFLAG
    15. incb %dl
    16. lahf
    17. andb $1,%bh
    18. andb $0xFE,%ah
    19. orb %ah, %bh
    20.  
    21. /NO_APP
    22.     movw    %bx, _flags
    23.     movl    8(%ebp), %eax
    24.     movb    %dl, (%eax)
    25.     popl    %ebx
    26.     popl    %ebp
    27.     ret
    4. Внимательно изучаешь его и делаешь вариант для VC
    Код (Text):
    1. typedef unsigned char byte;
    2. extern int NFLAG;
    3. extern unsigned short flags;
    4.  
    5. void gbz80_inc(byte* reg)
    6. {
    7.   NFLAG = 0;
    8.  
    9.   __asm mov  eax,reg
    10.   __asm mov  dl,[eax]
    11.   __asm mov  bx,flags
    12.  
    13.   __asm inc  dl
    14.   __asm lahf
    15.   __asm and  bh,1
    16.   __asm and  ah,0xFE
    17.   __asm or   bh,ah
    18.  
    19.   __asm mov  flags,bx
    20.   __asm mov  eax,reg
    21.   __asm mov  [eax],dl
    22. }