Board.KolibriOS.org

Official KolibriOS board
It is currently Mon Jan 20, 2020 8:25 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 391 posts ]  Go to page Previous 18 9 10 11 1227 Next
Author Message
 Post subject: Re: Вопрос
PostPosted: Tue Dec 01, 2015 4:53 pm 
Offline

Joined: Thu Feb 19, 2009 12:57 pm
Posts: 68
ALEXS1983, mov eax, offset Registers


Top
   
 Post subject: Re: Вопрос
PostPosted: Tue Dec 01, 2015 5:58 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
ALEXS1983 wrote:
дело в том что в дельфи в асм вставках понятия указателя, (ссылки на переменную) похоже не существует, т.е.
mov eax, Registers аналогично mov eax, [Registers] в любом случае присваивается значение переменной а не ёе адреса! Если указывать жёсткую привязка к адресу : mov eax,[$004040ac] mov [eax],$00000026 понятное дело, что тоже такие «номера» не проходят, ошибку выдаёт.

Это одно из принципиальных отличий между fasm и tasm/masm. В fasm квадратные скобки всегда означают значение переменной, отсутствие скобок всегда означает адрес. Встроенный ассемблер Delphi ближе к tasm/masm, там нужно явно указывать offset Registers для получения указателя на глобальную переменную. Для указателя на локальную переменную - которая на самом деле представляет из себя что-то вроде ebp-8, а в x86 нет форм для mov вида eax, ebp-8 - есть инструкция lea: lea eax, [var].

_________________
Сделаем мир лучше!


Top
   
 Post subject: Re: Вопрос
PostPosted: Tue Dec 01, 2015 8:16 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
ДЛЯ Artyom :

DrawXLine: ;//DrawXLine
;//EL_indicator.dpr.20: begin
push ebp
mov ebp,esp
add esp,-$08
push ebx
push esi
push edi
mov esi,edx
mov [ebp-$04],eax
;//EL_indicator.dpr.21: x1:=posx+lengthLine;
add ecx,[ebp-$04]
mov [ebp-$08],ecx
;//EL_indicator.dpr.22: For f:=0 to (Thickness-1) do begin
mov ebx,[ebp+$0c]
dec ebx
test ebx,ebx
jb @STR37 ; //jb +$64
inc ebx
xor edi,edi
;//EL_indicator.dpr.23: If f<>0 then begin
@STR23:
test edi,edi
JZ @STR31; //jz +$28
;//EL_indicator.dpr.24: case drawType of
mov eax,[ebp+$08]
; ВОТ ЗДЕСЬ ЭТО!
sub eax,$01
jb @STR25;//jb +$0a
jz @STR26 ;// jz +$11
dec eax
jz @STR27 ;// jz +$17
dec eax
jz @STR28 ;// jz +$17
jmp @STR31;// jmp +$16
;//EL_indicator.dpr.25: 0:begin posy:=posy-1;x1:=x1-1;posx:=posx+1; end;
@STR25: dec esi
dec dword [ebp-$08]
inc dword [ebp-$04]
jmp @STR31;// jmp +$0d
;//EL_indicator.dpr.26: 1:begin posy:=posy+1;x1:=x1-1;posx:=posx+1; end;
@STR26: inc esi
dec dword [ebp-$08]
inc dword [ebp-$04]
jmp @STR31 ; // jmp +$04
;//EL_indicator.dpr.27: 2:begin posy:=posy-1;end;
@STR27: dec esi
jmp @STR31 ;// jmp +$01
;//EL_indicator.dpr.28: 3:begin posy:=posy+1;end;
@STR28: inc esi
;//EL_indicator.dpr.31: setEBX_(((x1)*65536)+(posx));
@STR31:
mov eax,[ebp-$08]
shl eax,$10
add eax,[ebp-$04]
call setEBX_
;//EL_indicator.dpr.32: setECX_((posy*65536)+posy);
mov eax,esi
shl eax,$10
add eax,esi
call setECX_
;//EL_indicator.dpr.33: setEDX_(ColorLine);
mov eax,[ebp+$10]
call setEDX_
;//EL_indicator.dpr.34: setEAX_(38);
mov eax,$00000026
call setEAX_
;//EL_indicator.dpr.35: INT0x40D;
call INT0x40D
;//EL_indicator.dpr.36: end;
inc edi
;//EL_indicator.dpr.22: For f:=0 to (Thickness-1) do begin
dec ebx
jnz @STR23 ; // jnz -$61
;//EL_indicator.dpr.37: end;
@STR37:
pop edi
pop esi
pop ebx
pop ecx
pop ecx
pop ebp
ret $000c
;//


