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

Assembler programming questions
  • В процессе изучения ассемблера и попыток написать что-нибудь возник вопрос: Как оптимальнее хранить в памяти большое количество (11 значений на структуру) переменных из конечного множества значений (2-15 значений).
    И если чем-то вроде Record, то как лучше реализовать?
  • haitaka
    Нужно хранить одну структуру или массив структур?
  • Asper
    Массив
  • Прочти эту тему, начиная отсюда.
  • Спасибо. Но всех ответов я, к сожалению, найти не смог.
    Где всё-таки хранить такие маленькие значения? Записать подряд битами и после мучаться с масками, или выделить под каждое по байту/двойному слову?
  • haitaka wrote:Спасибо. Но всех ответов я, к сожалению, найти не смог.
    Где всё-таки хранить такие маленькие значения? Записать подряд битами и после мучаться с масками, или выделить под каждое по байту/двойному слову?
    Делайте как вам удобней - никто вас в вашей программе не ограничивает. Сделать "сразу все правильно" задача не реалистическая.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • haitaka
    Это зависит от размера массива. Если он в несколько раз превышает размер кеша CPU и требуется быстрый произвольный доступ к записям стоить подумать над оптимизацией. В твоём случае я бы хранил 4-х битные индексы в таблице значений (если я правильно понял условия задачи) если в массиве было бы за миллион записей.
  • Serge
    Спасибо. Теперь примерно понимаю, что мне нужно.
  • Аналогично в записи dword[devbuf+8] восьмёрка прибавляется не к адресу буфера (это было бы [devbuf]+8, но такой инструкции тоже нет), а к адресу адреса. Если devbuf указывает на зарезервированное двойное слово, то devbuf+8 будет указывать на 8 байт после него, т.е. куда-то за переменную dir. Что лежит по этому адресу неясно. Тут тоже нужно использовать промежуточный регистр <<<<

    mov eax, [devbuf]
    add eax, 8

    Так верно?
    to infinity and beyond
  • punk_joker
    Ты лучше на русском языке скажи чего ты хочешь выполнить, а то этот поток мыслей трудно разобрать.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Я уже забыл, о чём речь, но должно быть верно; в отладчике посмотри.
  • Как правильно прочитать папку?
    Насколько я понимаю, надо в начале определить коичество файлов в папке. Это можно сделать вызвав ф70.1 с 0 в 5 поле структуры, те самым прочитав лишь заголовок в 32 байта, оттуда взять количество фацлов в папке, и на основе этого уже выделить необходимое количество память под буфер, и передать это число, как количество блоков,которые надо прочитать.
    to infinity and beyond
  • punk_joker
    Да, все верно.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Имеется задача, получить список имеющихся дисков. После неудачных попыток и глупых вопросов тут, я все же более внимательно просмотрел существующие примеры работы с ФС на 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
    to infinity and beyond
  • Who is online

    Users browsing this forum: No registered users and 1 guest