ASM (типизация)

Тема в разделе "WASM.BEGINNERS", создана пользователем asmlamo, 23 фев 2021.

  1. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.729
    Вопрос конечно идиотский ..но все же.
    К языку с какой типизацией относится ASM ?
     
  2. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    988
    asmlamo, продолжите свой вопрос
    "К языку с какой типизацией относится ASM ? ХХХ или YYY ?"
    чувствуете, что он вне этого измерения? Можно, конечно, al ah в rax и eax типами обозвать и притянуть к типизированным языкам, но зачем? Он вне этой картины. Это же опкоды под мнемониками, какую хотите, такую типизацию и сделаете.
     
    Aiks нравится это.
  3. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.729
    это понятно ...
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    Ассемблер это бестиповый язык (кстати не только Ассемблер бестиповый), по этому к нему не относятся понятия типизации, такие как статическая или динамическая, слабая или сильная и прочее.
     
    Mikl___ нравится это.
  5. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.077
    тут всё зависит от того, что называть типизацией :) любой процессор имеет элементарные типы, коими оперирует == а-ля целые беззнаковые числа, целые знаковые, числа с плавающей запятой... в яп-ах из этих элементарных типов собирают более сложные типы а-ля строки, длинная арифметика итд-итп.
     
  6. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    У ассемблер слабая типизация, у регистров по сути её нет(eax = dword), в ячеек памяти ещё есть, и это всё, не очень хорошо.
    Надо бы усилить типизацию ассемблера, чтобы меньше ошибок делать. Поддержка указателей, массивов и многое другое, но только без фанатизма.
    Решения могут быть разные, новый ассемблер с нуля, доработка UASM или FASM. Тут мелькал RASM со своими идеями, там можно любою или почти любую команду макросом переопределить.
    Например, как преодолеть невозможность нормального использования символов !<>() в UASM. Я придумал добавить оператор FORTOK, как и FOR разбирает строку, только не на символы, а на токены, т.е. номера символов и номера переменных, которые затем могут обработаны специальными операторами.
    В общем, ассемблер, это - ЯП с частичной и слабой поддержкой типизации.
     
    R81... нравится это.
  7. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.954
    [​IMG]
     
  8. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    684
    синт прав, еще спросите какая типизация у хекс кодов на которых некоторые еще могут писать
     
  9. R81...

    R81... Active Member

    Публикаций:
    0
    Регистрация:
    1 фев 2020
    Сообщения:
    141
    А я поддержу Intro, но что ниже на строгость не претендует.
    Типы регистров: это примерно как типы ячеек кеша (динамические), чего заслал такой и тип, контроль когда в память регистр отсылаешь.
    И типизации операций возможны, но многое определяется железом.
    Пока микрокод подписывать вне разработчика не научатся.)
    Тогда пойдет речь о типизации микрокода.)
    Нужны динамические (хоть в каждом участке) условия проверок допустимости операций для различных типов переменных.
    От жесткости условий проверок будет зависеть как степень контроля за ошибками, так и сужение спектра приемов программ на ASM.
    Могут быть разные уровни сертификации кода - "что там можно, что нельзя".
     
  10. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    О чем разговор, я не понимаю, ассемблер - это язык железа, если вы хотите типизацию, то делайте свое железо, которое умеет в типизацию. Если вы делаете типизацию текущему ассемблеру, вы по сути придумываете новый яп, который низкоуровневый, да, но уже более высокий уровень абстракции, чем ассемблер. Есть же навороченные макросы в FASM, я думаю, что хоть какой то тайпчек можно на них реализовать.
     
  11. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Согласен. Предлагаю еще добавить в ассемблер ООП (обязательно на уровне С++23), лямбды и корутины. Все это давно есть в нормальных языках, не понимаю, почему тут тянут. Типизацию наоборот сделать динамическую, как в петоне.
     
  12. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    Надо, надо, это всё надо. Как раз нужен новый ЯП, занимающие промежуточное положение между С++ и ассемблером
    Код (ASM):
    1.  
    2. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    3. ;;  Quick sort      v1.01
    4. ;;  http://rosettacode.org/wiki/Sorting_algorithms/
    5. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    6. .386
    7. .model flat, stdcall
    8. option casemap:none
    9. include msvcrt.inc
    10. include macros.asm
    11. .code
    12. align_proc
    13. quicksort proc uses esi edi ebx pBegin:ptr sdword, pEnd:ptr sdword
    14.     ASSUME  edi:ptr sdword, esi:ptr sdword
    15.     mov     edi, pBegin     ;указатель на первый элемент массива
    16.     mov     esi, pEnd       ;указатель на последний элемент массива
    17.     .if (edi!=esi)
    18.         ;pivot = pBegin[(pEnd - pBegin + 1)/2];//ecx
    19.         lea     edx, [esi+1*4]
    20.         .for (edx-=edi, edx>>=3, ecx=[edi+edx*4]: : edi+=4, esi-=4)
    21.             .for (: sdword ptr [edi] < ecx: edi+=4)
    22.             .endfor
    23.             .for (: sdword ptr [esi] > ecx: esi-=4)
    24.             .endfor
    25.             .break .if (edi >= esi)
    26.             swap    [edi], [esi]
    27.         .endfor
    28.         quicksort(pBegin, &[edi-1*4])
    29.         quicksort(edi, pEnd)
    30.     .endif
    31.     ASSUME  edi:nothing, esi:nothing
    32.     ret
    33. quicksort endp
    34. createSpisok(spisok, sdword, 4, 65, 2, -31, 0, 99, 2, 83, 782, 1)
    35. main proc C argc:sdword, argv:ptr ptr, envp:ptr
    36.     printf("Quick sort.\n")
    37.     .for (esi = spisok.pFirst: esi <= spisok.pLast: esi+=4)
    38.         printf("%d ", dword ptr [esi])
    39.     .endfor
    40.     printf("\n")
    41.     quicksort(spisok.pFirst, spisok.pLast)
    42.     .for (esi = spisok.pFirst: esi <= spisok.pLast: esi+=4)
    43.         printf("%d ", dword ptr [esi])
    44.     .endfor
    45.     printf("\n")
    46.     xor     eax, eax
    47.     ret
    48. main endp
    49. main_startup3_END
    50.  
    Прикольный же код. А если добавить контроль типов, т.е. ASSUME edi:ptr moy_class. TypePtr(edi) возвращает moy_class в виде строки.
    И тогда шаблоное программирования резко облегчается, ещё бы таблицы добавить как в Lua.
     
  13. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    Сишечка же, не?
     
  14. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Rel, есть еще С-- (точнее, был).
    вот там как раз среднее между Си и Асмом.
     
  15. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    Я уже как то выкладывал сюда, но спецы тогда обмазали его гуаном: есть https://www.x-sharp.net/ - высокоуровневый ассемблер из проекта Cosmos (это типа бесполезная ось на C# написанная). Не знаю насчет статической типизации, но он явно выше уровнем обычного ассемблера.
     
  16. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    Кстати, оператор = не годится для как оператор "присваивания" в МАСМ подобном синтаксисе, надо использовать := как в паскале.
    С-- приказалдолгожить т.к. Си хотел слишком похожим на ассемблер. А надо наоборот, чтобы ассемблер стал похожим на С и С++.
     
  17. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    В общем асм разный бывает. Мой стиль к примеру это всегда указание сишных типов(eg Pstruct def ptr struct). Там от асма остаютcz в основном только регистры, а вот макросы я предпочитаю не использовать - делают сурец нечитабельным :)

    На чистом никаких типов нет, те которые есть они железячные.
     
    M0rg0t нравится это.
  18. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.077
    у скриптовых языков типизация обычно динамическая иль рантайм.