Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.196.184] |
|
Страницы: (3) 1 [2] 3 все ( Перейти к последнему сообщению ) |
Прикр. сообщ.
#1
,
|
|
|
Всем привет!
Тему создаю просто для отделения вопросов сабжа из темы "fasm синтаксис". Предыстория Цитата Jin X Вот захочу я свой асм создать (вернее, я уже хочу... начну, хотел сказать), а там такое будет! Тогда вообще непонятно станет, как дальше жать. |
Сообщ.
#16
,
|
|
|
Цитата Славян @ При том, что тоже есть жёсткая привязка к конкретным регистрам, а не к reg1, reg2, reg3. Откуда ты это взял??? Я полез смотреть макрос, не увидел такого. Или плохо смотрел ... Покажи где ты это увидел! Добавлено Вот это поворот! А разве есть Стандарт Ассебмблера? |
Сообщ.
#17
,
|
|
|
Учитывая вики, Джо:
Цитата вики.Язык ассемблера Я вполне не так мог понять название/значение темы. Очень прошу уточнить, а то действительно мы о разном можем говорить... В русском языке (Язык ассемблера) может именоваться просто «ассемблером» (типичны выражения типа «писать программу на ассемблере»), что, строго говоря, неверно, так как ассемблером именуется утилита трансляции программы с языка ассемблера в объектный код компьютера. |
Сообщ.
#18
,
|
|
|
Цитата Славян @ Очень прошу уточнить, а то действительно мы о разном можем говорить.. Да тут все просто. На 99% речь идет о расширениях функционала существующих компиляторов. В некотором случае это можно решать макросами, коими напичкан, fasm. А вот Jin X уверен, что при должных и возможных временных затратах можно сделать еще более удобный, более удобно расширяемый компилятор. Я специально спрашивал на счет синтаксиса fasm в соседней теме. Стандарта нет, но есть особенности и расширения. Мне это напоминает чем-то Forth, хотя ооче-очень немного. Там так же идет расширение путем определения собственного словаря. Чем не тутошнее расширение макросами? |
Сообщ.
#19
,
|
|
|
Тогда всё, закругляюсь. Чисто о само́м языке, думалось! Пардон.
|
Сообщ.
#20
,
|
|
|
С точки зрения оптимизации мой вариант лучше. Хотя современные процессоры такое сами умеют делать.
Да и C/C++ тоже оптимизируют "как надо": https://gcc.godbolt.org/z/dF9DoP Цитата Славян @ А макродвижок – это не часть ассемблера? К тому же, не я начал комментировать этот if Эх, опять! Тема не про макрокоманды, а про СВОЙ АССЕМБЛЕР! Плевать, что там можно насочинять в макросах, хоть "main={return 'Hello,world!';}", давайте обсудим же чистый свой асм! Ну так, и мы тоже обсуждаем тут новый лишь компилятор (и диалект), а не язык как таковой. Так, зачем новый асм нужен? Берём fasm или nasm и пишем ассемблерные инструкции сплошняком! А заголовки через db – чище не придумаешь! Цитата JoeUser @ На самом деле не только в расширениях дело (но и в них тоже), но и в ядре компилятора, который макросами не изменишь.А вот Jin X уверен, что при должных и возможных временных затратах можно сделать еще более удобный, более удобно расширяемый компилятор. К примеру, что мне не нравится в fasm: 1. Блоки if не работают с include или equ внутри них. Оказалось, что препроцессор fasm делает несколько проходов: сначала создаёт символьные литералы fix, затем equ и обрабатывает include, а затем уже компилирует и там же проверяет if'ы. Т.е. include сработает в любом случае, вне зависимости от условия в if. Это, конечно, решаемо через match, но это треш, неудобно и создаёт свои сложности, ИМХО. 2. Макросы не могут возвращать значения. 3. Слишком много всего прописано макросами, что вызывает проблемы (скажем, чтобы подключить библиотеку, который нет в стандартных win32ax.inc и т.п., нужно городить огород либо переписывать макросы library и import). Можно, конечно, переписать все макросы и распространять их отдельно, но нужно ли? 4. Нельзя переключать секции туда-сюда. Скажем, написать .code ... .data ... .code ... .data нельзя. Вернее, можно, но у нас тогда будет 4 секции, а не 2. 5. Нельзя через if различить некоторые типы символьных литералов (скажем, число и метку, в т.ч. несуществующую). 6. Отсутствие работы с floating-point в макросах (т.е. даже dq 3.1415927/4 написать нельзя). и т.д... И так можно про каждый асм написать. Цитата Славян @ Да, это не очень правильно, но здесь под ассемблером понимается именно отдельный диалект.В русском языке (Язык ассемблера) может именоваться просто «ассемблером», что, строго говоря, неверно, так как ассемблером именуется утилита трансляции программы с языка ассемблера в объектный код компьютера. Цитата Славян @ Что именно подумалось? Что мы сейчас новые инструкции ассемблера изобретать будем? Чисто о само́м языке, думалось! Пардон. |
Сообщ.
#21
,
|
|
|
Цитата Jin X Нет, конечно. Подумалось, что вы предложете новое наименование/обозначение машинным командам=инструкциям (что, собственно, я и начал, написав 'ax=bx'). Что именно подумалось? Что мы сейчас новые инструкции ассемблера изобретать будем? |
Сообщ.
#22
,
|
|
|
Славян, новые названия смысла придумывать нет, потому что все уже привыкли, а вот новые способы написание кода – возможно. Но повторюсь, что это должен быть отдельный суб-язык, ИМХО, чтобы труЪ-ассемблерщики не обплевались.
Тогда можно и ax=bx, и ax++, и bx-=cx+cf, и eax+=edx*4+0x1000 и всё прочее делать. И даже конструкции, которые преобразуются в несколько инструкций (типа ax=bx+cx и т.п.). Есть же, HighLevel-ассемблеры, правда, мало кто ими пользуется... По идее, можно обозначить регистры, которые можно использовать для промежуточных вычислений (предварительно директивой, либо, например, так: eax=var*7+[ecx]*(ebx++) #edx,ecx), и тогда много чего можно сделать. |
Сообщ.
#23
,
|
|
|
Мне просто вот что подумалось, Jin X: Си-шники стали писать свои программы и увидели, что им часто неплохо было бы и вектора складывать/умножать и матрицы, и т.д. И увидели, что обычная научная запись в языке Си вроде как имеется: v = p + q, A = B*C; Но оказалось, что делать таковое со сложными объектами нельзя, язык не позволяет. Вот и пришлось создать над-язык Си++.
Мораль: если бы был естественный язык ассемблера, кой не шаблонные (команда, арг1, арг2) строки бы писал, а понятные простому обывателю (eax=ebx+ecx <-> lea eax, [ebx+ecx]), то создатели процессорных команд AMD/Intel/... глазами бы увидели, что народу надо! А не городили бы малополезные современные добавки "сложим группу из 4 чисел с другой такой группой". Посему думается, что САМ начальный язык тоже очень и очень важен. |
Сообщ.
#24
,
|
|
|
Цитата Славян @ Я думаю, что они прекрасно знают, что нужно людям, а не от балды придумывают, что в голову взбрело. Там помимо "сложим группу из 4 чисел с другой такой группой" есть операции и посерьёзнее, в т.ч. скалярное произведение векторов, поиск минимумов-максимумов, умножение-сложение, обратный квадратный корень, даже работа со строками (через SSE/AVX). А также кодирование AES, расчёт SHA, CRC, работа с полями Галуа, генерация случайных чисел, инструкции для более удобной работы с длинными числами, разные битовые операции. И многое другое. Даже чтение из нескольких разных адресов или запись в несколько разных адресов (одной операцией).создатели процессорных команд AMD/Intel/... глазами бы увидели, что народу надо! А не городили бы малополезные современные добавки "сложим группу из 4 чисел с другой такой группой". Там не менее умные люди сидят, чем мы. |
Сообщ.
#25
,
|
|
|
К примеру, вот приведение 16 строчных букв к заглавным (остальные символы остаются без изменений) с использованием SSE2:
; Блок инициализации (выполняется 1 раз): mov eax,(127-'z')*01010101h movd xmm2,eax ; mov eax value to lower dword of xmm2 mov eax,(127-26)*01010101h movd xmm3,eax ; mov eax value to lower dword of xmm3 mov eax,20202020h movd xmm4,eax ; mov eax value to lower dword of xmm4 pshufd xmm2,xmm2,0 ; fill entire xmm2 register by lower dword value pshufd xmm3,xmm3,0 ; fill entire xmm3 register by lower dword value pshufd xmm4,xmm4,0 ; fill entire xmm4 register by lower dword value ; Преобразование содержимого XMM0, результат будет также в XMM0: movdqa xmm1,xmm0 ; temp register paddb xmm1,xmm2 ; shift each byte with lower case letter to high signed short int values pcmpgtb xmm1,xmm3 ; compare each byte with high 26 signed values and store 0xFF (if in range) pand xmm1,xmm4 ; mask with 20h (difference between upper and lower case) psubb xmm0,xmm1 ; convert each byte to upper case |
Сообщ.
#26
,
|
|
|
Эх, Jin X, не это народу надо, не это!
Вот откопал у себя файл 2009 года с командами-хотелками: 1.FROOT ; FROOTS ; CROOTS, FINDROOTS, FSQRTS, FINDSQRTS, SSQRTS=Search SQuare RooTS ;без аргументов !? Вход:ESI(RSI) - адрес коэффициентов (комплексных?) EDI(RDI) - адрес места, куда класть корни (или же первый=один=какой-то класть в ST(0), ST(1)-мнимая часть?) CL = степень многочлена Выход:EDI(RDI) - корни (или же первый=один=какой-то класть в ST(0), ST(1)-мнимая часть?) Флаги: ZF=1,если нет корней(как это?), OF=1,если они не влезли Проблемы: а) Старший коэф.=0. Возмож_решения: а) Считать старший=1 (но нежелательно...) 2.RAND ;без аргументов !? Вход:ничего Выход:случайное целое число в EAX(RAX), равномерно распределённое Замечание: надо бы и плавающее (в диапазоне [ST,ST(1)] или [0,1] ? )=FRAND 3.FGAMMA Вход: fword/qword ptr - число x (x!= 0; -1; -2; ...) Выход: значение гамма-функции или же FACTOR Вход: fword/qword ptr - число x (x!= -1; -2; ...) Выход: значение факториала 4.FRSPHERE - радиус описанной окружности + центр оной Вход: 6 чисел в ST(0-5) = {x1,y1,...,x3,y3} - 3 точки треугольника Выход: ST(0)-радиус окружности, ST(1-2) - центр её Замечание: а) 3 точки на прямой лежат => радиус = +бесконечности(+∞), центр в бесконечности(∞) б) всё можно сдвинуть, чтобы одна из точек была нулём, а тогда надо задавать 4 значения (2 точки). |
Сообщ.
#27
,
|
|
|
Славян, какому народу это надо? Это надо не народу, а одному конкретному человеку
1,3,4 - довольно узкие задачи, коих тысячи (FROOTS – решение квадратных уравнений или что?) Часто ли в производстве видео, 3D-графике, DSP, сведении звука, распознавании и синтезе речи, задачах искусственного интеллекта и т.п. используются квадратные уравнения? В чём проблема реализовать это самому? Я бы тоже хотел что-то, скажем, SIMD-деление целых чисел, SIMD-синусы и логарифмы, работу со 128 и 256-битными целыми (почему нельзя рассмотреть YMM как одно целое число и умножить его на другое?) А ещё я хочу, чтобы был пользовательский флаг, который не менялся бы в результате арифметических операций (скажем, UF), а менялся бы через CLU, DTU, CMU и были соответственно JU, JNZ. И т.д. И мне тоже кажется странным, что такого не сделали. Тем более, user flag, как мне сказали, есть в некоторых даже 8-битных процессорах. Но это мои личные хотелки. FROOTS мне нафиг не нужен. И если мы опросим ещё 100 человек, у каждого будут свои пожелания. |
Сообщ.
#28
,
|
|
|
Цитата Jin X Шире: корни многочлена n-ой степени (я ж написал, что CL-степень многочлена).FROOTS – решение квадратных уравнений или что? Ещё б какую-то: REVERS (ESI-строка, CX-длина) - реверс строки. Цитата Jin X Это стандартная отговорка. Вот только людей очень много, а желаний - не очень. И так бы люди вместе выявили, что им действительно НАДО.И если мы опросим ещё 100 человек, у каждого будут свои пожелания. FGAMMA - узкая, но когда я 12 лет назад попросил разработчиков NDN (Necro... Dos Navigator) добавить её в калькулятор, то добавили! Цитата whatsnew.txt Так что, теперь, писать и в AMD/Intel, чтобы добавили??? CALCULATOR Gamma-function - is the function, so that G(n+1) = n! But it determine with real x, but not integer !!! |
Сообщ.
#29
,
|
|
|
Не думаю, что желаний будет мало, если создать отдельную тему об этом.
Цитата Славян @ Так что, теперь, писать и в AMD/Intel, чтобы добавили??? Можно и написать. Если будет толк, буду только рад REVERS – тоже узкая операция. Может, тогда и INT2STR, STR2INT? А вот я хочу MOVSBW – читаем байт, пишем слово (старший байт сохраняем постоянным) И соответственно MOVSWD/MOVSDQ... |
Сообщ.
#30
,
|
|
|
Цитата Jin X @ Можно попробовать. Только очень хочется, чтобы по существу писали, а не очередной холивар случился, как это часто тут у нас бывает. Хотя ассемблерщиков здесь маловато, кажись...Не думаю, что желаний будет мало, если создать отдельную тему об этом. Цитата Jin X @ Увы, но толк может выйти лет чрез 5, думается. Что великовато для столь скромных желаний. Да и я не стану писать, - вот если б кто статусом повыше... Или же в change.org опять??? Можно и написать. Если будет толк, буду только рад Цитата Jin X @ Согласен. Просто сразу на ум пришло.REVERS – тоже узкая операция. Цитата Jin X @ Неплохо! В AL-система счисления, CL-длина строки? Или так:Может, тогда и INT2STR, STR2INT? INT2STR [адрес], reg=число, reg8=сист. счисления STR2INT reg=число, [адрес], reg8=сист. счисления ;до 0 в строке или докуда идёт считывание? |