CPUID

Тема в разделе "WASM.BEGINNERS", создана пользователем Shoorup, 8 сен 2008.

  1. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Для процессора никакой разницы. Но компилятор "для твоей же пользы" осуществляет контроль типов и разрешает писать 32-битные регистры только в переменные dd и чтобы его "уговорить" записать их в db нужно явно указать dword ptr, т.е. сделать приведение типа переменной как в языках высокого уровня
     
  2. Shoorup

    Shoorup Member

    Публикаций:
    0
    Регистрация:
    20 сен 2007
    Сообщения:
    109
    До "жирафа" дошло:) Спасибо за разъяснения!
     
  3. Shoorup

    Shoorup Member

    Публикаций:
    0
    Регистрация:
    20 сен 2007
    Сообщения:
    109
    Как мне вывести содержимое регистра в месбокс? Во втором посте есть мини дебугер но я чего-то не догоняю как там работает. Может есть более простой способ ну или более догоняемый?
     
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    Shoorup
    Связка wsprintf + MessageBoxA -- строка форматирования в wsprintf позоляет получить из числа в регистре строку (dec, hex) в буфере, указатель на буфер передается в MessageBox. Если число меньше 10 можно просто добавить "0", если число меньше 100 -- загоняешь его в eax, используешь aam и or ax,3030h
     
  5. Shoorup

    Shoorup Member

    Публикаций:
    0
    Регистрация:
    20 сен 2007
    Сообщения:
    109
    А можно ли как по другому, не через wsprintf?
    Например через xlat?
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    Shoorup
    Для преобразования числа в hex-символ? Псевдо код XLAT -- LEA AL,[BX+AL] причем число в AL от 0 до 255 или от -128 до +127 а представляемый символ тоже влазит в 8 бит, то есть через XLAT можно получить только один символ. А что тебя в MiniDebug не устроило, не стесняйся, спрашивай
     
  7. Shoorup

    Shoorup Member

    Публикаций:
    0
    Регистрация:
    20 сен 2007
    Сообщения:
    109
    В MiniDebug отлично демонстрируется как вывести регистры. Просто не очень догоняю как работает wsprintf. Например что это %08lXh? А именно для чего 08l ? С XLAT можно попробовать снести все содержимое в память а потом по байту выгонять и XLATом заменять... но это возможно бред.
     
  8. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Shoorup
    http://msdn.microsoft.com/en-us/library/ms647550(VS.85).aspx
     
  9. Shoorup

    Shoorup Member

    Публикаций:
    0
    Регистрация:
    20 сен 2007
    Сообщения:
    109
    На самом деле чем больше пытаюсь разобраться тем с большими трудностями сталкиваюсь... но тем и интересней!
    Пока маленькая цель сделать утилитку CPUID. Думаю сделав ее полностью научусь работать с асмом хоть немного. Сам себе придумываю задачи и пытаюсь их решить. Найденый код не копирую а пытаюсь разобраться как он работает, чтото свое добавляю. Нашел тут на форуме хорошую фразу: "Преждевременная оптимизация злейший враг". Напишу прогу не с очень красивой стороны, потом возьмусь оптимизировать. А вообще программировать на низком уровне очень интересно. Благо учителей нашел на форуме много! Я б один долго бы топтался на месте.
     
  10. Shoorup

    Shoorup Member

    Публикаций:
    0
    Регистрация:
    20 сен 2007
    Сообщения:
    109
    Вот тутhttp://bitfry.narod.ru/11.htm нашел отличное описание к функции wsprintf для чайников как я:)