Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > CPU Serial


Автор: drkot 10.12.2012, 02:34
Делаю так, собственно по аналогии с x32
Код

   PUSH    RBX
   PUSH    RDI
   MOV     EDI,EAX
   MOV     EAX,1
   DW      $A20F
->   STOSD
   MOV     EAX,EBX
   STOSD
   MOV     EAX,ECX
   STOSD
   MOV     EAX,EDX
   STOSD
   POP     RDI
   POP     RBX

затык возникает на STOSD
насколько понимаю сохранение идет кудато не туда.
Если не сложно подскажите в чем тупость с моей стороны.

Автор: drkot 12.12.2012, 02:03
может я не в тот форум написал?

Автор: tzirechnoy 13.12.2012, 19:59
Цитата
MOV     EDI,EAX


А почему EDI-то в 64-бит режыме?

Автор: 500mhz 13.12.2012, 22:43
WMI->Win32_Processor class

а вообще вот http://www.wasm.ru/article.php?article=hardzen

Автор: drkot 26.12.2012, 01:20
Цитата(tzirechnoy @  13.12.2012,  19:59 Найти цитируемый пост)
А почему EDI-то в 64-бит режыме?

достаточно разрядности для передачи данных

Добавлено @ 01:23
Цитата(500mhz @  13.12.2012,  22:43 Найти цитируемый пост)
а вообще вот http://www.wasm.ru/article.php?article=hardzen

возможно я чего-то недосмотрел, но касательно сабжа информации не нашел

Автор: tzirechnoy 26.12.2012, 20:49
Цитата
достаточно разрядности для передачи данных


А если головой подумать?

Автор: drkot 27.12.2012, 23:41
Цитата(tzirechnoy @  26.12.2012,  20:49 Найти цитируемый пост)
А если головой подумать?

если подумать, ошибка на STOSD (и думаю для х64 должна быть другаю команда)
а (MOV     RDI,RAX) ситуацию никак не улучшает, хотя это правильное замечание.

Добавлено через 14 минут и 22 секунды
думаю что проблема со стеком, точнее с правильностью его адресации

Автор: drkot 28.12.2012, 02:12
Спасибо всем знатокам  smile 

Проблема всеголишь в впецифике перередачи адреса на блок данных
так х32 компилятор передает адрес в EAX, а х64 RDX

Всем спасибо.

Добавлено через 52 секунды
но тупил долго, прежде чем начал думать

Автор: drkot 28.12.2012, 03:10
Главное, что надо знать о соглашении по вызовам на платформе x64, - оно похоже на x86-соглашение fastcall. В x64-соглашении первые четыре целочисленных аргумента (слева направо) передаются в 64-битных регистрах, предназначенных специально для этой цели:
RCX: 1-й целочисленный аргумент
RDX: 2-й целочисленный аргумент
R8: 3-й целочисленный аргумент
R9: 4-й целочисленный аргумент

Автор: Sectoid 4.4.2016, 01:34
Зачем EAX затираешь ?

Добавлено через 38 секунд
Изврат ...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)