Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Troll_Face
603 / 403 / 8
Регистрация: 26.04.2012
Сообщений: 2,069
1

GCC. генерация кода

22.05.2013, 22:20. Просмотров 729. Ответов 4
Метки нет (Все метки)

зачем GCC в начале функции main делает такую вставку: and esp,0xfffffff0
Assembler
1
2
3
4
5
6
7
8
9
10
push   ebp
mov    ebp,esp
and    esp,0xfffffff0
sub    esp,0x10
mov    DWORD PTR [esp+0xc],0x1
mov    DWORD PTR [esp+0xc],0x0
call   0x80482f0 <getchar@plt>
mov    eax,0x0
leave
ret
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2013, 22:20
Ответы с готовыми решениями:

Динамическая генерация кода
Добрый день. Наткнулся в нете на следующее: &quot;Функция BitBlt содержала...

переписать код в GCC Inline Assembly
Добрый день! cld lea di,buffer mov dx,01f0h ...

Вывод scan кода и ascii кода нажатой клавиши
Подскажите пожалуйста, как реализовать вывод scan кода и ascii кода нажатой...

GCC Inline Assembly перевести в Visual Studio Inline Assembler
Здравствуйте. Есть код на GCC Inline Assembly и его нужно перевести в Visual...

Генерация звука
Почему данная программа не воспроизводит звук? Частоты менял, и длительность -...

4
Vourhey
Почетный модератор
6493 / 2268 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
22.05.2013, 22:32 2
Выравнивание стека?
1
Troll_Face
603 / 403 / 8
Регистрация: 26.04.2012
Сообщений: 2,069
22.05.2013, 22:39  [ТС] 3
не вижу смысла его ровнять... Для чего?
0
Mikl___
Автор FAQ
11987 / 6254 / 596
Регистрация: 11.11.2010
Сообщений: 11,317
23.05.2013, 04:43 4
Troll_Face,
чтобы обращения к памяти шли быстрее, перепечатываю перевод статьи Агнера Фога
Все данные в RAM должны быть выравнены так, чтобы их адреса были кратны 2, 4, 8 или 16 согласно данной схеме:
выравнивание
размер операнда PPlain и PMMX PPro, PII и PIII
1 (byte) 1 1
2 (word) 2 2
4 (dword) 4 4
6 (fword) 4 8
8 (qword) 8 8
10 (tbyte) 8 16
16 (oword) n.a. 16
На PPlain и PMMX при обращении к невыравненным данным будет теряться по меньшей мере 3 такта, если пересечена граница в 4 байта. Потери будут выше при пересечении границы кэша.
На PPro, PII и PIII невыравненные данные будут стоить вам 6-12 дополнительных тактов, если пересечена граница кэша. Невыравненные операнды, меньшие чем 16 байтов и не перешедшие границу в 32 байта, не приводят к потерям.
Выравнивание данных на 8 или 16 в стеке двойных слов может стать проблемой. Общий метод решения - установить выравненный указатель на кадр стека. Функция с выравненными локальными данными может выглядеть примерно так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
_FuncWithAlign PROC NEAR
        PUSH    EBP                        ; пролог
        MOV     EBP, ESP
        AND     EBP, -8                    ; выравнивание указателя на кадр стека на 8
        FLD     DWORD PTR [ESP+8]          ; параметр функции
        SUB     ESP, LocalSpace + 4        ; резервируем локальные данные
        FSTP    QWORD PTR [EBP-LocalSpace] ; теперь сохраняем что-нибудь в
                                           ; локальной переменной
        ...
        ADD     ESP, LocalSpace + 4        ; эпилог, восстанавливаем ESP
        POP     EBP                        ; (потеря скорости AGI на PPlain/PMMX)
        RET
_FuncWithAlign ENDP
В то время как выравнивание данных важно всегда, выравнивание кода не является необходимым на PPlain и PMMX. Принципы выравнивания кода на PPro, PII и PIII изложены в главе 15.
1
Mikl___
Автор FAQ
11987 / 6254 / 596
Регистрация: 11.11.2010
Сообщений: 11,317
24.05.2013, 04:55 5
  • Статьи Агнера Фога по оптимизации
  • Переводы на русский язык части его статей
1
24.05.2013, 04:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2013, 04:55

Генерация звука
написать программу которая генерирует звук : должна проигрывать мелодию в виде...

GCC сгенерировал ассемблерный листинг программы. Не пойму, что делают некоторые его части
Здравия всем! Сгенерил листинг такого файла: int main(int argc, char**...

GCC Сборка 32 разрядной версии GCC 64 разрядным GCC
Доброго времени суток. Возникла необходимость под 32х разрядный Linux, собрать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru