Задать вопрос
  • Есть ли у регистров адреса как у памяти?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть ли у регистров адреса как у памяти?

    Адреса есть (и эти адреса кодируются в инструкциях обращающихся к регистрам напрямую), но обычно не как у памяти. Наличие у регистров адресов как у памяти зависит от архитектуры. Кроме упомянутого AVR такая фича есть, например, у 8051.

    Почему нет?

    Потому что доступ к памяти и доступ к регистрам устроены сильно по-разному в серьёзных процессорах.
    Ответ написан
    Комментировать
  • Правильно ли я хочу использовать либы в ассемблере?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Это нормально так сочетать библиотеки с ассемблером?

    Вполне.
    Ответ написан
    Комментировать
  • Как программа получает ввод?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Здесь нет ни putchar(), ни scanf(), ни тому подобного.

    есть c = getchar().

    ОТКУДА программа получает ввод?

    из стандартного потока ввода, откуда getchar читает символы.
    Ответ написан
    Комментировать
  • Зачем использовать системный вызов poll для ожидания события от драйвера?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему бы сразу не блокировать поток вызовом read и не ждать пока данные будут доступны


    Если поток только читает, то действительно, на первый взгляд необходимости в вызове poll не видно.

    (в голову приходит только один вариант, когда необходимо принудительно прихлопнуть поток и если использовать таймаут, то не требуется прерывать системный вызов, хотя если принудительно завершить поток, то ядро по идее само прервет системный вызов)


    Если системный вызов втыкается в ожидание в драйвере, то драйвер сам решает, прерываемо это ожидание или нет. Может быть драйвер реализует операцию poll с возможностью прерывания, а read -- без.
    Ответ написан
    Комментировать
  • Синхронизация ресурсов в драйвере при системных вызовах?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В момент, когда функция read блокирована (по факту системный вызов (syscall) не вернул результат в пользовательское пространство), то при вызове другого системного вызова того же драйвера, например, write, необходимо ли в самом драйвере синхронизировать общие данные, которые используются и в read и в write?

    Да.

    Или выполнение системных вызовов как-то гарантировано регламентировано и прерывания отключены

    Нет, вообще никак не регламентировано.
    Ответ написан
  • Как правильно в регистр задать строку через at&t втроенным ассемблером?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я вижу вот такой рабочий вариант (и при этом не уверен в том, какой порядок байт имеется в виду в оригинальной инструкции):
    movl    ((((('V' << 8) + 'M') << 8) + 'X') << 8) + 'h', %eax
    Ответ написан
  • Как правильно накатить nano на git что бы ничего не сломать?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    из man git:
    GIT_EDITOR
               This environment variable overrides $EDITOR and $VISUAL.
               It is used by several Git commands when, on interactive mode,
               an editor is to be launched.
               See also git-var(1) and the core.editor option in git-config(1).

    Т.е.
    - можно глобально установить переменную окружения GIT_EDITOR
    - или в глобальном .gitconfig установить опцию editor в секции core
    - или в .git/config нужного репозитория установить опцию editor в секции core
    Ответ написан
    Комментировать
  • Как авторизоваться в Linux Kodachi?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Обобщённый способ решения подобных проблем -- загрузка ядра с параметрами rw init=/bin/sh, выполнение в появившейся оболочке команды passwd с желаемыми параметрами (например, passwd -d root) и продолжение загрузки командой exec /sbin/init.
    Ответ написан
  • Почему невозможно создать объект в стеке?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    ссылка на неразрешенный внешний символ "public: __thiscall MobilePhone::~MobilePhone(void)"
    почему просто из-за попытки создать экземпляр в стеке вообще должны вылазить какие-либо ошибки?

    Ты текст ошибки прочитал? Как ты думаешь, что происходит, когда заканчивается жизненный цикл объекта созданного на стеке (т.е. при выходе из main() в твоём случае)?
    Ответ написан
    Комментировать
  • Как мне ускорить процесс взаимодействия с консолью?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я перепробовал множество альтернатив команды printf

    вызовы функции printf(…) в этом коде вообще выглядят чужеродно, правильно было бы заменить их на fputs(…, stdout).

    Как я могу это ускорить?

    думаю, что никак: консольный вывод под виндой нетороплив по своей природе.
    Ответ написан
  • При компиляции, библиотека находится, при запуске объекта, библиотека не находится, в чём может быть причина?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    При компиляции, библиотека находится, при запуске объекта, библиотека не находится, в чём может быть причина?

    В том, что динамически загружаемые библиотеки ищутся по стандартным путям и по путям из LD_LIBRARY_PATH, а каким образом всё было слинковано -- не имеет значения?
    Ответ написан
  • Почему я не могу модифицировать оператор в своей DLL?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    я получаю ошибку E0345(Too few parameters for this operator function).
    extern "C" GRAPHICLIBRARY_API void operator*= (const Vector2 value);

    Оператор *= умножает что-то на что-то. А в этом прототипе у него только один параметр. Так что правильно компилятор говорит. См.

    А вот как в моём проекте в заголовек:
    void operator*= (const Vector2 value);

    Остаётся ещё добавить, что в твоём проекте этот прототип находится внутри какого-то класса и всё встанет на свои места.

    Подозреваю, что надо делать как-то так:
    extern "C" GRAPHICLIBRARY_API void operator*= (Vector2& left, const Vector2 right);
    Ответ написан
  • Бесконечный запрос ввода при вызове open()?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    понял, что проблема возникает при вызове open()

    Правильно понял. Цитата из man 7 fifo:
    Normally, opening the FIFO blocks until the other end is opened also.

    Чтобы вызов open вернулся и программа продолжила выполняться нужно открыть второй конец fifo на чтение.
    Ответ написан
    1 комментарий
  • Почему я получаю "unresolved external symbol"?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    extern "C" GRAPHICLIBRARY_API int SizeX;
    extern "C" GRAPHICLIBRARY_API int SizeY;

    //Ошибка ссылается на строки ниже:

    ScreenClass::SizeX = sizeX;
    ScreenClass::SizeY = sizeY;

    Разницу в регистре видишь?
    Ответ написан
  • Как создать в скрипте цикл while-do проверки, не пуст ли файл?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    проверять файл, пока не окажется, что он существует и не пуст

    Можно как-то так сделать:
    while [ ! -s "$file" ] ; do sleep 1 ; done

    While [проверка показывает, что файл или не существует или пуст]
    Do
    Проверить опять, есть ли файл и пуст ли файл
    Done

    это какой-то больно загруженный цикл, не надо так делать.
    Ответ написан
    1 комментарий
  • Как исправить ошибку при сборке DAHDI?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    При установке на CentOS 8, ядро 5.13.13 возникает следующая ошибка:
    /usr/src/dahdi-linux-complete-3.1.0+3.1.0/linux/drivers/dahdi/opvxa24xx/callerid.c:1235:40: ошибка: в передаче аргумента 4 «proc_create_data»: несовместимый тип указателя [-Werror=incompatible-pointer-types]
         proc_create_data(name, 0444, base, &proc_param_fops, data);
                                            ^~~~~~~~~~~~~~~~
    /usr/src/dahdi-linux-complete-3.1.0+3.1.0/linux/drivers/dahdi/opvxa24xx/callerid.c:1321:40: ошибка: в передаче аргумента 4 «proc_create_data»: несовместимый тип указателя [-Werror=incompatible-pointer-types]
         proc_create_data(name, 0644, base, &proc_param_off_fops, data);
                                            ^~~~~~~~~~~~~~~~~~~~


    Ага, в ядре успели переделать интерфейс proc. Проще всего закомментировать вызовы proc_create_data в строках linux/drivers/dahdi/opvxa24xx/callerid.c:1235 и linux/drivers/dahdi/opvxa24xx/callerid.c:1321
    Ответ написан
  • Как запустить эмулятор?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Помогите разобраться - хотя бы куда копать

    В mingw нет функции setenv.
    Возможные варианты действий:
    - посмотреть зачем эта функция используется и нельзя ли её заменить на что-нибудь другое;
    - собирать не под mingw а под что-нибудь другое (нативно/под WSL/под cygwin);
    - посмотреть не зарепорчен ли этот баг другими пользователями этого эмулятора, зарепортить если нет, посмотреть что скажут.

    Я посмотрел в код, можно поменять в файле SCP/sim_extension.c строку 4345 с #if defined (_MSC_VER) на #if defined (_MSC_VER) || 1.
    Ответ написан
    Комментировать
  • Как слайсить массив на баше?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    мой массив слайсится не так как нужно

    после второго двоеточия идёт длина а не индекс. Т.е. должно быть echo ${array[@]:$j:6}
    Ответ написан
    Комментировать
  • Как написать быстрое возведение в степень?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Не работает.

    (defun fastexpt-iter (n p a)
      (format t "n: ~A p: ~A a: ~A~%" n p a)
      (if (= 1 p)
        (* n a)
        (if (evenp p)
          (fastexpt-iter (* n n) (/ p 2) a)
          (fastexpt-iter n (1-  p) (* a n)))))
    
    (defun fastexpt (n p)
      (if (zerop p)
        1
        (fastexpt-iter n p 1)))

    так работает.

    Что я делаю не так?

    Не учитываешь, что при погружении в рекурсию n тоже может расти. Или неправильно интерпретируешь параметры fastexpt-iter. В моей интерпретации fastexpt-iter(n, p, a) = n ^ p * a.
    Ответ написан
    Комментировать
  • Как перевести inline assembler в файл?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    компилятор ругается что
    mov esi, CPUInfo
    mov eax, InfoType
    undefined

    Ну правильно ругается. Это же не глобальные имена и их же нет в ассемблерном исходнике?
    Можно поправить определение функции getCpuID вот так: getCpuID PROC PUBLIC, CPUInfo, InfoType.
    И стоит прочитать вот это чтобы представлять, как параметры передаются в функции и что ещё нужно делать, чтобы всё работало.
    Ответ написан
    Комментировать