Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
semiono
12 / 12 / 0
Регистрация: 14.09.2010
Сообщений: 287
Записей в блоге: 6
1

Какие регистры для счётчика можно использовать и почему?

20.02.2014, 21:44. Просмотров 1112. Ответов 4
Метки нет (Все метки)

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
include '%fasm%/win64ax.inc'
section '.code' executable
start:
        sub rsp,8
 
        invoke RegOpenKeyEx,HKEY_CURRENT_USER,'Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\Volume',NULL,0x000f003f,[h]
 
        xor edx,edx
@@:
        invoke RegEnumKey,[h],edx,a,[b]
        invoke MessageBoxTimeout,HWND_DESKTOP,a,'',MB_TOPMOST,LANG_NEUTRAL,5000
        inc edx
        cmp edx,10
        je exit
        jmp @r
Почему рекурсия? Что не так

Добавлено через 2 минуты
опа! поменял на ebx и получилось 0_0
а какие регистры для счётчика можно тут юзать и почему?

Добавлено через 1 минуту
из того что msdn возвращается в eax я усвоил хоршо, но дальше непонятно
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2014, 21:44
Ответы с готовыми решениями:

Какие регистры есть в ассемблере
Народ самый глупый вопрос)) только начинаю программировать на ассемблере, сейчас пишу программу,...

16-разрядный процессор. Какие регистры?
Доброго времени суток, форумчане! К сожалению, у меня не получилось найти внятных ответов на...

Какие символы можно использовать для рисования в консоли?
Есть ли это под linux (элементы рамок, стрелки, символы-рисунки и тому подобное)? И коды,...

Какие паттерны можно использовать для совершенствования приложения
Доброго времени суток! У меня есть приложение реализованное на Qt C++ - тестирование студентов....

Какие средства для анализа ошибок можно использовать
Пишу приложение. На виртуальном устройстве работает. На смартфоне - работает. Поставил на планшет -...

4
Mikl___
Автор FAQ
13381 / 6381 / 630
Регистрация: 11.11.2010
Сообщений: 11,542
21.02.2014, 04:53 2
semiono,
первый урок Iczelion'a "Win32 API. Урок 1. Основы"
Когда вы программируете под Win32, вы должны помнить несколько важных правил.
Одно из таких правил то, что Windows использует esi, edi, ebр и ebx внутренне и не ожидает, что значение в этих регистрах меняются. Так что помните это правило: если вы используете какой-либо из этих четырех регистров в вызываемой функции, не забудьте восстановить их перед возвращением управления Windows.
Любая из WinAPI функций в праве изменять значения в EAX, ECX, EDX, а вот значения в регистрах EBX, EBP, EDI, ESI, ESP после вызова WinAPI функций остаются неизменными
1
Полный 30h
Эксперт быдлокодинга
1822 / 447 / 61
Регистрация: 04.11.2010
Сообщений: 1,226
21.02.2014, 07:37 3
Цитата Сообщение от semiono Посмотреть сообщение
а какие регистры для счётчика можно тут юзать и почему?
"фирменный" для счёта регистр это ECX (RCX), под него команда loop даже имеется, но это удобно при "чистом коде" как только попадается функция то пиши пропало. А чтобы не пропало пользуйся push ECX(RCX) до функции и pop ECX(RCX) после функции. Тем более на последнем пленуме ВЦСПС по программированию в 64 битах вышло постановление использовать для передачи первых четырёх параметров функции регистры (rcx, rdx, r8, r9) и только если параметров больше 4х - стек. Или вовсе засунь счётчик в переменную

mov [count],10

а потом в цикле минусуй
dec [count] ; минус один
jnz @r ; если не ноль повтор
Правда за счётчик в памяти адепты запросто могут с гавном съесть. Но ты ведь меня не выдашь, правда?

Mikl___, как эксперт эксперту.

Цитата Сообщение от semiono Посмотреть сообщение
include '%fasm%/win64ax.inc'
В 64-битовых Windows принята следующая конвенция вызова функций (в том числе вызов функций API).
1. Первые четыре параметра передаются в функцию через регистры: rcx, rdx, r8, r9. Остальные параметры (если они есть) передаются через стек.
2. Перед вызовом функции резервируется область в стеке, на случай, если вызываемая функция "захочет" временно сохранить параметры в стеке. Таким образом, параметры, которые передаются через стек, помещаются туда после резервируемой области.
3. При передаче параметров, размер которых меньше 64 бит, передаются как 64-битовые параметры. При этом следует обнулить старшие биты. Параметры, большие 64-бит передаются по ссылке.
4. Данные возвращаются через регистр rax. Если возвращаемое значение имеет размер больший 64 бит, то данное передается через область памяти, адрес которой передается в первом параметре. Для возвращения может также использоваться регистр xmm0.
5. Все регистры при вызове функций сохраняются за исключением rax, rcx, rdx, r8, r9, r10, r11, сохранность которых не гарантируется.
6. Граница стека должна быть выровнена по адресу кратному 16.
А.П. Чехов В.Ю. Пирогов
Не моё дело учить гуру, но пять утра и ассемблер вещи не шибко совместимые.
2
Mikl___
Автор FAQ
13381 / 6381 / 630
Регистрация: 11.11.2010
Сообщений: 11,542
21.02.2014, 07:46 4
Полный 30h,
за
Код
include '%fasm%/win64ax.inc'
спасибо, проглядел, но традиционно Win64API-функции регистры EBX/RBX, EBP/RBP, EDI/RDI, ESI/RSI, ESP/RSP не изменяют, и у меня давно не пять утра, а скорее рабочий полдень, страна-то у нас в 9 часовых поясах
0
Полный 30h
Эксперт быдлокодинга
1822 / 447 / 61
Регистрация: 04.11.2010
Сообщений: 1,226
21.02.2014, 08:03 5
Цитата Сообщение от Mikl___ Посмотреть сообщение
но традиционно Win64API-функции регистры EBX/RBX, EBP/RBP, EDI/RDI, ESI/RSI, ESP/RSP
Давно разуверился в программистах создающих API функции как в последовательных, педантичных людях. И руководствуясь по этому поводу постулатом незабвенного Винни Пуха всегда предварительно проверяю сохранность интересующих меня на данный момент регистров.
1
21.02.2014, 08:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2014, 08:03

Какие команды можно использовать для пошаговой отладки программы
Подскажите, пожалуйста, какие команды можно использовать для отладки программы, к примеру, для...

Какие методы можно использовать для решения данной математической модели?
Какие методы можно использовать для решения данной математической модели?И как правильно это...

Какие инструменты можно использовать для организации работы пользователя с кучей?
В универе дали следующее задание: Организовать в программе работу с пользовательской кучей. В...


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

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

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