Top
   
 Post subject: Re: Вопрос
PostPosted: Wed Dec 02, 2015 5:01 am 
Offline
User avatar

Joined: Mon Jul 25, 2011 6:22 pm
Posts: 93
ALEXS1983, я так понял, что вы написали свой код на Delphi, скомпилировали его,
вывели ассемблерный листинг вашей программы и решили напрямую перенести данный код,
без какой бы то коррекции, в FASM. Так делать не следует, лучше научится писать на
чистом FASM'е, чем постоянно ходить по граблям :)


Top
   
 Post subject: Re: Вопрос
PostPosted: Wed Dec 02, 2015 10:45 am 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
[quote="Artyom"]ALEXS1983, я так понял, что вы написали свой код на Delphi, скомпилировали его,вывели ассемблерный листинг вашей программы и решили напрямую перенести данный код без какой бы то коррекции, в FASM. Так делать не следует, лучше научится писать на
чистом FASM'е, чем постоянно ходить по граблям :)[/quote]

Без подобных моих деяний считаю, что научится на АСМу попросту вообще невозможно! Во всяком случае мне! Я не готов перечитывать толмуды страниц книг дожидаясь прочитать то, что мне ДЕЙСТВИТЕЛЬНО нужно и всё равно никак не дождаться нужного в книге. Я не готов постоянно задавать вопросы на форумы, ещё и думать как их правильно сформулировать, чтобы меня поняли. Я хочу сразу пробовать то, что мне нужно, на языке который я знаю, и посматривать код какой получился на асме! Далее просматривать этот код пытаясь понять что какая команда делает и значит.
"без какой бы то коррекции" - коррекцию переходов делать приходится, а всякими отпимизациями мне занматся еще рано!
Я не пойму почему не понимают мой способ и мой метод и чего я должен поступать по другому и дествовать как другие?! Для меня вполне нормально написать (не зависимо от языка) програмку изначально лишь бы как-то работающую, а после заниматься её "палировкой".
[quote="Artyom"]Так делать не следует, лучше научится писать на
чистом FASM'е, чем постоянно ходить по граблям :)[/quote]
"Грабли" это необходимая вещь и без них никому и никак! Я не думаю, что новички выбрав способ изучения такой как предлагает вы, меньше будут наступать на "грабли" и у них будет что-то лучше получаться, чем у меня!

Специалисты писавшие макросы, по сути тоже на "грабли" наступили, да и я в месте с ними наступил! Причём не на свои, а на их "грабли"! Вот только они этого усиленно не хотят признавать, что их макросы это "грабли" для новичков, а не удобство! Они вместо этого тешат себя мыслями, о том, что мой код говно, поэтому и "сработали" "грабли", мол чуть ли не так ему и надо! :-) Ну-ну!.... продолжайте в том же духе! Сплю и вижу, что с таким отношением, те "грабли" однажды сработают на их самих и на их иделальном коде, :-) раз проблему они в макросах не видят!


Top
   
 Post subject: Re: Вопрос
PostPosted: Wed Dec 02, 2015 11:36 am 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
ИЗ МОЕЙ ЛС-ПЕРЕПИСКИ:

"создатели этого макроса даже в страшном сне представить не могли такого извращения :)"
Чтобы такого не было, не надо "зашиваться" в то, что делаешь, пусть даже, то что ты делаешь, будет правильно и грамотно! Надо никогда не терять широту взглядов!
Похоже, что разница между мной и спецами на этом форуме, в том, что я обладаю этой широтой взглядов, которая например, заключается в способе который я пробую для написания программ ("вырезания" скомпилированного кода), который спецам не приемлем, так как они "приплюснуты" своим опытом и профессионализмом и они больше чем уверенны, что так делать нельзя! С подобным отношением к вещам, всё у них будет правильно и слаженно! Поздравляю! :-) Но какого-то "прорыва" ("взрыва") они никогда не сделают, с так отношением и подходом, без креативности, неординарного мышления и широты взглядов! И пусть никто не обижается, на моё мнение, во-первых, я могу ошибаться, а во вторых тоже могу обидеться! :-)
По себе знаю, что опыт и профессионализм надо рассматривать не только как, что-то хорошее и положительное, а и как "отпечаток", который не даёт думать по другому!

