· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› ООП и асм

<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 14 . 15 . >>

Посл.отвђт Сообщенiе


Дата: Мар 29, 2004 12:19:38 · Поправил: S_T_A_S_

[]


Дата: Мар 29, 2004 13:20:15

masquer,
Правильный топик ON, муть OFF.
Во первых, метод Монтгомери использывал Половников, у меня свой метод :) Но подход схожий. Обнаружена модульная зависимость разрядных частей при делении умножении и найдена функция определения этой зависимости для конечных участков.
Во вторых это для констант годится.
Замаешься это динамически делать с делителем произвольной длины и содержания.
В третьих никак не поможет с длинным делителем.

В четвёртых сам отвечай :))

Вот у тебя делитель в скажем 4*800*8 бит. 800 двойных слов.
И делимое в мегабайт двойных слов.
Что будем делать?
Подробное объяснение и арифметические выкладки для тупых
в OПП Свинах приветсвуются.

Вообще прикольно это ОПП для низкого уровня.
Это типа что, то
MyInstruction.modrm.codrfield==110
Так что-ли?


Дата: Мар 29, 2004 14:10:15

The Svin
В четвёртых сам отвечай :))
Тяжело мне самому отвечать :) Я серьезно все это не смотрел, была задача, но потом обошлось без этого - так, в памяти осталось чуть-чуть :)
С ходу не скажу по теме, но подумаю (я иногда жалею, что вышку прогуливал :)).
Надо бы исходники Miracl еще глянуть - межет там чего есть...
Может, лучше отдельную тему завести?

то типа что, то MyInstruction.modrm.codrfield==110
Ага, это уже будет ООП - ниже некуда :)


Дата: Мар 29, 2004 14:28:22 · Поправил: The Svin

Может, лучше отдельную тему завести?
Дык, я думал товарищ с ОППой раскажет как нам ОППа в этом поможет?
Особено интересно как ОППа будет защищать мой код от меня самого работая с объектом длинный делитель нефиксированного размера.


Дата: Мар 29, 2004 15:17:05

The Svin
Особено интересно как ОППа будет защищать мой код от меня самого работая с объектом длинный делитель нефиксированного размера.

Вот это я не знаю :(

А вот это я уже начал понимать:
mov	eax, [foo]
call	foo_proc
.....
mov	eax, [foo+4]
call	foo_proc2
.....
mov	eax, [foo+8]
call	foo_proc2


И:

mov	ebx, offset foo
mov	eax, [ebx]
call	[ebx+proc]
.....
mov	eax, [ebx+4]
call	[ebx+proc2]
.....
mov	eax, [ebx+8]
call	[ebx+proc2] 

Т.е. в каких-то случаях вполне оправдано просто собрать некоторые DWORDы в одно место и экономить память на опкодах-операциях с ними. Вот и все.


Дата: Мар 29, 2004 16:11:10

Дык таблицы указателей на функции.
Это что как то за ОПП кто-то пытается закрепить :)
Тогда таблица векторов прерываний тоже ОПП :))


Дата: Мар 29, 2004 16:15:00

The Svin

Это типа что, то
MyInstruction.modrm.codrfield==110
Так что-ли?


Во-во, вы угадали: в ia-64 есть эта гребаная ооп-нотация, например:
br.ret.sptk.many r5
- значит "бранч типа ret, независимо от предсказания загрузить инструкции в кэш, причем много":))


Дата: Мар 29, 2004 16:16:42

Valery
:))))))


Дата: Мар 29, 2004 20:28:02

Вообще прикольно это ОПП для низкого уровня.
Это типа что, то
MyInstruction.modrm.codrfield==110
Так что-ли?


Забавно, Свин. А поумней что-то выбрать можно было? Давайте я словами бацнутый примерчик приведу. Немного, прадва, поумнее вашего будет. Просто так. Итак, есть строка. А есть функция, которая парсит строку в поисках, ну, чего-нибудь. Плевать чего. Строка может быть юникодовской - ага, UTF-16, два байта на символ. Строка может быть юникодовской UTF-8 - ага, уже один. Строка может быть ASCII (стандартная ISO-1251) - еще один случай. Строка, опять-таки, может быть ASCII, но уже в KOI-8 или в чем-нибудь еще. Теперь как можно поступить. Для того, что вы называете "ОПП" подход будет одним, для того, что вы назвыаете "структурным прогарммированием", подход будет другой. В структурном программировании у меня есть только один выход - написать кучу процедур, с разными названиями для обработки каждого случая (ну, или одну процедуру, очень умную, которая сама будет детектить тип строки и обрабатывает ее соответственно - для данного случая это достаточно просто, только и пример-то ведь детский). А для ООП подход может быть и другим. Вариант - перегрузка функции. Вариант - костяк в виде виртуальной фунции, которая переопределяется в классах-потомках. Причем последний вариант невероятно удобен. Я знаю общую концепцию, я понимаю главный принцип, а детали реализации определены в соответствующих методах.
Простите, наверняка я говорю очевидные вещи, но, Свин, ей богу, если все ваше понимание об ООП заключается в MyInstruction.modrm.codrfield, то грош такому представлению цена, если честно. Мы же говорим об альтернативной концепции, ином мышлении (заметьте, я не говорю "новом", я говорю "ином"), которое предполагает другой стиль программирования и, как любят говорить мои англоязычные друзья, very well scalable.


Дата: Мар 29, 2004 23:28:46 · Поправил: The Svin

Удалил всё нафиг. Так вот.
:))


Дата: Мар 29, 2004 23:58:19

