Сегодня же вечером сяду перечитывать раздел. Просто у меня проблема с пониманием адресации немного. Я и в C++ с указателями не сдружился. Пора браться за проблему серьезно.Mario_r4 wrote:имхается мне нужно тебе сесть и разобраться с методами адресации, чую Юрова ты либо не читал, либо просматривал по диагонали.
ряд вопросов по FASM
-
to infinity and beyond
В процессе изучения ассемблера и попыток написать что-нибудь возник вопрос: Как оптимальнее хранить в памяти большое количество (11 значений на структуру) переменных из конечного множества значений (2-15 значений).
И если чем-то вроде Record, то как лучше реализовать?
И если чем-то вроде Record, то как лучше реализовать?
haitaka
Нужно хранить одну структуру или массив структур?
Нужно хранить одну структуру или массив структур?
Asper
Массив
Массив
Прочти эту тему, начиная отсюда.
Спасибо. Но всех ответов я, к сожалению, найти не смог.
Где всё-таки хранить такие маленькие значения? Записать подряд битами и после мучаться с масками, или выделить под каждое по байту/двойному слову?
Где всё-таки хранить такие маленькие значения? Записать подряд битами и после мучаться с масками, или выделить под каждое по байту/двойному слову?
Делайте как вам удобней - никто вас в вашей программе не ограничивает. Сделать "сразу все правильно" задача не реалистическая.haitaka wrote:Спасибо. Но всех ответов я, к сожалению, найти не смог.
Где всё-таки хранить такие маленькие значения? Записать подряд битами и после мучаться с масками, или выделить под каждое по байту/двойному слову?
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
haitaka
Это зависит от размера массива. Если он в несколько раз превышает размер кеша CPU и требуется быстрый произвольный доступ к записям стоить подумать над оптимизацией. В твоём случае я бы хранил 4-х битные индексы в таблице значений (если я правильно понял условия задачи) если в массиве было бы за миллион записей.
Это зависит от размера массива. Если он в несколько раз превышает размер кеша CPU и требуется быстрый произвольный доступ к записям стоить подумать над оптимизацией. В твоём случае я бы хранил 4-х битные индексы в таблице значений (если я правильно понял условия задачи) если в массиве было бы за миллион записей.
Serge
Спасибо. Теперь примерно понимаю, что мне нужно.
Спасибо. Теперь примерно понимаю, что мне нужно.
Аналогично в записи dword[devbuf+8] восьмёрка прибавляется не к адресу буфера (это было бы [devbuf]+8, но такой инструкции тоже нет), а к адресу адреса. Если devbuf указывает на зарезервированное двойное слово, то devbuf+8 будет указывать на 8 байт после него, т.е. куда-то за переменную dir. Что лежит по этому адресу неясно. Тут тоже нужно использовать промежуточный регистр <<<<
mov eax, [devbuf]
add eax, 8
Так верно?
mov eax, [devbuf]
add eax, 8
Так верно?
to infinity and beyond
punk_joker
Ты лучше на русском языке скажи чего ты хочешь выполнить, а то этот поток мыслей трудно разобрать.
Ты лучше на русском языке скажи чего ты хочешь выполнить, а то этот поток мыслей трудно разобрать.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Я уже забыл, о чём речь, но должно быть верно; в отладчике посмотри.
Как правильно прочитать папку?
Насколько я понимаю, надо в начале определить коичество файлов в папке. Это можно сделать вызвав ф70.1 с 0 в 5 поле структуры, те самым прочитав лишь заголовок в 32 байта, оттуда взять количество фацлов в папке, и на основе этого уже выделить необходимое количество память под буфер, и передать это число, как количество блоков,которые надо прочитать.
Насколько я понимаю, надо в начале определить коичество файлов в папке. Это можно сделать вызвав ф70.1 с 0 в 5 поле структуры, те самым прочитав лишь заголовок в 32 байта, оттуда взять количество фацлов в папке, и на основе этого уже выделить необходимое количество память под буфер, и передать это число, как количество блоков,которые надо прочитать.
to infinity and beyond
punk_joker
Да, все верно.
Да, все верно.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Имеется задача, получить список имеющихся дисков. После неудачных попыток и глупых вопросов тут, я все же более внимательно просмотрел существующие примеры работы с ФС на SVN (в частности OpenDialog) и все же получил работающий код, но результат немного не тот что я ожидал. После выполнения кода приведенного ниже, в eax я получаю 75. при количестве дисков 6. В чем проблема?
Код:
mov [dirinfo.return], eax
mcall 70, dirinfo
mov eax, [dirinfo.return]
mov eax, [eax+8]
Переменные
.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
Код:
Spoiler:
mcall 68, 12, 32mov [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
to infinity and beyond
Who is online
Users browsing this forum: No registered users and 0 guests