|
|
|
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
DarthTon |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 106 Регистрация: 7.2.2009 Репутация: нет Всего: 6 |
В х64 аргументы вызываемых функций не надо пихать на стек после их размещения в регистрах.
Т.е вызовы вида
следует заменить на
Ну и не следует забывать что перед вызовом апи функций стек должен быть выровнен на границу 16 байт, а так же иметь минимум 32 байта свободного пространства для сохранения значения регистров. |
||||
|
|||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Добавлено @ 11:56 А разе у меня он не выровнен? Вот только про 32 байта я не понял. Как это реализовать? Добавлено @ 11:58 А как есть работать будет? Не оптимальности пока пропускаем, интересуют ошибки. А то если я сейчас возщьмусь за тест, то не пойму, что именно меня не фурычит: ввод, вывод, или формат PE. Когда будет хоть какой то правильный ввод, хоть какой то правильный вывод, и хоть какая то правильная сборка файла, дальше у же попробую сам. Это всего лишь четвёртая моя проба клавы на асме, причём, первые две были для Z80. Они то работали, да камушек слишком другой. А на AMD64 я ничего своего, на асме писанного, не запускал. Добавлено @ 12:06 Например, с умножением я не накосяил? Вводить предполагается uint64_t. Это сообщение отредактировал(а) ТарасАтавин - 17.9.2013, 12:07 -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
DarthTon |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 106 Регистрация: 7.2.2009 Репутация: нет Всего: 6 |
Работать будет в принципе и так, просто обычно так код не пишут/генерят под х64. Насчет резервирования места на стеке - обычно компилятор анализирует функцию на предмет вызова из неё других функций, и в прологе резервирует место под наибольшее возможное количество аргументов вызываемой функции, а в эпилоге освобождает. Т.е если, например, вызывается 3 функции, которые принимают 3, 7 и 4 параметра, то в прологе будет sub rsp, 64. Это делается потому что в х64 не используется push/pop и стековый кадр для передачи параметров в функции, только прямая запись через указатель rsp.
По поводу выравнивания - по-умолчанию, конечно, всё выровнено, просто надо об этом помнить если происходят ручные манипуляции с rsp, чтобы избежать возможных падений в рантайме из-за этого. С умножением вроде всё нормально - разрядность операции определяется первым аргументом imul, а он 64 битный. |
|||
|
||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Про определение разрядности операции я в курсе. А куда помещается результат IMUL при такой разрядности? И В переходах я не не напутал? Кажется я забыл вернуть значение при успешном завершении и забыл один счётчик.
Это сообщение отредактировал(а) ТарасАтавин - 18.9.2013, 07:47 -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
GetStdHandle не обязана возвращать консоль
Добавлено через 5 минут и 8 секунд нет проверки на INVALID_HANDLE_VALUE тип HANDLE на х64 занимает все 64 бита, а возвращаемое значение берется как EAX (32 бита) -------------------- Обижено школьников: 8 |
|||
|
||||
ТарасАтавин |
|
||||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Добавлено через 11 минут и 12 секунд
Это сообщение отредактировал(а) ТарасАтавин - 18.9.2013, 20:06 -------------------- Не так всё плохо, как оно есть на самом деле. |
||||
|
|||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
чему-то другому (HANDLE)(-1) вроде бы -------------------- Обижено школьников: 8 |
|||
|
||||
Правила форума "Asm для Windows/DOS" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для Windows/Dos | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |