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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как запретить оптимизировать asm-вставки, компилятору 
V
    Опции темы
586
  Дата 12.8.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код
void _lstrcat(char* s1, char* s2)
{
    _asm {
        mov edi, s2
        mov al, 32
        repnz scasb
        setz dl
        push dl
        push dword ptr s1
        call dword ptr lstrlen
        push eax
        push dword ptr s2
        call dword ptr lstrlen
        mov ecx, eax
        pop edi
        add edi, s1
        mov esi, s2
        pop dl
        mov eax, s1
        cmp word ptr [eax], 0
        je loc_3
        mov al, 32
        stosb
    loc_3:
        or dl, dl
        jz loc_4
        mov al, 34
        stosb
    loc_4:
        rep movsb
        or dl, dl
        jz loc_5
        mov al, 34
        stosb
    loc_5:
        xor al, al
        stosb
    }
}

Фрагмент диззассемблированного кода:
Код
386:          repnz scasb
00401DAD F2 AE                repne scas  byte ptr [edi]
387:          setz dl
00401DAF 0F 94 C2             sete        dl
388:          push dl
00401DB2 52                   push        edx              ; !!!

; ...

398:          pop dl
00401DCF 66 5A                pop         dx              ; !!!

Как запретить компилятору заниматься такой самодеятельностью?
PM   Вверх
Mayk
Дата 12.8.2006, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



1) пиши на асме объектный файл. 
2) что за компилятор? 
3) что за архитектура?
  ни amd64 programmer's manual
 ни x86 Instruction Reference из nasm 
не содержат операций по помещению 8-битовых регистров в стек.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
586
Дата 12.8.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Mayk @  12.8.2006,  16:04 Найти цитируемый пост)
  ни amd64 programmer's manual
 ни x86 Instruction Reference из nasm 
не содержат операций по помещению 8-битовых регистров в стек. 

x86. Не сталкивался с этим. Компилятор по идее должен был выдать ошибку, но не выдал.

Спасибо
PM   Вверх
bel_nikita
Дата 12.8.2006, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Код

#pragma optimize, off
...
#pragma optimize, on



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW 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.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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