эффективно именно по размеру
simd? /CMPSB
Cmpsb
repnz cmpsb?
после чего jnz .notEqual?
еще вот такое есть https://www.felixcloutier.com/x86/pcmpestri
Надо в mov ecx , размер строки str.sizeof = $ - str Зачем repe cmpsb и так все байты сравняться, кроме 0 мб
ээ, мне кажется это попроще можно сделать
Ты расскажи, что сделать надо
сравнить две сишные строки. чем можно меньше инструкций, изначальная их длина не известна
Ну вот я идеально привел код
изначальная длина строк неизвестна
чзх? asciiz это теперь слабость?
Мы вычисли начальный адресс str.sizeof = $ - str
хотя бы у одной строки размер известен?
я говорю строки произвольной длины, они вводятся с клавиатуры!
Если ты введешь меньше 4 млрд , то все получится
понятное что меньше, там до 256, но сравнить надо, и максимально компактно
Такая конструкция всегда будет ссылаться на начало массива (строки), вот и любой размер и сравниться
так, и какой суффикс для j использовать? z? e? b?
тогда тупой цыкл или теребить avx/simd compare_loop: ; Загрузка 32 байтов из каждой строки в ymm-регистры vmovdqu ymm0, [rsi] vmovdqu ymm1, [rdi] ; Сравнение ymm-регистров vpcmpeqb ymm2, ymm0, ymm1 ; Создание маски из результата сравнения vpmovmskb eax, ymm2 ; Проверка, все ли байты равны cmp eax, 0xFFFFFFFF jne strings_not_equal ; Проверка на конец строки ; Создание маски для конца строки vpcmpeqb ymm3, ymm0, ymmword [zeroes] ; Объединение масок vpor ymm2, ymm2, ymm3 ; Создание маски из результата объединения vpmovmskb eax, ymm2 ; Проверка на конец строки test eax, eax jnz strings_equal ; Переход к следующим 32 байтам add rsi, 32 add rdi, 32 jmp compare_loop credit to chatДЦП
0. OSdev это сложно и требует умения читать, отлаживать и рыться в железе Самостоятельно. Вы предупреждены
задача: уложится в две инструкции так же квадрат:
Не читая уже понимаю что там ппц
это не касается осдева ну никак. я не ос пишу в данный момент. это вопрос чисто по асму
Z скорее всего, там тогда zf равно 0 https://metanit.com/assembler/nasm/3.10.php
как предложил alexey, сначала repnz cmpsb
это касается всего и чем раньше поймёте, тем лучше. Ищите информацию сами
в любом случае там будет болше 2
ровно 2 инструкции
то есть я уже не могу быстрой помощи спросить в чате? нахера он тогда вообще существует? чтобы люди такие высеры писали?
repnz cmpsb jnz notEqual
забыли mov ecx, size и обработку нуля
вот, вы даже не видите в чём вас будет ошибка
ну так оно будет сверять пока не увидит нуль
оно будет сверять пока не найдёт различия между буферами или пока не закончится размер буфера в ecx
так там же repnz
вот по этому я поддерживаю действия беркуса, за такое надо в мут на пару дней или отправлять в интел ман
я в рф, напоминаю
intel leaved us
хорошо, идите в амд ман
Тебе не хватает тех девяти версий мануала, которые лежат в этом чате?
я просто заменил cmp на sca и всё заработало
напишите пожалуйста список софта в котором вы что-то меняли, чтобы не дай бог не скачать
Это потому что надо было repz, а не repnz
зач? repnz scasb и всё воркает идеально)
я имею в виду когда было cmps
@Doczom, работает — не трогай!
напишите список вашего или модифицированного вами софта, чтобы случайно не скачать
Самая не любимая поговорка
Потому что у тебя ничего не работает?)
у меня на ней драйвер работает, так что очень даже хорошая
Потому что я люблю копаться во всем
У меня тоже не любимая. Мне вообще не нравится вот этот ITшный каламбур насчёт того, что в IT постоянно всё не работает. Это как-то жалко выглядит.
Это обычно относится к тому чтобы все переделать так, чтобы оно начало работать лучше
так это везде так: рванёт? не должно. А чего отходишь?
А мне вот и не нравится как раз. Особенно когда это неуместно. Это придаёт неуверенность.
так это буквально везде
Да где везде то... Это в студенческие годы обычно только, и там это оправданно. А когда взрослый человек стоит, и во время тестирования чего-то начинает говорить "Сейчас рванёт, сейчас крашнется, сейчас сломается". Это как-то тупо выглядит.
с железом походу только так и можно работать, никогда не знаешь где оно решит сломаться
Даже если не знаешь, лучше сделать умное лицо, и не ждать ошибок. А когда ошибка вылезает - не переводить это в шутку.
У нас неиронично был 100% воспроизводимый баг, который решался припаиванием конденсатора.
а как не засмеяться когда от одной простенькой ошибки в драйвере каскадом упало ядро ос, поток в прерывании и какого-то чёрта taskbar
Проблема в питании? Вы просто сглаживали импульсы?
и после этого поток с файловым менеджером всё ещё жив
У нас по UART передавались бинарные команды для управления мотором. Они были размером до ~30 байт обычно. Но была одна отладочная со статистикой, которая имела размер больше 500 байт. И именно в ней были битые данные, причем стабильно определенные поля. Решилось припаиванием кондея, видимо действительно пульсации были, которые вот так странно влияли
Обсуждают сегодня