Page 8 of 10

Re: ряд вопросов по FASM

Posted: Tue Nov 04, 2014 8:31 am
by punk_joker
Mario_r4 wrote:имхается мне нужно тебе сесть и разобраться с методами адресации, чую Юрова ты либо не читал, либо просматривал по диагонали.
Сегодня же вечером сяду перечитывать раздел. Просто у меня проблема с пониманием адресации немного. Я и в C++ с указателями не сдружился. Пора браться за проблему серьезно.

Re: ряд вопросов по FASM

Posted: Thu Nov 06, 2014 9:27 pm
by haitaka
В процессе изучения ассемблера и попыток написать что-нибудь возник вопрос: Как оптимальнее хранить в памяти большое количество (11 значений на структуру) переменных из конечного множества значений (2-15 значений).
И если чем-то вроде Record, то как лучше реализовать?

Re: ряд вопросов по FASM

Posted: Fri Nov 07, 2014 12:19 pm
by Asper
haitaka
Нужно хранить одну структуру или массив структур?

Re: ряд вопросов по FASM

Posted: Fri Nov 07, 2014 12:41 pm
by haitaka
Asper
Массив

Re: ряд вопросов по FASM

Posted: Fri Nov 07, 2014 12:59 pm
by Asper
Прочти эту тему, начиная отсюда.

Re: ряд вопросов по FASM

Posted: Fri Nov 07, 2014 10:15 pm
by haitaka
Спасибо. Но всех ответов я, к сожалению, найти не смог.
Где всё-таки хранить такие маленькие значения? Записать подряд битами и после мучаться с масками, или выделить под каждое по байту/двойному слову?

Re: ряд вопросов по FASM

Posted: Sat Nov 08, 2014 12:23 am
by Mario_r4
haitaka wrote:Спасибо. Но всех ответов я, к сожалению, найти не смог.
Где всё-таки хранить такие маленькие значения? Записать подряд битами и после мучаться с масками, или выделить под каждое по байту/двойному слову?
Делайте как вам удобней - никто вас в вашей программе не ограничивает. Сделать "сразу все правильно" задача не реалистическая.

Re: ряд вопросов по FASM

Posted: Thu Nov 13, 2014 6:52 pm
by Serge
haitaka
Это зависит от размера массива. Если он в несколько раз превышает размер кеша CPU и требуется быстрый произвольный доступ к записям стоить подумать над оптимизацией. В твоём случае я бы хранил 4-х битные индексы в таблице значений (если я правильно понял условия задачи) если в массиве было бы за миллион записей.

Re: ряд вопросов по FASM

Posted: Fri Nov 14, 2014 4:25 pm
by haitaka
Serge
Спасибо. Теперь примерно понимаю, что мне нужно.

Re: ряд вопросов по FASM

Posted: Thu Nov 20, 2014 1:40 am
by punk_joker
Аналогично в записи dword[devbuf+8] восьмёрка прибавляется не к адресу буфера (это было бы [devbuf]+8, но такой инструкции тоже нет), а к адресу адреса. Если devbuf указывает на зарезервированное двойное слово, то devbuf+8 будет указывать на 8 байт после него, т.е. куда-то за переменную dir. Что лежит по этому адресу неясно. Тут тоже нужно использовать промежуточный регистр <<<<

mov eax, [devbuf]
add eax, 8

Так верно?

Re: ряд вопросов по FASM

Posted: Thu Nov 20, 2014 2:34 am
by Mario_r4
punk_joker
Ты лучше на русском языке скажи чего ты хочешь выполнить, а то этот поток мыслей трудно разобрать.

Re: ряд вопросов по FASM

Posted: Thu Nov 20, 2014 6:21 am
by dunkaist
Я уже забыл, о чём речь, но должно быть верно; в отладчике посмотри.

Posted: Thu Nov 20, 2014 12:02 pm
by punk_joker
Как правильно прочитать папку?
Насколько я понимаю, надо в начале определить коичество файлов в папке. Это можно сделать вызвав ф70.1 с 0 в 5 поле структуры, те самым прочитав лишь заголовок в 32 байта, оттуда взять количество фацлов в папке, и на основе этого уже выделить необходимое количество память под буфер, и передать это число, как количество блоков,которые надо прочитать.

Re: ряд вопросов по FASM

Posted: Thu Nov 20, 2014 1:22 pm
by Mario_r4
punk_joker
Да, все верно.

Re: ряд вопросов по FASM

Posted: Fri Nov 28, 2014 9:49 pm
by punk_joker
Имеется задача, получить список имеющихся дисков. После неудачных попыток и глупых вопросов тут, я все же более внимательно просмотрел существующие примеры работы с ФС на SVN (в частности OpenDialog) и все же получил работающий код, но результат немного не тот что я ожидал. После выполнения кода приведенного ниже, в eax я получаю 75. при количестве дисков 6. В чем проблема?

Код:
Spoiler:mcall 68, 12, 32
mov [dirinfo.return], eax
mcall 70, dirinfo
mov eax, [dirinfo.return]
mov eax, [eax+8]
Переменные
Spoiler: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