"нужно всего лишь исправить на"-
а как тебе прозвучит фраза, что в асм-вставках-дельфи, в том моменте программы и править то ничего не нужно! :-)


Top
   
 Post subject: Re: Вопрос
PostPosted: Wed Dec 02, 2015 12:48 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Хотете знать что такое говнокод ?
Установил на свою голову "Microsoft Visual Studio 10.0", теперь Дельфи7 не хочет работать так как Студия обновила какие файлы которые тоже использует Дельфи7! Это даже не говнокод, это настоящем вредительством называется! Теперь видимо придётся винду из образа раскручивать, если удаление не поможет! Нафиг мне такая "радость" :-(


Top
   
 Post subject: Re: Вопрос
PostPosted: Wed Dec 02, 2015 4:41 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
ALEXS1983 wrote:
Похоже, что разница между мной и спецами на этом форуме, в том, что я обладаю этой широтой взглядов, которая например, заключается в способе который я пробую для написания программ ("вырезания" скомпилированного кода), который спецам не приемлем, так как они "приплюснуты" своим опытом и профессионализмом и они больше чем уверенны, что так делать нельзя!
"Спецы на этом форуме" имеют очень большой опыт программ, которые кто-то когда-то левой пяткой скомпилировал и свалил из проекта, после чего абсолютно никто не может ничего в этих программах поправить. А надо. Поэтому "спецы на этом форуме" отрицательно относятся к любым методам создания программ, которые нельзя будет поправить в случае чего.

Вопрос: предположим, ты сделал игру своим методом, у тебя есть код для fasm, бОльшая часть которого получена копированием какого-то кода Delphi, ты выложил игру на форуме, и пользователям захотелось какую-то фичу, которой там нет. Ну, скажем, сохранение/загрузку таблицы рекордов. Или красивую картинку на фон. Или <подставить нужное из 100500 хотелок, какой-то из них наверняка ещё не реализовано>. Твои действия?

ALEXS1983 wrote:
Установил на свою голову "Microsoft Visual Studio 10.0", теперь Дельфи7 не хочет работать
Подробнее, пожалуйста.

_________________
Сделаем мир лучше!


Top
   
 Post subject: Re: Вопрос
PostPosted: Wed Dec 02, 2015 7:15 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Insolor, CleverMouse спасибо за подсказку об Offset!
=============================================
[quote="CleverMouse"] Вопрос: предположим, ты сделал игру своим методом, у тебя есть код для fasm, бОльшая часть которого получена копированием какого-то кода Delphi, ты выложил игру на форуме, и пользователям захотелось какую-то фичу, которой там нет. Ну, скажем, сохранение/загрузку таблицы рекордов. Или красивую картинку на фон. Или <подставить нужное из 100500 хотелок, какой-то из них наверняка ещё не реализовано>. Твои действия?[/quote]
Я тебе попытаюсь объяснить, что ты хотя бы отчасти сама-себе противоречишь!...
Чтобы можно было дорабатывать, нужны чёткие и понятные приёмы-передачи параметров в процедурах! Я это вижу только путём передачи через переменные или так называемые структуры, а НЕ ЧЕРЕЗ РЕГИСТРЫ ПРОЦЕССОРА И НЕ ЧЕРЕЗ СТЕК!
Вот пример с которым я "балуюсь" и делаю пробы
Вот такая симпатичная и нужная структура, процедуре DrawLine, которая чертит самую обычную линию....

Type TDrawLine_ = record // для procedure DrawLine
x1,x2, // [координата начала по оси x] [координата конца по оси x]
y1,y2// [координата начала по оси y] [координата конца по оси y]
:Cardinal;
end;
var DrawLine_Var:TDrawLine_;
procedure DrawLine;
.......................
end;

ТЕ ПРОЦЕДУРЫ ЧТО БУДУТ ВЫЗЫВАТЬ DrawLine, тоже имеют свою структуру, для того чтобы и им могли передавать данные (ну в общем ты поняла, да?!)
Так вот, в нескольких процедурах которые вызывают DrawLine меняется всего лишь один параметр из 4-х, например только x1.
И вот CleverMouse, увидев, что, скажем, у четырёх процедур, концовка вот такая (как по шаблону!) (ну в переводе на асм в смысле ):
........
DrawLine_Var.x1:=x1;
DrawLine_Var.x2:=DrawLineVar.posx;
DrawLine_Var.y1:=DrawLineVar.posY;
DrawLine_Var.y2:=DrawLineVar.posY;
DrawLine_;
end;

...первая же и будет "голосить", :-) что это стопроцентный говнокод!... что надо было через регистры или "пуши"(стек) передавать параметры... что можно бы было эти строки сделать началом процедуры DrawLine и т.д.
Вот и получится, что можно дооптимизироваться до того, что хрен разберёшь как работает DrawLine ! Да и использовать её другими (новыми) процедурами уже не получится!
И вот еще интересный момент, то, что напишу я (говнокод), вот таким образом, (не зависимо от языка будь-то асм или дельфи), ты CleverMouse, разобраться сможешь! А вот то, что напишешь ты, используя свои мудрости и премудрости :-) я конечно разобраться не смогу!
Логично предположить, что код в котором ты не можешь разобраться, написал мудрец (или "мудрец") такой же как и ты, а может и похлеще! :-) С возможной мотивацией такой же как у и тебя, - главное не говнокод, главное разумное использование каждого регистрика, байтика, битика и т.д. А то, что кто-то не разберётся в коде, его не волновало!
Отсюда я вижу такие выводы:
Код должен быть понятен другим, а чтобы он был понятен не надо излишне "пудрится" на оптимизации, лучше лишнюю передачу параметров сделать структурам или переменным, но чтобы это было понятно, что куда и зачем передаются!
З.Ы. Вот только не подумай, что я этим написанным защищаю свой код. Я думаю, если ты захочешь, то всё правильно поймёшь, то, что я хотел этим текстом сказать!


