Board.KolibriOS.org

Official KolibriOS board
It is currently Tue May 21, 2019 5:58 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 144 posts ]  Go to page Previous 16 7 8 9 10 Next
Author Message
PostPosted: Tue Nov 04, 2014 8:31 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1148
Mario_r4 wrote:
имхается мне нужно тебе сесть и разобраться с методами адресации, чую Юрова ты либо не читал, либо просматривал по диагонали.

Сегодня же вечером сяду перечитывать раздел. Просто у меня проблема с пониманием адресации немного. Я и в C++ с указателями не сдружился. Пора браться за проблему серьезно.

_________________
я лишь учусь


Top
   
PostPosted: Thu Nov 06, 2014 9:27 pm 
Offline

Joined: Thu Oct 23, 2014 6:12 pm
Posts: 8
В процессе изучения ассемблера и попыток написать что-нибудь возник вопрос: Как оптимальнее хранить в памяти большое количество (11 значений на структуру) переменных из конечного множества значений (2-15 значений).
И если чем-то вроде Record, то как лучше реализовать?


Top
   
PostPosted: Fri Nov 07, 2014 12:19 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
haitaka
Нужно хранить одну структуру или массив структур?


Top
   
PostPosted: Fri Nov 07, 2014 12:41 pm 
Offline

Joined: Thu Oct 23, 2014 6:12 pm
Posts: 8
Asper
Массив


Top
   
PostPosted: Fri Nov 07, 2014 12:59 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Прочти эту тему, начиная отсюда.


Top
   
PostPosted: Fri Nov 07, 2014 10:15 pm 
Offline

Joined: Thu Oct 23, 2014 6:12 pm
Posts: 8
Спасибо. Но всех ответов я, к сожалению, найти не смог.
Где всё-таки хранить такие маленькие значения? Записать подряд битами и после мучаться с масками, или выделить под каждое по байту/двойному слову?


Top
   
PostPosted: Sat Nov 08, 2014 12:23 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
haitaka wrote:
Спасибо. Но всех ответов я, к сожалению, найти не смог.
Где всё-таки хранить такие маленькие значения? Записать подряд битами и после мучаться с масками, или выделить под каждое по байту/двойному слову?

Делайте как вам удобней - никто вас в вашей программе не ограничивает. Сделать "сразу все правильно" задача не реалистическая.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Thu Nov 13, 2014 6:52 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
haitaka
Это зависит от размера массива. Если он в несколько раз превышает размер кеша CPU и требуется быстрый произвольный доступ к записям стоить подумать над оптимизацией. В твоём случае я бы хранил 4-х битные индексы в таблице значений (если я правильно понял условия задачи) если в массиве было бы за миллион записей.


Top
   
PostPosted: Fri Nov 14, 2014 4:25 pm 
Offline

Joined: Thu Oct 23, 2014 6:12 pm
Posts: 8
Serge
Спасибо. Теперь примерно понимаю, что мне нужно.


Top
   
PostPosted: Thu Nov 20, 2014 1:40 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1148
Аналогично в записи dword[devbuf+8] восьмёрка прибавляется не к адресу буфера (это было бы [devbuf]+8, но такой инструкции тоже нет), а к адресу адреса. Если devbuf указывает на зарезервированное двойное слово, то devbuf+8 будет указывать на 8 байт после него, т.е. куда-то за переменную dir. Что лежит по этому адресу неясно. Тут тоже нужно использовать промежуточный регистр <<<<

mov eax, [devbuf]
add eax, 8

Так верно?

_________________
я лишь учусь


Top
   
PostPosted: Thu Nov 20, 2014 2:34 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
punk_joker
Ты лучше на русском языке скажи чего ты хочешь выполнить, а то этот поток мыслей трудно разобрать.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Thu Nov 20, 2014 6:21 am 
Offline
Mentor
User avatar

Joined: Mon Oct 19, 2009 10:58 am
Posts: 416
Я уже забыл, о чём речь, но должно быть верно; в отладчике посмотри.


Top
   
 Post subject:
PostPosted: Thu Nov 20, 2014 12:02 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1148
Как правильно прочитать папку?
Насколько я понимаю, надо в начале определить коичество файлов в папке. Это можно сделать вызвав ф70.1 с 0 в 5 поле структуры, те самым прочитав лишь заголовок в 32 байта, оттуда взять количество фацлов в папке, и на основе этого уже выделить необходимое количество память под буфер, и передать это число, как количество блоков,которые надо прочитать.

_________________
я лишь учусь


Top
   
PostPosted: Thu Nov 20, 2014 1:22 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
punk_joker
Да, все верно.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Fri Nov 28, 2014 9:49 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1148
Имеется задача, получить список имеющихся дисков. После неудачных попыток и глупых вопросов тут, я все же более внимательно просмотрел существующие примеры работы с ФС на SVN (в частности OpenDialog) и все же получил работающий код, но результат немного не тот что я ожидал. После выполнения кода приведенного ниже, в eax я получаю 75. при количестве дисков 6. В чем проблема?

Код:
Spoiler: Show
mcall 68, 12, 32
mov [dirinfo.return], eax
mcall 70, dirinfo
mov eax, [dirinfo.return]
mov eax, [eax+8]


Переменные
Spoiler: Show
dirinfo:
.subfunction dd 1
.start dd 0
.flags dd 0
.size dd 0
.return dd 0
db 0
.name: dd root_pach

root_pach:
db '/',0

_________________
я лишь учусь


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

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


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