Помогите разобраться в программе

Тема в разделе "WASM.COMMERCE", создана пользователем Eugen, 2 ноя 2020.

  1. Eugen

    Eugen New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2020
    Сообщения:
    2
    Есть код программы написанный от руки. Меня попросили написать её на ассемблере(masm32). Я плохо разбираюсь в этом и не знаю, что нужно сделать чтобы она заработала.
     

    Вложения:

    • 2MtuyrVKhZw.jpg
      2MtuyrVKhZw.jpg
      Размер файла:
      740,3 КБ
      Просмотров:
      203
  2. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.710
    Eugen,
    цена вопроса?
     
  3. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    562
    Да там просто всё. Там просто функция, без основной программы, и вычисляет что-то с матрицей 3х3.
    Кстати, код низкоуровневый, если был как у меня высокоуровневый, то разобраться было легче.
    А код легче сразу Си перевести, наверно.
     
  4. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.956
    Так он и на бумажке написан на масме и требуется его на масме изложить, возможно исправив опечатки.
     
  5. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    562
    Там используется умножения матрицы 3х3 на 3д вектор. Но там же в инты используются, мне непонятно зачем это надо, с real4 и real8 понятно, sdword'ми непонятно. Где это используется?
    Nx = a11*X+a21*Y+a31*Z
    Ny = a12*X+a22*Y+a32*Z
    Nz = a13*X+a23*Y+a33*Z
    --- Сообщение объединено, 2 ноя 2020 ---
    Вот что получилось!
    Код (ASM):
    1.  
    2. Fvector3 struct
    3. x real4 ?
    4. y real4 ?
    5. z real4 ?
    6. Fvector3 ends
    7. Fmatrix33 struct
    8. i Fvector3 <>
    9. j Fvector3 <>
    10. k Fvector3 <>
    11. Fmatrix33 ends
    12. Fvector3@dotproduct MACRO res_float:req, vec1:req, vec2:req
    13. fld vec1.x
    14. fmul vec2.x
    15. fld vec1.y
    16. fmul vec2.y
    17. fadd
    18. fld vec1.z
    19. fmul vec2.z
    20. fadd
    21. fstp res_float
    22. EXITM <>
    23. ENDM
    24. ;Nx = a11*X+a21*Y+a31*Z
    25. ;Ny = a12*X+a22*Y+a32*Z
    26. ;Nz = a13*X+a23*Y+a33*Z
    27. Fmatrix33@mul_Fvector3 proc self_matrix:ptr Fmatrix33, vec:ptr Fvector3, vec_result:ptr Fvector3
    28. mov ecx, self_matrix
    29. mov edx, vec
    30. mov eax, vec_result
    31. ASSUME ecx:ptr Fmatrix33, edx:ptr Fvector3, eax:ptr Fvector3
    32. Fvector3@dotproduct([eax].x, [ecx].i, [edx])
    33. Fvector3@dotproduct([eax].y, [ecx].j, [edx])
    34. Fvector3@dotproduct([eax].z, [ecx].k, [edx])
    35. ASSUME ecx:nothing, edx:nothing, eax:nothing
    36. ret
    37. Fmatrix33@mul_Fvector3 endp
    38.  
    Только у меня флоаты а не инты, не понимаю, для чего в этом методе инты?!
    Хотя можно и инты, если они вам сильно нужны.
    ЗЫ
    Да, у меня такой стиль.
    --- Сообщение объединено, 2 ноя 2020 ---
    Чорт форматирования табами пропало!!!!!
     
    Ronin_ нравится это.
  6. Eugen

    Eugen New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2020
    Сообщения:
    2
    Спасибо за помощь, выручили.
     
  7. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Intro,

    Ктоже вручную то математику пишет, смотри скопировал 3 выражения и собрал пб, выхлоп.
    --- Сообщение объединено, 5 ноя 2020 ---
    Eugen,

    Скопируй уравнения, типы даже определять не нужно, добавь end и собери с опцией. На выходе будет асм сурец с математикой и коментами :rofl:
     

    Вложения:

    • PureBasic.asm
      Размер файла:
      3,1 КБ
      Просмотров:
      174
  8. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    562
    Там всё просто, мне проще сразу на асме написать.
    Да и Eugen, просто просил декомпилировать этот код.
    И ещё, я сейчас в основном на ассемблере программирую, UASM.