Вух. Я ждал какого-то подобного ответа :)
Свин, многое из того, что вы сказали - это правда. Только я бы хотел задать вопрос. Цитируя вас же:

потом глядишь - эти же люди начинают радостно вопить - ура я нашёл способ чтобы писать не
push 0
call ExitProcess
а ExitProcess(0)
с помощью макросов
Правда?! Быть не может! Ураа!


Теперь вопрос. А для чего же человеку хочется видеть макрос? Просто так? Или, быть может, его заколбасило писать по хххх строк кода для того, что уже было написано?

Я сам к макросам отношусь очень негативно. Я не люблю их и не высоких языках, ни, тем более, в асме. Труп страуса говорил, что использование макроса подтверждает дефект языка. Я не готов пока спорить на таком концептуальном уровне, но, в глубине души, без особой зубодробительной документации, я с ним согласен. Макрос - это бяка.

Но, Свин, возвращаясь к нашим баранам. Ясный пень, в асме не мне с вами равняться. Но даже мне хотелось как-то бы написать программу быстрее, немного проще. Упаси господи, не используя макросов, гадость это, а как бы так-нибудь, ну, побыстрее, короче!

Ну и отвечу на один из выпадов:

"Костяк виртуальной функции" - это что такое в мире
низкого уровня


Указатель на некоторую область памяти, содержащую указатели на функции либо оффсеты на данные. Чаще всего виртуальная функция преобразуется в нечто в виде call [reg+xx]

со своим внутренним сложным форматом, который описать с помощью ОПП забодаешься

И опять двадцать пять. Да растуды вас в качель с вашим опкодом, мать его за ногу и через забор.
ОК, вы писали СУБД. Рад за вас. Флаг в... и ветра в... Попутного.
Есть задачи, требующие ООП, есть - нет. ООП - это образ мышления, а не конкретные столь любимые вами байтики и битики.

Моё крестьянское мнение - низкий уровень для снятия абстраций, как ты только вводишь абстрацию - он скрывается. То что при этом будет использоваться ассемблерный транслятор - сути не меняет

Что ж. Возможно. Хотелось бы услышать еще пару аргументов. Я не слишком тверд пока в своих убеждениях. Я только против того, чтобы ООП вытягивали на макросах - это уебище будет в прямом смысле этого слова. Но о чем говорит сама тенденция писать макросы, а?


Дата: Мар 29, 2004 23:59:18

Удалил всё нафиг. Так вот.

Ну и зря.


Дата: Мар 30, 2004 00:27:14

Макросы, конечно, неплохо иметь для ускорения написания кода. Но делать ООП с помощью макросов - это, наверное, излишне... А что, моя идея скриптового Ассемблера никого не задевает? А что там не так? Какие есть неудобства?


Дата: Мар 30, 2004 01:56:32

JaDS && volodya
Судя по вашему задору, у вас есть конкретные идеи по сабжу?
Почему бы тогда не озвучить их, чтобы услышали все
присутствующие в этой студии?
Прототип синтаксиса такого языка? Еще что-то?


Дата: Мар 30, 2004 04:29:04

All
Зачем создавать новый ассемблер, писать макросы для "расширения" возможностей асмов уже существующих и т.д. и т.п. ?! IMHO, если человеку лень ввести с клавиатуры лишний мнемоник (push 0), ему ассемблер не нужен. А ООП можно реализовать и на чистом асме (без макросов, но со структурами :-) Я описываю класс на масме примерно так:
; Class:
; ------
; Generic - abstract class on top of the whole hierarchy
Generic STRUCT
 ; Pointer to methods
 methods        dd ?
 ; Attributes
 X0             dd ?
 Y0             dd ?
 dWidth         dd ?
 dHeight        dd ?
Generic ENDS

; Generic methods
Generic_tbl STRUCT
 destroy_ptr    dd ? ; destructor
 draw_ptr       dd ?
 hittest_ptr    dd ?
 save_ptr       dd ?
Generic_tbl ENDS
Generic_destroy PROTO ptr_this:DWORD
Generic_hittest PROTO ptr_this:DWORD,xy:DWORD

"Наследование":
; Class:
; ------
; StaticTxt - extends Generic
StaticTxt STRUCT
 GEN            Generic <>
 ; Extended attributes
 color          dd ?
 caption        dd ?
StaticTxt ENDS

StaticTxt_tbl STRUCT
 GEN            Generic_tbl <>
 ; Extended methods
 ; nothing to add so far...
StaticTxt_tbl ENDS

Ну, и т.д. Наглядный пример полиморфизма на базе класса Generic:
; Draw the environment and all of it's objects
; Return: void
drawSpace PROC uses esi lpSpace:DWORD,hdc:DWORD
   invoke IsBadReadPtr,lpSpace,MAX_TOKENS * DWORD
   test eax,eax
   jnz @end
   mov esi,lpSpace
   mov ecx,MAX_TOKENS
@draw:
   lodsd
   test eax,eax
   jz @F
   push ecx
   push hdc   ; <- HDC
   push eax   ; <- ptr_this
   mov eax,(Generic PTR [eax]).methods
   ; Draw
   call (Generic_tbl PTR [eax]).draw_ptr
   pop ecx
@@:
   loop @draw
@end:
   ret
drawSpace ENDP

В общем, такой метод реализации ООП не очень отличается от модели by NaN & Exagon, но обратите внимание на отсутствие дополнительных макросов. Передачу this и вызов методов можно организовать и через регистры, но суть не в этом.

<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 14 . 15 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.071