• Ассемблер, я правильно понимаю что по умолчанию в регистрах 0x00?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    А если принять к факту, что по умолчанию в регистрах хранится значение 0x00

    Ничего в регистрах "по умолчанию" не хранится, кроме того, что в них в последний раз было записано.

    я попробовал ничего не записывать в регистр AH и вызвать прерывание 0x16, значит по умолчанию в регистре 0x00.

    Нет, это значит только то, что в этом месте твоей программы в этот раз в регистре AH был 0.

    в подпрограмме read_keyboard почему то не сохраняют регистр AX

    Потому что результат возвращают в нём.

    почему сохранили регистр BX - я не понял

    …а также cx, dx, si и di. При том, что функция 0 int 16 меняет только AX. Я думаю, что на всякий случай их сохранили, для надёжности.
    Ответ написан
    Комментировать
  • Где изучить ASL?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    1 комментарий
  • Вызов функции C в другом файле. Как реализовать?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Код выглядит нормально. Разбирайся с тем как выполняется сборка проекта. Похоже, что проект не линкуется с main.o
    Ответ написан
    Комментировать
  • Проблема с перестановками строк?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    array[pair[0]][1]=array[pair[1]][i];

    Ошибка здесь. Вместо первой 1 должна быть i.
    Ответ написан
  • Не удаётся найти “libc.so.6” при запуске Python скрипта в Termux на Android?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    выводится ошибка dlopen failed library libc.so.6 not found. Как исправить данную ошибку?

    наиболее правильным решением было бы использовать android NDK для сборки всех бинарников (типа _pytransform.os) которые будут запускаться на устройстве. Версия бинарников которая у тебя есть сейчас похоже собрана под традиционный линукс с glibc.
    Ответ написан
    Комментировать
  • Как заменить драйвер устройства находящегося в локальной сети?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Возможно ли это сделать на практике?

    Всё зависит в первую очередь от устройства "зайчика". В каких-то реализациях это может быть невозможно, в других -- возможно, но сложность может отличаться на порядки (от "существует готовый рецепт, требующий только написания кода" до "потребуется паяльник, осциллограф, анализатор сигналов, …").
    Универсального ответа нет, дать ответ без исследования железа невозможно.
    Ответ написан
    Комментировать
  • Можно ли запустить bash-скрипт в текущем процессе?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Однако я не могу получить доступ к любой из инициированных скриптом переменных в текущем процессе. Как я понимаю, это происходит потому, что скрипт выполняется отдельным процессом, а возможности экспортировать переменную на уровень выше нет.

    Непонятно, каково отношение между "скриптом" и "текущим процессом". Кто кого запускает?

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    - кол-во обращений к кэшу, если кэш прямого отображения,
    - кол-во обращений к кэшу, если кэш полностью ассоциативный.
    Подскажите пожалуйста, как такое считается.

    Нужно сначала узнать, что такое "кэш прямого отображения" и "полностью ассоциативный кэш". Об этом ожно почитать, например, здесь.
    После этого надо посмотреть, какая последовательность адресов при обращении к памяти генерируется программой и посчитать, какие из этих обращений попадают в память, а какие -- в уже загруженные линии кэша.

    Если массив int test[512]; занимает 2048 байт памяти (sizeof(int) == 4), тогда он полностью умещается в заданный кэш и разницы между кэшем прямого отображения и полностью ассоциативным не будет. Внутренний цикл обращается к элементам массива, лежащим в разных кэш-линиях (поскольку 16(шаг цикла) * sizeof(int) > 16(размер кэш-линии)). т.е. каждое обращение внутреннего цикла пойдёт в память на первой итерации внешнего цикла. На второй и последующих итерациях внешнего цикла все обращения из внутреннего цикла пойдут в кэш. Т.е. всего обращений в кэш будет 9 * (512 / 16).
    Ответ написан
    Комментировать
  • Кросс-компиляция под arm и исходники ядра?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Или процесс создания linux headers настолько специфичен?

    Нет. userspace интерфейс ядра изо всех сил старается сохранять обратную совместимость. Т.е. если построить тулчейн с использованием хедеров какой-то версии ядра, собранные им бинарники будут работать (а если не будут, то есть основания зарепортить это как баг ядра) и на более новых ядрах.
    Ответ написан
    Комментировать
  • Как процессор распознает длину команды?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как процессор может отличить длину команды (1, 2, и 3 байт), чтобы выполнить следующую команду ?

    По коду операции -- части команды, которая кодирует действие команды. В процессоре закодировано соответствие кода операции и длины команды. Код операции может полностью содержаться в первом байте команды (как в 8080), либо может быть распределён между несколькими байтами команды. В последнем случае часть кода операции находящаяся в первом байте должна отличаться от кода операции любой однобайтовой команды чтобы их можно было отличить.

    Почему кроме команды Остановить все команды занимают 3 байта?

    Если речь о 8080, то это утверждение неверно. В 8080 есть несколько однобайтовых команд (nop, битовые сдвиги и вращения, push/pop, и т.д.), несколько двухбайтовых (mvi и арифметика с непосредственными значениями -- adi, aci, и т.д.) и несколько трёхбайтовых (команды с прямой адресацией -- lda, sta, и т.д., переходы, вызовы подпрограмм и т.д.). Потому что значения, с которыми оперируют команды находятся в байтах следующих за первым -- в одном, если нужен 1-байтовый операнд и в двух если нужен 2-байтовый операнд или адрес.

    Как происходить выборка команды? Как найти логическую схему выборки команды?

    Можно посмотреть в исходники отреверсированного 8080.
    Ответ написан
    Комментировать
  • Почему в цикле While read не вся строка присваивается переменной?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    на выходе получаю архивы только с фамилией, а не со всей строкой(

    добавь кавычки:
    #!/bin/bash
    while read REPLY; do
    zip -r "/nichego/$REPLY" /archivs/* ;
    done < fio.txt
    Ответ написан
  • Почему самопроизвольно останавливается HDD в Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Можно начать с просмотра через hdparm параметров Advanced Power Management (hdparm -B) и Automatic Acoustic Management (hdparm -M) и установки их на максимум (254 или 255, зависит от диска), если они ещё не там.
    Ответ написан
  • Как сделать подробное описание коммита git?

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

    Есть команда специальная в гите. git commit называется.
    Ответ написан
  • Как реализовать на с или assembler асинхронную выборку из RAM?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как реализовать на с или assembler асинхронную выборку из RAM?

    Например так. Это часть реализации memcpy для MIPS. Этот код не выглядит асинхронным, но написан именно так (сначала групповая загрузка в разные регистры, потом изменение базового адреса загрузки, потом групповое сохранение, потом изменение базового адреса сохранения) с рассчётом на то, что процессор сможет, в том числе, перекрыть во времени операции загрузки, арифметики и сохранения данных.
    Ответ написан
    2 комментария
  • Как происходит работа с short в asm?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    00000234: xori r16,r16,32768
    00000238: addi r16,r16,-32768

    Это классическое расширение знакового бита, в данном случае для 16-битного числа: если бит 15 был установлен (число отрицательное), то после xor он будет сброшен (т.е. он и все биты старше него станут нулями), а после addi бит 15 и все старше него станут единицами. Если бит 15 был сброшен (число неотрицательное), то после xor он будет установлен, а после addi -- сброшен опять.

    Подскажите пожалуйста смысл таких преобразований?

    Знаковое расширение -- это часть short right = acum & 65535;. Оно нужно для того, чтобы работать с загруженными в регистры значениями не задумываясь об исходной ширине их типа данных. Т.е. (short)-1 в 64-битном регистре будет представлен как 0xffffffffffffffff, а не как 0xffff.
    Ответ написан
    Комментировать
  • Bash Script работает некорректно, почему?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Bash Script работает некорректно, почему?
    #!/bin/sh
    В чем может быть проблема?

    Потому что это не bash скрипт. bash скрипт начинается словами #!/bin/bash. Твой скрипт хочет чтобы его выполнял /bin/sh, а он не обязан быть башем.
    Ответ написан
    1 комментарий
  • Include/header guards зачем?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Зачем нужны header guards если в заголовочных файлах мы пишем только объявление функции?

    Не всегда мы пишем только объявления. Иногда мы там пишем определения, например определяем структуры, или псевдонимы типов (typedef). Повторное определение таких вещей -- ошибка. Тут ты можешь сказать: "но я подключаю хедер в каждый исходник только один раз". Да, пока проект простой можно это отследить. Но когда одни хедеры начинают подключать другие хедеры это становится делать сложнее. header guards упрощают развитие проекта.
    Иногда между хедерами бывают циклические зависимости, header guards позволяют разорвать цикл.
    Ответ написан
    Комментировать
  • Как собрать nginx в rhel8?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    --with-pcre=/usr/lib64/

    cd /usr/lib64/ \
    && if [ -f Makefile ]; then make distclean; fi \
    && CC="cc" CFLAGS="-O2 -fomit-frame-pointer -pipe " \
    ./configure --disable-shared

    Из этого лога следует, что параметром --with-pcre ожидается путь к исходникам PCRE, а не к установленным либам. И судя по этому, так оно и есть.
    Ответ написан
    1 комментарий
  • Почему при записи в /proc/ система зависает?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    static struct file_operations process_sched_add_module_fops = {
    …
    proc_create(PROC_CONFIG_FILE_NAME,0777,NULL,&process_sched_add_module_fops);

    Я думаю, что это основная ошибка: proc_create принимает указатель на структуру proc_ops, а не на file_operations. Компилятор должен был бы что-нибудь сказать в этом месте, ты не читаешь его предупреждения?

    static ssize_t process_sched_add_module_write(struct file *file, const char *buf, size_t count, loff_t *ppos)

    А здесь ты потерял аннотацию __user у параметра buf. Этот буфер приходит из юзерспейса, по этой причине ты не можешь лезть в него напрямую функцией kstrtol.
    Ответ написан