Top
   
 Post subject: Re: Вопрос
PostPosted: Wed Dec 02, 2015 7:43 pm 
Offline

Joined: Sun Aug 09, 2015 3:41 pm
Posts: 110
CleverMouse, пациента не спасти.


Top
   
 Post subject: Re: Вопрос
PostPosted: Wed Dec 02, 2015 8:12 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
[quote="Ray"]CleverMouse, пациента не спасти.[/quote]
Ага! Не спасти! Потому, что и спасать не от чего! :-)
==========================
Скажите, в каких случаях, (какой размер, кол-во команд асм и т.д.) должно быть повторяющихся в коде, чтобы стояло делать ради них отдельную процедуру ?
К примеру если в коде повторяется вот такое
dec dword [ebx+$08]
inc dword [ebx+$04]
стоит ли ради этого создавать отдельную процедуру?


Top
   
 Post subject: Re: Вопрос
PostPosted: Wed Dec 02, 2015 9:13 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Вызов процедуры это минимум две лишние комманды: call и ret. Вот и думай.

Я уже начинаю терять суть того, что ты хочешь сказать. Уже давным давно везде и всегда параметры в процедуру передаются через стек. И никто не смог придумать ничего лучше. Не нужно описывать, как их передавать, просто перечислить. Если ты отступаешь от этого стандарта, то кроме тебя никто не поймёт, как твои процедуры вызывать.


Top
   
 Post subject: Re: Вопрос
PostPosted: Wed Dec 02, 2015 9:37 pm 
Offline

Joined: Mon Mar 27, 2006 6:33 am
Posts: 675
У Дельфи, довольно премудрая схема передачи/приёма параметров между функциями. :)
(немного просматривал эту схему)


Top
   
 Post subject: Re: Вопрос
PostPosted: Wed Dec 02, 2015 9:46 pm 
Offline

Joined: Mon Mar 27, 2006 6:33 am
Posts: 675
Думаю ещё не потеряна для использования Visual Studio 98, в каком нибудь портабельном варианте запуска.
Интересно что код одного развивающегося проекта (DLL Scintilla от Scite редактора) скомпилировался без танцев с бубном в варианте от 2013г.


Top
   
 Post subject: Re: Вопрос
PostPosted: Wed Dec 02, 2015 11:03 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
[quote="Kopa"]Думаю ещё не потеряна для использования Visual Studio 98, в каком нибудь портабельном варианте запуска.[/quote]
Так это ты так только думаешь... :-) или может ссылку дашь, где можно скачать Visual Studio ЛЮБУЮ, БЕЗ "ФОКУСОВ", ОБНОВЛЕНИЙ, "ПОЛЕГЧЕ", СО ВСТРОЕННОЙ ПОМОЩЬЮ и портабельную ?


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 391 posts ]  Go to page Previous 18 9 10 11 1227 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited