Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите разобраться с метками, проблемма C++ adn tasm 
:(
    Опции темы
viktorchik
Дата 26.3.2007, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.3.2007

Репутация: нет
Всего: нет



Здравствуйте люди добрые! Помогите разобраться с небольшой проблеммкой и объяснить что я делаю не так  есть код на Borland Turbo C++ 3.0 со вставками ASMa, по замыслу эта программа должна  считать сумму цифр введеного пользователем числа, но при компилинге вылазиет ошибка " Undefined label 'met1'" и указатель прыгает на конец кода. Я не могу понять что ему нужно и как обозначить эту метку чтобы все работало. Всем заранее спасибо.

Код

#include <conio.h>
#include <stdio.h>
#include <iostream.h>

int x,y,z,a;

  main(){
     z=10;
     cout <<"Vvedite chislo"<<endl;
     cin >>x;

          asm {
          sub dx,dx
          mov ax,x
met1:
          div z
          mov y,ax
          cmp ax,0
          jne met1
          mov a,dx
          add a,dx
    }
  cout <<y<<"\n";
  cout <<a;
  cin>>x;
return 0;
}


PM MAIL   Вверх
Sartorius
Дата 26.3.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



 По моему у борланда все локальные метки с собаки должны были начинаться... Хотя не помню точно. попробуй
PM MAIL ICQ   Вверх
viktorchik
Дата 26.3.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.3.2007

Репутация: нет
Всего: нет



К сожелению такой вариант не подходит все равно на метку met1 ругается
PM MAIL   Вверх
sgi1981
Дата 26.3.2007, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 16.3.2006

Репутация: 2
Всего: 10



Есть такая особенность - символы 1 и l иногда путают.


--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
viktorchik
Дата 27.3.2007, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.3.2007

Репутация: нет
Всего: нет



В том то и дело, что путаницы с символами нет! Именно возникает ошибка " Undefined label 'met1'" а не какой нить синтаксис эрор!
PM MAIL   Вверх
Kuvaldis
Дата 27.3.2007, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: нет
Всего: 61



>> 004. BC не хочет понимать метки во встроенном ассемблере
> Q: BC не хочет понимать метки в ассемблерной вставке - компилятор сказал,
>    что не определена энта самая метка. Пришлось определить метку за
>    пределами ASM-блока. Может быть есть более корректное решение?

A: (Michael Yutsis) - 27.12.95

     Загляни в исходники RTL от BC++ 3.1 и yвидишь там нечто красивое,
например:

    #define I asm
    //........
    I   or si,si
    I   jz m1
    I   mov dx,1
    m1:
    I   int 21h

и т.д.

A: (Vadim Gaponov) - 06.01.96

     Есть - компилировать с ключом '-B' (via Tasm) aka '#pragma inline'.
Правда, при этом могут возникнуть другие проблемы: если присутствуют имена
read и _read (например), то компилятор в них запутается smile.

     BTW: Было замечено, что борланд (3.1, например) иногда генерит разный
код в зависимости от ключа -B. Как правило, при его наличии он становится
"осторожнее" - начинает понимать, что не он один использует регистры.

A: (Victor Pomortseff) - 23.02.96

     В документации по BC 3.1 я нашёл то место, где описано использование
меток в inline assembler.

Borland C++ version 3.1 Programmer's Guide.
Chapter 12. BASM and inline assembly,
Using jump instructions and labels, p.406.

You can use any of conditional and unconditional jump inctructions, plus
the loop instructions, in inline assembly. They are only valid inside a
function. Since no labels can be defined in the `asm` statements, jump
instruction must use C `goto` labels as the object of the jump. If the
label is too far away, the jump will be automatically converted to a
long-distance jump. Direct far jumps cannot be generated.

In the following code, the jump goes to the C `goto` label "a".

    int x(){
        a:      /* This is the goto label "a" */
        ...
        asm jmp a   /* Goes to label "a" */
        ...
    }

Indirect jumps are also allowed. To use an indirect jump, you can use a
register name as the operand of the jump instruction.

источник

Соответственно, пример кода в сабже будет:
Код

#include <conio.h>    
#include <stdio.h>    
#include <iostream.h>

    
int x,y,z,a;    
  main(){    
     z=10;    
     cout <<"Vvedite chislo"<<endl;    
     cin >>x;
    
     _asm {
          sub dx,dx    
      mov ax,x
      }
met1:

       _asm{
      div z
          mov y,ax    
          cmp ax,0    
      jne met1
          mov a,dx    
          add a,dx    
    }    

  cout <<y<<"\n";    
  cout <<a;    
  cin>>x;    
return 0;    
}



--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.1031 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.