Проверь в системе.
Но у меня KlbrInWin не было никогда в обычных арифметических операциях глюков. Только когда нет новых системных ф-циях.
Вопрос
Решил просмотреть дамп
И вот что я увидел:
ИЗ КОМПИЛИРОВАННОГО КОДА FASM (файл Lesson.bin )
...............
8Bh, 45h, 08h,
48h,
72h, 0Ah,
...............
А вот какой код в этом промежутке в дельфи:
......................
00403957 8B4508 mov eax,[ebp+$08]
0040395A 83E801 sub eax,$01
0040395D 720A jb +$0a
......................
Проверил на всякий случай в Main.asm
..........................
;//EL_indicator.dpr.24: case drawType of
mov eax,[ebp+$08]
sub eax,$01
jb @STR25;//jb +$0a
.....................................
МНЕ КТО НИБУДЬ МОЖЕ ОБЪЯСНИТЬ ЧТО ЭТО ВСЁ ЗНАЧИТ И КАК ЭТО ВСЁ ПОНИМАТЬ ?!
FASM МОЖЕ КОМПИЛИРОВАТЬ НЕВЕРНО ? ЧТО С ЭТИМ ДЕЛАТЬ И КАК С ЭТИМ БОРОТЬСЯ ?
И вот что я увидел:
ИЗ КОМПИЛИРОВАННОГО КОДА FASM (файл Lesson.bin )
...............
8Bh, 45h, 08h,
48h,
72h, 0Ah,
...............
А вот какой код в этом промежутке в дельфи:
......................
00403957 8B4508 mov eax,[ebp+$08]
0040395A 83E801 sub eax,$01
0040395D 720A jb +$0a
......................
Проверил на всякий случай в Main.asm
..........................
;//EL_indicator.dpr.24: case drawType of
mov eax,[ebp+$08]
sub eax,$01
jb @STR25;//jb +$0a
.....................................
МНЕ КТО НИБУДЬ МОЖЕ ОБЪЯСНИТЬ ЧТО ЭТО ВСЁ ЗНАЧИТ И КАК ЭТО ВСЁ ПОНИМАТЬ ?!
FASM МОЖЕ КОМПИЛИРОВАТЬ НЕВЕРНО ? ЧТО С ЭТИМ ДЕЛАТЬ И КАК С ЭТИМ БОРОТЬСЯ ?
Мама мия! :-) вручную заменил в FASMе команду "sub eax,$01" на "db $83, $E8, $01" такую как предложил дельфи и всё заработало как надо!
.................
;//EL_indicator.dpr.24: case drawType of
mov eax,[ebp+$08]
db $83, $E8, $01 ; sub eax,$01
jb @STR25;//jb +$0a
............................
ВЫВОД ФАСМ КОМПИЛИРУЕТ С ОШИБКАМИ!
Правда мне от этого не легче! Можно ли какой-нить другой асм использовать, который может компилировать для КОС ?
.................
;//EL_indicator.dpr.24: case drawType of
mov eax,[ebp+$08]
db $83, $E8, $01 ; sub eax,$01
jb @STR25;//jb +$0a
............................
ВЫВОД ФАСМ КОМПИЛИРУЕТ С ОШИБКАМИ!
Правда мне от этого не легче! Можно ли какой-нить другой асм использовать, который может компилировать для КОС ?
ALEXS1983 писал(а):
> ВЫВОД ФАСМ КОМПИЛИРУЕТ С ОШИБКАМИ!
Мне удалось разобраться в чем проблема. Сделал файл asm с текстом:
sub eax,1
после компиляции мне выдало 4 байта
66 83 e8 01
потом пришла в голову мысль добавить вначале файла строку
use32
и потом получилось 3 байта
83 e8 01
Вывод: фасм по умолчанию делает код для 64 битных процессоров. Если ему указать use32 все работает нормально.
> ВЫВОД ФАСМ КОМПИЛИРУЕТ С ОШИБКАМИ!
Мне удалось разобраться в чем проблема. Сделал файл asm с текстом:
sub eax,1
после компиляции мне выдало 4 байта
66 83 e8 01
потом пришла в голову мысль добавить вначале файла строку
use32
и потом получилось 3 байта
83 e8 01
Вывод: фасм по умолчанию делает код для 64 битных процессоров. Если ему указать use32 все работает нормально.
Точнее, фасм по умолчанию делает 16 битный код, на что указывает префикс 66h.
Ребята, я ведь про конкретный пример, про который я писал здесь viewtopic.php?f=10&t=370&start=60#p63188
и если вы посмотрите его, то увидите, что первая строка файла Main.asm, -
"use32 ; включить 32-битный режим ассемблера"
а вы мне про что?! :-)
и если вы посмотрите его, то увидите, что первая строка файла Main.asm, -
"use32 ; включить 32-битный режим ассемблера"
а вы мне про что?! :-)
Code: Select all
purge add,subСделаем мир лучше!
[quote="CleverMouse"][code]purge add,sub[/code]
после macros.inc. И вместо копипаста кода, выданного Delphi, думать, что происходит. И нет, это не глюк ни fasm, ни KlbrInWin.[/quote]
Я конечно извиняюсь, несколько раз прочитал, но ничего не понял из написанного ?!
после macros.inc. И вместо копипаста кода, выданного Delphi, думать, что происходит. И нет, это не глюк ни fasm, ни KlbrInWin.[/quote]
Я конечно извиняюсь, несколько раз прочитал, но ничего не понял из написанного ?!
А если MACROS.INC вообще не подключать, так как его не понимаю (возможно пока) можно ли без него "прожить" ? Или там что-то есть существенное ? Ну "mcall" естественно я заменю на нормальный код.
purge это директива отменяющая действие последнего указанного в ней макроса. В macros.inc есть макрос для команды sub, который отменяется директивой purge, которая идет после.
ALEXS1983 писал(а):
> а вы мне про что?! :-)
код действительно не смотрел, но скорее всего там purge или вообще не нужно, или ставить его надо перед подключением macros.inc
ALEXS1983 писал(а):
> а вы мне про что?! :-)
код действительно не смотрел, но скорее всего там purge или вообще не нужно, или ставить его надо перед подключением macros.inc
[quote="IgorA"]purge это директива отменяющая действие последнего указанного в ней макроса. В macros.inc есть макрос для команды sub, который отменяется директивой purge, которая идет после.
ALEXS1983 писал(а):
> а вы мне про что?! :-)
код действительно не смотрел, но скорее всего там purge или вообще не нужно, или ставить его надо перед подключением macros.inc[/quote]
Я понял! У меня теперь сейчас стоит вопрос в том, чтобы macros.inc вообще отключить (не подключать к проектам) мало ли что еще там окажется, стоит ли это делать ?
ALEXS1983 писал(а):
> а вы мне про что?! :-)
код действительно не смотрел, но скорее всего там purge или вообще не нужно, или ставить его надо перед подключением macros.inc[/quote]
Я понял! У меня теперь сейчас стоит вопрос в том, чтобы macros.inc вообще отключить (не подключать к проектам) мало ли что еще там окажется, стоит ли это делать ?
Если не хочешь стать говнокодером, надо всегда находить причину, а не устранять последствия. И mov [@esp_], esp и отказ от macros.inc — очень плохие идеи. Я тоже не смотрел код, так как cloud.mail.ru послал меня обновить браузер, а я послал его в другое место. Но здесь всё просто, вместо прыжков на метку у тебя прыжки на конкретное расстояние jb +$0a. Макрос заменил sub eax,1 на dec eax, код стал на 2 байта короче, расстояние стало неправильным.
[quote="Pathoswithin"]Если не хочешь стать говнокодером, надо всегда находить причину, а не устранять последствия. И mov [@esp_], esp и отказ от macros.inc — очень плохие идеи.[/quote]
Если на то пошло, то сначала надо стать хоть каким-то кодером, а уж потом неговнокодером. И поэтому считаю своё поведение вполне логичным, т.е. применяю, то что работает в общем-то нормально и без сбоев. А вот когда решу "палировать" своё совершенство (хотя я может быть такого и не решу, посчитаю, что нафиг оно надо, мол я достаточно понял того что мне нужно!... скорее всего так оно и будет!), тогда буду идеализировать свой код и свои действия. Но до этого пока мне далеко! А "топтаться на месте", мусоля над "цепочкой" в несколько асм-команд, думая над тем, являются ли они говнокодом или нет, а также, что с ними делать если, они всё таки, (та "цепочка" команд асма) не являются идеальным кодом или даже говнокодом я не собираюсь! Главное, что-бы оно работало! И работало правильно!
Да и вообще, объясни мне пожалуйста, что ты считаешь говнокодом ? Сейчас мощь аппаратуры по количеству памяти, и быстродействию, а также "вырезанный" мной код из дельфи, который оптимизирован, которого будет не менее 99% от всего кода - это всё вполне покроет мои небольшие и редко встречающиеся "грешки" подобные mov [@esp_], esp. Причём покроет с лихвой! Мои "грешки" будут как капля в море, а может и того меньше.
И вот объясни мне пожалуйста, что ты мне пытаешься доказать?! То, что я не програмлю так как ты и это уже является неправильным и говнокодом?! Так тебя понимать?! Ну так я никогда и не буду програмить так как ты! Значит, согласно твоей логике, какой бы не была бы мной написана программа (процедура), то она будет являться говнокодом, так как, видишли ты в ней сможешь найди не идеальную часть кода, которую можно оптимизировать. А ты оптимизацией кода, после компиляции такими средами программирования, как например, Дельфи не хочешь заняться ? :-) И критиковать их ? :-) Наверняка там найдутся участки кода которые ты явно считаешь говнокодом.
Короче говоря :-), в моём понимании говнокод, это такой код, который очень сложно назвать работоспособным и неторможенным, т. е. если написан обычный калькулятор «вес» которого 1,5 гига, да еще и при этом он сильно тормозит и глючит, «жрёт» ресурсы процессора и системы, да еще и ко всему работает не всегда правильно, - вот это, да, явный говнокод! А то, что я, например, напишу программу(процедуру) «весом», 1500 байт, и длительностью работы 2/10 сек. , а ты такую напишешь в 900 байт, с длительностью работы 9/100 сек, я думаю, что это не актуально и никого ты этим не удивишь и нечего не никому не докажешь! И это даже мало кто заметит!
Ради чего так «париться» ?
[quote="Pathoswithin"] Я тоже не смотрел код, так как cloud.mail.ru послал меня обновить браузер, а я послал его в другое место. [/quote]
Если есть какие-то предложения и мысли куда заливать, - пиши, рассмотрю.
[quote="Pathoswithin"] Но здесь всё просто, вместо прыжков на метку у тебя прыжки на конкретное расстояние jb +$0a. Макрос заменил sub eax,1 на dec eax, код стал на 2 байта короче, расстояние стало неправильным.[/quote]
Ну вот плохо, что ты кода не видел! Нету там этих «прыжков», там всё заменено ссылками, да и вообще уже разобрались ( надо purge add,sub вставить, после include 'macros.inc', ) чёто там макросы балуются. Ну главное, что решилось!... макросы я пока «отцепляю», что-бы чего-то другого не коснулось и в следующий раз голова не пухла :) Я всё равно в них ничерта не разбираюсь. В дельфе есть такая директива как Inline, (я правда ей никогда не пользовался), если её написать после процедуры, например Procedure A; Inline; , то процедура вставляется в код, от куда её вызывают, т.е. процедура становиться макросом. Есть ли такое в FASMe ? Думаю, удобная вещь.
З.Ы. Надеюсь, на твоё правильное понимание мной написанного! :-) В том смысле, что в написанном мной, не преследовалось каких-то оскорблений или унижений собеседника и его мнения! :-)
Еще вопрос возник, если знаешь подскажи плиз, - см. след сообщение
Если на то пошло, то сначала надо стать хоть каким-то кодером, а уж потом неговнокодером. И поэтому считаю своё поведение вполне логичным, т.е. применяю, то что работает в общем-то нормально и без сбоев. А вот когда решу "палировать" своё совершенство (хотя я может быть такого и не решу, посчитаю, что нафиг оно надо, мол я достаточно понял того что мне нужно!... скорее всего так оно и будет!), тогда буду идеализировать свой код и свои действия. Но до этого пока мне далеко! А "топтаться на месте", мусоля над "цепочкой" в несколько асм-команд, думая над тем, являются ли они говнокодом или нет, а также, что с ними делать если, они всё таки, (та "цепочка" команд асма) не являются идеальным кодом или даже говнокодом я не собираюсь! Главное, что-бы оно работало! И работало правильно!
Да и вообще, объясни мне пожалуйста, что ты считаешь говнокодом ? Сейчас мощь аппаратуры по количеству памяти, и быстродействию, а также "вырезанный" мной код из дельфи, который оптимизирован, которого будет не менее 99% от всего кода - это всё вполне покроет мои небольшие и редко встречающиеся "грешки" подобные mov [@esp_], esp. Причём покроет с лихвой! Мои "грешки" будут как капля в море, а может и того меньше.
И вот объясни мне пожалуйста, что ты мне пытаешься доказать?! То, что я не програмлю так как ты и это уже является неправильным и говнокодом?! Так тебя понимать?! Ну так я никогда и не буду програмить так как ты! Значит, согласно твоей логике, какой бы не была бы мной написана программа (процедура), то она будет являться говнокодом, так как, видишли ты в ней сможешь найди не идеальную часть кода, которую можно оптимизировать. А ты оптимизацией кода, после компиляции такими средами программирования, как например, Дельфи не хочешь заняться ? :-) И критиковать их ? :-) Наверняка там найдутся участки кода которые ты явно считаешь говнокодом.
Короче говоря :-), в моём понимании говнокод, это такой код, который очень сложно назвать работоспособным и неторможенным, т. е. если написан обычный калькулятор «вес» которого 1,5 гига, да еще и при этом он сильно тормозит и глючит, «жрёт» ресурсы процессора и системы, да еще и ко всему работает не всегда правильно, - вот это, да, явный говнокод! А то, что я, например, напишу программу(процедуру) «весом», 1500 байт, и длительностью работы 2/10 сек. , а ты такую напишешь в 900 байт, с длительностью работы 9/100 сек, я думаю, что это не актуально и никого ты этим не удивишь и нечего не никому не докажешь! И это даже мало кто заметит!
Ради чего так «париться» ?
[quote="Pathoswithin"] Я тоже не смотрел код, так как cloud.mail.ru послал меня обновить браузер, а я послал его в другое место. [/quote]
Если есть какие-то предложения и мысли куда заливать, - пиши, рассмотрю.
[quote="Pathoswithin"] Но здесь всё просто, вместо прыжков на метку у тебя прыжки на конкретное расстояние jb +$0a. Макрос заменил sub eax,1 на dec eax, код стал на 2 байта короче, расстояние стало неправильным.[/quote]
Ну вот плохо, что ты кода не видел! Нету там этих «прыжков», там всё заменено ссылками, да и вообще уже разобрались ( надо purge add,sub вставить, после include 'macros.inc', ) чёто там макросы балуются. Ну главное, что решилось!... макросы я пока «отцепляю», что-бы чего-то другого не коснулось и в следующий раз голова не пухла :) Я всё равно в них ничерта не разбираюсь. В дельфе есть такая директива как Inline, (я правда ей никогда не пользовался), если её написать после процедуры, например Procedure A; Inline; , то процедура вставляется в код, от куда её вызывают, т.е. процедура становиться макросом. Есть ли такое в FASMe ? Думаю, удобная вещь.
З.Ы. Надеюсь, на твоё правильное понимание мной написанного! :-) В том смысле, что в написанном мной, не преследовалось каких-то оскорблений или унижений собеседника и его мнения! :-)
Еще вопрос возник, если знаешь подскажи плиз, - см. след сообщение
Вопрос.
mcall -1 (конец программы) это, я так понял, когда без макроса то вот так:
mov eax,-1
call INT0x40;
Но ведь регистры не могут быть отрицательными ?! Какое реальное число eax ?
$FFFFFFFF ? Так ?
Т.е. Вместо mov eax,-1 можно вполне вписывать mov eax,$FFFFFFFF ?
mcall -1 (конец программы) это, я так понял, когда без макроса то вот так:
mov eax,-1
call INT0x40;
Но ведь регистры не могут быть отрицательными ?! Какое реальное число eax ?
$FFFFFFFF ? Так ?
Т.е. Вместо mov eax,-1 можно вполне вписывать mov eax,$FFFFFFFF ?
omg...
Товарищ Pathoswithin тебе дело говорит, незачем бомбить так. Надо научиться анализироваьь проблему, находить причину и способы её исправления, а не сразу кричать, что аиговат эмулятор, ассемблер и т.д. не разобравшись. Говнокод, по сути получается в результате а)либо лени опытного разработчика прорабатывать полноценное решение для одноразового кода, который после проверки идеи будет выкинут и заменен полноценным аналогом или просто выкинут; б) либо в результате непонимания неопытного разработчика языка, инструментов, методов построения систем, алгоритмов, теории и т.д. и т.д.
Причем второй вариант в природе встречается гораздо чаще. В этом случае совет от более опытного товарища лучше не воспринимать в штыки, а попытаться понять и применить, если конечно есть желание расти над собой.
Что ещё за call INT0X40 ? У тебя есть такая функция? Вообще в fasm будет int 0x40
Да в eax будет 0xffffffff, но зачем так писать? Чтобы ещё больше непонятно было? Читает человек твой "урок", а там какая то сис. функция с огромным номером, которой нет в документации.
Товарищ Pathoswithin тебе дело говорит, незачем бомбить так. Надо научиться анализироваьь проблему, находить причину и способы её исправления, а не сразу кричать, что аиговат эмулятор, ассемблер и т.д. не разобравшись. Говнокод, по сути получается в результате а)либо лени опытного разработчика прорабатывать полноценное решение для одноразового кода, который после проверки идеи будет выкинут и заменен полноценным аналогом или просто выкинут; б) либо в результате непонимания неопытного разработчика языка, инструментов, методов построения систем, алгоритмов, теории и т.д. и т.д.
Причем второй вариант в природе встречается гораздо чаще. В этом случае совет от более опытного товарища лучше не воспринимать в штыки, а попытаться понять и применить, если конечно есть желание расти над собой.
Что ещё за call INT0X40 ? У тебя есть такая функция? Вообще в fasm будет int 0x40
Да в eax будет 0xffffffff, но зачем так писать? Чтобы ещё больше непонятно было? Читает человек твой "урок", а там какая то сис. функция с огромным номером, которой нет в документации.
Who is online
Users browsing this forum: No registered users and 1 guest