На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> не работает _EAX + проверьте маленький код, плз , опять про 32-х битные регистры в ДОСе
    MS DOS 6.22 и borland c 3.1

    почему-то в моем bc31 не работает _EAX, _EBX, _ECX и т.д.
    когда смотрю просто _AX (младшее слово), то он верный.
    Options->compiler->code generation -> large
    Options->compiler->advanced code generation->instuction set-> 80386

    может еще что-то надо настроить? несколько дней назад кто-то говорил, что так все работает. Именно bc31+dos

    В итоге работает такая штука:

    ExpandedWrap disabled
      unsigned long wBaseAddr;
      asm{
      db 0x66;    mov word ptr wBaseAddr,cx;
      }


    в переменной wBaseAddr записан 32-х разрядные регистр ecx.

    тогда верны ли следующие строки:


    ExpandedWrap disabled
      unsigned long data;
      unsigned int port;
      asm{
      mov dx,port;
      db 0x66; mov ax, word ptr data; //(32-х битная data)
      db 0x66; out dx,ax; // записали в порт число data
      }
       
      asm{
      mov dx,port
      db 0x66; in port; // из порта в ax записано 32-х битное число
      db0x66; mov word ptr data,ax
      }
      Цитата antpu238 @
      тогда верны ли следующие строки:

      Почти :)

      ExpandedWrap disabled
        asm{
            mov dx,port
            db 0x66
            in ax,dx      // из порта в ax записано 32-х битное число
            db 0x66
            mov word ptr data,ax
           }



      Цитата antpu238 @
      почему-то в моем bc31 не работает _EAX, _EBX, _ECX и т.д.
      когда смотрю просто _AX (младшее слово), то он верный.
      Options->compiler->code generation -> large
      Options->compiler->advanced code generation->instuction set-> 80386

      Настройки правильные, должно работать...
      Попробуй этот код - у меня работает:

      ExpandedWrap disabled
        #include<stdio.h>
        #include<conio.h>
        //////////////////////////////////////////////////////////////
        unsigned long x=0x55AA55AA;
        unsigned long y=0x00000000;
        //////////////////////////////////////////////////////////////
        void main(void)
         {
          clrscr();
          _EAX=x;
          y=_EAX;
          printf("EAX=%08lX, x=%08lX, y=%08lX\n",_EAX,x,y);
          getch();
         }

      Если не будет работать, тогда будем разбираться.
      Или у тебя во встроенном ассемблере не работает?
        cppasm
        хм, на экране все верно,
        а в watch'e _EAX всегда равно 0х4150140...

        Добавлено
        похоже BC31 не может в вотче отображать _EAX и иже с ним...
          Цитата antpu238 @
          похоже BC31 не может в вотче отображать _EAX и иже с ним...

          Похоже...
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0416 ]   [ 15 queries used ]   [ Generated: 6.07.25, 14:30 GMT ]