|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
31.01.2011, 05:17 | #1 | |||||
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Странное поведение BASM (использование неиспользуемых регистров компилятором)
Пытаюсь создать свой собственный объект. Объект очень простой. Под него только выделяется память и записывается в первые четвре байта класс. Не спрашивайте зачем. Просто, маюсь вигней, заодно тренеруюсь на basm'е. И вот че увидел и не могу понять.
Есть код: Код:
Цитата:
Цитата:
Но зачем Цитата:
А вот это вообще меня убило Цитата:
Пришлось сделать так Код:
Цитата:
Я asm совсем недавно начал изучать. В чем особеность такой компиляции. Ведь я ему уже дал готовый код на ассемблере. Зачем он его так, на мой взгляд не логично, исправил? Последний раз редактировалось Sibedir; 31.01.2011 в 09:06. |
|||||
31.01.2011, 07:17 | #2 | |||
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Цитата:
Код:
Цитата:
Код:
Цитата:
Код:
Да, и если хотите совсем уж всё держать под контролем, то функцию можно объявить так: Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 31.01.2011 в 07:22. |
|||
31.01.2011, 08:31 | #3 | |||
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Цитата:
Цитата:
Цитата:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|||
31.01.2011, 08:52 | #4 | |||||
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
С dword понял. Он ведь его не в регистр, а в пямять загоняет. Потому и не знает размер. Спасибо.
Остальное поведение компилятора остается за гранью моего понимания. Цитата:
Цитата:
Код:
Особо прошу обратить ваше внимание на тот факт, что edx в теле обсуждаемой процедуры никак не определено. Тоесть вообще никак. Код:
Цитата:
Цитата:
... И действительно, ни чего не поменялось (Delphi 7). Цитата:
Код:
Последний раз редактировалось Sibedir; 31.01.2011 в 08:56. |
|||||
31.01.2011, 10:03 | #5 | |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Цитата:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|
31.01.2011, 10:56 | #6 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Еще раз спасибо. Вкупаюсь потихоньку.
|
31.01.2011, 11:37 | #7 | |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Ну да, assembler; можно не указывать, старая привычка. Главное, начинать код с asm, а не begin.
Цитата:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
|
31.01.2011, 11:53 | #8 | ||
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Ага, ага. Я всё записываю.
Ну я, короче, понял уже. Во время begin компилятор решил, что result'ом будет edx. Я это благополучно проигнорировал и в итоге получил "странную" строчку. Слушайте, а зачем после ret Цитата:
Цитата:
Последний раз редактировалось Sibedir; 31.01.2011 в 11:57. |
||
31.01.2011, 12:02 | #9 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
да, это так называемый align, чтобы следующая после него команда следовала с нужного адреса (выравненого по двойному слову, например). два nop не так круто, вот создатели компиляторов и изголяются. Возможно, два nop как-то хуже влияют на предвыборку, чем одна команда mov, не знаю.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Странное поведение realloc | eraserhp | Общие вопросы C/C++ | 7 | 17.05.2010 09:52 |
Странное поведение realloc | eraserhp | Помощь студентам | 0 | 15.05.2010 18:06 |
Странное поведение gets | alex_alpha | Общие вопросы C/C++ | 3 | 27.03.2010 18:21 |
Странное поведение null | Vitalyk | JavaScript, Ajax | 6 | 13.02.2010 15:22 |