Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Sep 20, 2019 9:46 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 144 posts ]  Go to page Previous 16 7 8 9 10
Author Message
PostPosted: Sat Jan 30, 2016 10:31 am 
Offline
User avatar

Joined: Thu Apr 26, 2012 10:10 pm
Posts: 37
Привет. Кто подскажет, почему этот фрагмент не работает, в чем ошибка?

Code:
cmp byte [I_Param+5], 'B'
jz BtClrSet
inc edx
cmp byte [I_Param+5], 'R'
jz BtClrSet
inc edx
BtClrSet:


Я передаю в аргументах строку "BOOT R" (например). Вывод byte [I_Param+5] в debug работает, а вот сравнения почему-то не происходит, что я упустил?
По-моему - при сравнении флаги каждый раз разные... если сделать jnz, то прыжок происходит (но не работает логика).


Top
   
PostPosted: Sat Jan 30, 2016 2:09 pm 
Offline
User avatar

Joined: Thu Apr 26, 2012 10:10 pm
Posts: 37
Разобрался: по какой-то причине по этому адресу к моменту сравнения оказывается 00h.
Вопрос почему, буду трассировать дальше.


Top
   
PostPosted: Tue Sep 05, 2017 5:39 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5061
За что я не люблю программы на ассемблере, так это за такие вот конструкции. (В ЯВУ тоже говна хватает, но сейчас не об этом (программирование вообще зло) )
Attachment:
OU1hnI3kQYSipEhjVRK3Jg.png
OU1hnI3kQYSipEhjVRK3Jg.png [ 11.35 KiB | Viewed 1733 times ]

Вместо простой и понятной mov eax,4 стоит менее очевидная shr eax,1 (eax=8).
Идеальным даже было бы mov eax,SF_DRAW_TEXT.

Как я понимаю, автор наверно хотел оптимизировать код.

А как вы читаете, оптимизация здесь уместна или нет?
Есть смысл заменять shr на mov?

_________________
Через тернии к звездам


Top
   
PostPosted: Tue Sep 05, 2017 6:51 pm 
Offline

Joined: Sun Oct 27, 2013 8:13 pm
Posts: 141
Code:
mov eax, 4 ;гекс-код "B804000000"
shr eax, 1 ;гекс-код "D1E8"

Как видно, автор сэкономил 3 байта. Подобная ручная оптимизация ни к чему хорошему не приводит. На асме лучше писать предельно понятно. Ведь главная причина больших размеров современных ЯВУ-программ -- это не плохие компиляторы, а большие библиотеки и жирные рантаймы, чего нет в ассемблере. И уже поэтому небольшие программы на асме будут намного легче своих аналогов на ЯВУ. И без какой-либо ручной оптимизации...
Ну, это чисто мое мнение, если три байта это важно -- оптимизируйте. :)


Top
   
PostPosted: Tue Sep 05, 2017 6:54 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Leency, да тут почти во всём проекте так.

Вот, например, из ядра(то, что прямо сейчас передо мной):
Code:
        mov     ecx, ebp
        shr     ecx, 2
        mov     [esp+36], eax
        sub     edi, eax
        mov     edx, eax
        mov     eax, [esp+24]
        cmp     eax, -1
        jnz     @f
        mov     [esp+28], edi
почему shr 2? что за esp +36 +24 +28 ???
Code:
        not     ecx
        rol     ecx, 8
        mov     cl, [esp+32-8+3]
        ror     ecx, 8
        mov     [esp+32-8], ecx
и тут не лучше.

Для меня на первом месте всё же понятность кода. А то потом через месяц сам же и забудешь что там и для чего.

Вполне возможно, что это одна из причин медленного развития. Кто-то новый приходит, открывает код, а там всё через одно место. Ну и закрывает и уходит соответственно.

Некоторые участники вставляют ассемблерный код, полученный с помощью си-компилятора.
И оставляют как есть всякие параметры функций и локальные переменные ([esp+8], [esp-8] и т.д.)


Top
   
PostPosted: Tue Sep 05, 2017 7:13 pm 
Offline

Joined: Sun Oct 27, 2013 8:13 pm
Posts: 141
0CodErr wrote:
Вполне возможно, что это одна из причин медленного развития. Кто-то новый приходит, открывает код, а там всё через одно место. Ну и закрывает и уходит соответственно.

Это, главным образом, касается разработки ядра. Разработка прикладных программ уже давно возможна на ЯВУ. Но особого развития не заметно. Я думаю, причина остановки развития -- это фактическая смерть десктопа. Резкое падение спроса на десктоп-компьютеры и снижение интереса разработки для них.


Top
   
PostPosted: Tue Sep 05, 2017 7:51 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5061
(оффтоп)
Колибри ОС проиграла по многим причинам. Ассемблер сложно читать, сложнее писать понятные программы, в отличии от яву с human readable названиями функций.

Десктоп полуживой. Мобильные устройства меняются каждые 2 года, дестктопы минимум раз в 5 лет. Сейчас уже подрастает поколение у которых дома нет компов, только мобильные телефоны.
Интернет уже это самая настоящая часть жизни каждого из нас, не только гиков, почти каждого человека до 50 лет.

Почему все так слабо сейчас, потому что в Колибри нет полноценного интернета.
Дай wifi и современный браузер - можно будет жить.

_________________
Через тернии к звездам


Top
   
PostPosted: Wed Sep 06, 2017 1:06 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
А при чём здесь ассемблер? Такие программисты. Можно mov al, 4
Мне бы ваши проблемы, вон в драйвере FAT вообще куча [esp+16+8+12+8]. Причём, это Брыллиантовое наследство.

Вообще-то, КОС не только для десктопов, но и для ноутбуков. И всё ещё немало людей с мобильным телефоном, а не смартфоном.


Top
   
PostPosted: Wed Sep 06, 2017 11:12 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5061
>И всё ещё немало людей с мобильным телефоном, а не смартфоном.
Мало. :)

_________________
Через тернии к звездам


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 144 posts ]  Go to page Previous 16 7 8 9 10

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 0 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:  
cron
Powered by phpBB® Forum Software © phpBB Limited