Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с метками в ассембли 
:(
    Опции темы
neutrino
Дата 8.1.2004, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



Приветствую!

Давненько мне не приходилось писать на асме в cи. Но вот время настало и что-то он ругается на мои метки. Видимо я чего-то не дописываю. В книге ничего не нашел. sad.gif Вот код:

Код

char n1[10]={0,0,1,2,3,4,5,6,7,8};
char n2[10]={0,0,8,7,6,5,4,3,2,1};
char n3[10]={0};
char len=10;

void addition()
{
 asm {
     lea  si, n1+9;
     lea  di, n2+9;
     mov  cx, 10;
_add: lodsb;
     adc  al, [di];
     aaa;
     stosb;
     loop _add;
 }
}

void main()
{
 addition();
}



--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Tatarin
Дата 8.1.2004, 03:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



если собирать под VC++7 то тут случаются две ошибки:
1) _asm вместо asm
2) в строке
Код
adc  al, [di];

происходит ошибка
error C2432: illegal reference to 16-bit data in 'second operand'
это он ругается на di. Если поменять на edi (32-битный) то все собирается без проблем.
PM MAIL   Вверх
Custodian
Дата 8.1.2004, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все дело в том, что по не понятным причинам, _asm{} не хочет работать с метками.
Можно немного модифицировать код, но не потерять его рабочести:

char n1[10]={0,0,1,2,3,4,5,6,7,8};
char n2[10]={0,0,8,7,6,5,4,3,2,1};
char n3[10]={0};
char len=10;

void addition()
{
_asm {
lea si, n1+9;
lea di, n2+9;
mov cx, 10;}
for(int i=10;i>0;i--)
_asm{lodsb;
adc al, [di];
aaa;
stosb;}
}

void main()
{
addition();
}

Иногда не работает int i=10; в for, можно вынести к заголовку подпрограммы.
PM MAIL WWW   Вверх
neutrino
Дата 9.1.2004, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



А чем отличается три оператора:
asm{}
_asm{}
__asm{}

? ? ?

А в вижуал с++ 6.0 есть отличия?


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Guest
Дата 10.1.2004, 00:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











метки надо исключать из блоков асм т.е. писать их вне, разрывая блоки
  Вверх
Chingachguk
Дата 10.1.2004, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



neutrino, си - это извращенный язык ;) Гораздо извращенне асма:

Цитата

void main( void )
{
  asm {
    jmp Label
  }
DataStr:
  asm {
    db 'Test','$'
  }
Label:
  asm {
  db 0xE8,0x00,0x00 // call $+3
  pop  dx // dx=offset pop dx command
  sub  dx,3+5 // sizeof(call $+3) + sizeof(DataStr)
  // against mov  dx,offset DataStr !!!
  push ds
  push cs
  pop  ds
  mov  ah,0x09
  int  0x21
  pop  ds
  }
}




--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
neutrino
Дата 10.1.2004, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



Да, блин. Вот [censored 6] фигня. Я тут запутался, глянь код. Что я не так делаю:

Код

void BigInt::Add(char *N1, char *N2, int Len)
{
_asm {
 pusha
 mov  eax, [N1]
 lea  esi, eax
 mov  eax, [N2]
 lea  edi, eax
 mov  ecx, [Len]
 clc
 cld
_add: lodsb
 adc  al, [edi]
 aaa
 stosb
 loop _add
 popa
}
}

Я хотел сложить два числа в двух строках, а он что-то не то делает. Даже не знаю что.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Chingachguk
Дата 10.1.2004, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



1. Судя по всему, ты пишешь на VC. Там очень легко сделать асм-дамп (в режиме дизассемблера). Сдампь то, что делает в результате компиллятор. У меня сильное подозрение, что надо писать не mov eax,[N1] а mov eax,N1 (получить указатель из стека). Приведи его тута ;)

2. Я точно не понимаю, что за числа ты складываешь. Приведи пример аргументов и ожидаемого тобой результата ;)


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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