• Команды COSMAC ELF 1802?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Сначала идёт команда 7A - погасить лампочку. Команда загружает в регистр R0 число 2. Почему?

    Поскольку у тебя P = 0, то R(0) используется как program counter. Инструкция 7А должна его увеличить на 1, т.е. после неё в R(0) должно быть 1.

    Далее идёт команда F8 Описание этой команды M(R(P)) → D; R(P) + 1 → R(P)
    Команда F8 загружает в регистр F8 число 3, хотя команда, судя по описанию, должна прибавлять к регистру R0 число 1 и сохранять результат в R0, значит в R0 должно оказаться число 1.

    Нет, не так. Сначала команда загружается в регистры I и N, а R(0) увеличивается на 1. После этого достаётся байт из памяти по адресу R(0) и помещается в D, а R(0) увеличивается ещё на 1.

    Дизассемблированная программа:
    0: 7A -- reset Q (Q = 0)
    1: F8 -- ldi 10 (D = 10)
    2: 10
    3: B1 -- phi 1 (R(1).1 = D, т.е. R(1) = 1000)
    4: 21 -- dec 1 (R(1) = R(1) - 1, т.е. R(1) = fff)
    5: 91 -- ghi 1 (D = R(1).1, т.е. D = f)
    6: 3A -- bnz 4 (переход к адресу 4, пока D != 0)
    7: 04
    8: 31 -- bq 0 (переход к адресу 0 если Q == 1)
    9: 00
    a: 7B -- set Q (Q = 1)
    b: 30 -- br 1 (переход к адресу 1)
    с: 01
    d: 00 -- idle (никогда не попадаем сюда).


    В середине просто цикл задержки на счётчике.
    Ответ написан
    Комментировать
  • Есть ли возможность узнать информацию по ветке на удалённом сервере без fetch?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть ли возможность узнать информацию по ветке на удалённом сервере без fetch?

    Ограниченная. См. git ls-remote.

    как из консоли узнать имя последнего коммита в ветке на сервере?

    Можно узнать хеш:
    $ git ls-remote origin refs/heads/master
    2595646791c319cadfdbf271563aac97d0843dc7        refs/heads/master
    Ответ написан
    Комментировать
  • Компиляция приложения для Андроид на Ubuntu?

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

    Ошибка означает, что clang либо clang++ не знает архитектуру armv7-a. Подозреваю, что собираешь ты на x86 и clang и clang++ -- компиляторы для x86. Если так, надо заменить CC=clang и CXX=clang++ на имена кросс-компиляторов под arm.
    Ответ написан
    Комментировать
  • Как работает остаток от деления (%) с переменными типа int?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    int pin = (ms / 120) % 10;
    Как работает данный код с переменными int?

    Делит ms на 120 (так что результат равен 0 в период [0..120[ мс, 1 в период [120..240[ мс. итд), а потом берёт остаток от деления результата на 10 (так, что результат меняется циклически в пределах [0..10[ ).

    Как будет отличаться от работы с другим типом переменных (к примеру нецелочисленных)?

    Никак. Встроенный оператор % работает только с целыми числами.
    Ответ написан
  • "Нечитаемый" код?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    for(char* pnew_char = new_char; *pnew_char++ = *--pchar;);

    Этот цикл работает неправильно, потому что выход из него происходит по воле случая, в зависимости от мусора, оказавшегося перед строкой, на которую указывает pchar.

    for(; *pchar; ++length, ++pchar);

    Делать так (писать цикл с пустым телом и точкой с запятой на той же строке) не стоит, потому что легко не заметить эту точку с запятой или её отсутствие.

    for(char* pnew_char = new_char; *pnew_char++ = *--pchar;);

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    if (strcmp(name1, name2) == 1)

    man strcmp
    The strcmp() and strncmp() functions return an integer less than,
           equal to, or greater than zero if s1 (or the first n bytes thereof)
           is found, respectively, to be less than, to match, or be greater than
           s2.

    Для проверки на равенство должно быть
    if (strcmp(name1.c_str(), name2.c_str()) == 0)
    Ответ написан
    2 комментария
  • Как управлять кэшем процессора?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть программа - она выполняет математические операции. ОЗУ занимает очень много. Больше 25 Гб. Но есть запас ОЗУ.
    Когда в кэш процессора данные подгрузились - операции выполняются быстро.

    Я тоже хочу кэш процессора больше 25ГБ, но в твоём случае кэш процессора точно ни при чём.

    Вопрос - что делать с кэшем?

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

    Если хочется застолбить массив в физической памяти -- смотреть на VirtualLock.
    Ответ написан
    5 комментариев
  • Как вывести символ через канал?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В каком месте может быть ошибка?

    man pipe: писать можно только в fd[1], читать -- только из fd[0].
    Канал однонаправленный, т.е. для двунаправленной коммуникации нужно открывать два канала.
    Должно быть так:
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <sys/wait.h> 
    
    int main(int argc, char **argv) {
    
            int fd0[2], fd1[2], n;
            char c;
            pipe(fd0);
            pipe(fd1);
    
            if (!fork()) {
                    close(fd0[0]);
                    close(fd1[1]);
    
                    write(fd0[1], "c", 1);
    
                    sleep(1);
    
                    if ((n = read(fd1[0], &c, 1)) != 1) {
                            printf("Дочерний процесс. Результат чтения: %d\n", n);
                            exit(0);
                    }
    
                    printf("Дочерний процесс прочитал: %c\n", c);
                    exit(0);
            }
            close(fd1[0]);
            close(fd0[1]);
                                                                                                                                                                                                                                                                              
            write(fd1[1], "p", 1);
            if ((n = read(fd0[0], &c, 1)) != 1) {
                    printf("Родительский процесс. Результат чтения: %d\n", n);
                    exit(0);
            }
    
            printf("Родительский процесс прочитал: %c\n", c);
            exit(0);
    
            return 0;
    }
    Ответ написан
    3 комментария
  • Максимальное кол-во папок в одной папке (ext4)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Максимальное кол-во папок в одной папке (ext4)?

    Нет ограничения.
    Есть ограничение на общее количество файлов в одной файловой системе -- 2^32, их все можно свалить в один каталог.
    Ответ написан
    4 комментария
  • Как восстановить ветку из слияния?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    есть 2 ветки dev и feature-3. я слил ветку dev с feature-3 и запушил dev ветку на remote.
    Можно ли ветку feature-3?

    Если первая половина выглядела так:
    $ git checkout dev
    $ git merge --no-ff feature-3
    $ git push remote HEAD

    либо git merge feature-3 на втором шаге, и мёрж при этом не был фаст-форвардом, то вторую половину можно сделать так:
    $ git checkout dev
    $ git pull remote dev
    $ git checkout HEAD^2 -b feature-3

    Идея в том, что <id-мёржа>^<N> -- это голова ветки № N участвовавшей в этом мёрже.

    Если мёрж был фаст-форвардом, то dev и feature-3 -- это одно и то же.
    Ответ написан
    1 комментарий
  • Почему компиляция кода заканчивается с ошибкой?

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

    Чтобы они определялись должны быть установлены соответствующие -dev пакеты (т.е., например, чтобы определялся libpcsclite должен быть установлен libpcsclite-dev).
    Ответ написан
  • Как можно запретить merge ветки staging в ветку master?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Так-же если допустим нечаянно смержили ветку staging в master, как этот косяк откатить.

    git revert -m 1 <id-of-merge-commit>
    -m 1 означает, что при мёрже мастер был первой смёрженной веткой.

    По сути в master появилась куча разбросанных по времени коммитов, а как откатить я не знаю.

    Это только выглядит так, потому что по умолчанию git log сортирует коммиты по времени. Но содержимое смёрженных веток на самом деле нигде не перемешивается, git reset или git revert коммита соответствующего мёржу отменяет все коммиты из смёрженной ветки.
    Ответ написан
    Комментировать
  • Как поставить драйвера на сетевую карту Intel i219V?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    поставил Debian

    Какую версию?

    Сетевой контроллер: Intel i219V
    При установке ОС сетевую карту не нашел

    Эта сетевуха давно поддерживается в linux mainline.
    Что в dmesg после загрузки?
    Ответ написан
  • Зачем нужен fakeroot, при сборке deb-пакета?

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

    Например, обычный пользователь не может сделать chowh root:root для файла, которым он владеет:
    $ chown root:root test ; echo $?
    chown: changing ownership of 'test': Operation not permitted
    1

    fakeroot даёт приложению видимость того, что ошибки не происходит. Владелец файла при этом, конечно, не меняется:
    $ fakeroot chown root:root test ; echo $?
    0
    $ ls -la test
    -rw-rw-r--. 1 jcmvbkbc jcmvbkbc 1709 Jun  1  2011 test

    Всё.

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

    Почему в мануалах пишут так:
    fakeroot dpkg-deb --build ./path
    а вот так тоже работает:
    dpkg-deb --build ./path

    Потому что во время сборки пакета не выполнялись команды, которым нужны привилегии, либо ошибки их выполнения были проигнорированы.

    Андрей Буров, pfg21 всякие "песочницы", "не пускает во внешний мир", "скрипт может раскидать бинарники по системе, песочница его не выпустит" применительно к fakeroot -- это фантазия. Сборка пакетов может и должна производиться под обычным пользователем. Штатная система привилегий заботится о том, что приложение, запускаемое под непривилегированным пользователем ничего не сломало.
    Ответ написан
    8 комментариев
  • Как увидеть входные параметры ассемблер?

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

    Гуглить словосочетание "имя целевой процессорной архитектуры" + ABI.
    Например: x86_64 abi, x86 abi, arm64 abi...
    В найденном документе искать раздел "parameter passing", "function calling" или с похожим по смыслу названием.
    Ответ написан
    2 комментария
  • Пеhенос скомпилированного модуля ядра Linux на другую машину?

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

    Можешь. Но загрузить такой модуль без проблем ты сможешь только если совпадают версии ядра и основные опции в .config ядра. Ну либо если отключишь проверку версии модулей в конфиге. Иначе -- только modprobe --force.
    Ответ написан
    2 комментария
  • Ассемблер что не так с кодом?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    что не так?

    В видеорежиме 100h нет гарантии, что вся видеопамять доступна одним непрерывным куском. И если вызвать функцию 0x4f01 прерывания 0x10, то она вернёт структуру, в которой указан размер окна. Мне она возвращает 64К (0x40), что существенно меньше 640 * 400 = 256000:
    0x7c00:      mov    $0x4f01,%ax
       0x7c03:      mov    $0x100,%cx
       0x7c06:      mov    $0x7c77,%di
       0x7c09:      int    $0x10
    (gdb) x/6hx $di
    0x7c77: 0x00bb  0x0007  0x0040  0x0040  0xa000  0x0000

    Чтобы обратиться к остальной видеопамяти, нужно либо переключать банки видеопамяти функцией 0x4f05, либо как-то включать линейный доступ к видеопамяти.
    Ответ написан
    Комментировать
  • Почему программа вылетает при попытке выделить память с помощью new?

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Все хорошо, но алгоритм не верно работает с унарным отрицанием.

    Он и не рассчитан на работу с унарным отрицанием.
    Как исправить?

    Проще всего -- введя для унарного отрицания специальный символ, отличный от остальных операторов.
    Иначе придётся вводить дополнительное состояние -- был ли предыдущий символ и был ли он оператором, и если так, то трактовать непосредственно следующий за ним оператор '-' как унарный.
    Ответ написан
    2 комментария
  • Assembler как работать с видеопамятью в защищенном режиме?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему-то закрашивается лишь меньшая часть екрана.

    По многим причинам:
    - ты забыл загрузить ds и es после перехода в защищённый режим
    - тебе нечем их загрузить, поскольку в gdt нет сегментов доступных для записи
    - адрес видеопамяти -- 0xa0000, а на 0xa000 как у тебя
    Ответ написан
    4 комментария