169 похожих чатов

Как максимально эффективно сравнить две asciiz строки на ассемблере?

80 ответов

46 просмотров
Vi-Chapmann Автор вопроса

эффективно именно по размеру

Cmpsb

Vi-Chapmann Автор вопроса
Alexey
Cmpsb

repnz cmpsb?

Vi-Chapmann Автор вопроса
Vi Chapmann
repnz cmpsb?

после чего jnz .notEqual?

²
simd? /CMPSB

еще вот такое есть https://www.felixcloutier.com/x86/pcmpestri

Надо в mov ecx , размер строки str.sizeof = $ - str Зачем repe cmpsb и так все байты сравняться, кроме 0 мб

Vi-Chapmann Автор вопроса
Alexey
Надо в mov ecx , размер строки str.sizeof = $ - st...

ээ, мне кажется это попроще можно сделать

Vi-Chapmann Автор вопроса
Alexey
Ты расскажи, что сделать надо

сравнить две сишные строки. чем можно меньше инструкций, изначальная их длина не известна

Vi-Chapmann Автор вопроса
Alexey
Ну вот я идеально привел код

изначальная длина строк неизвестна

Vi-Chapmann Автор вопроса

чзх? asciiz это теперь слабость?

Vi Chapmann
изначальная длина строк неизвестна

Мы вычисли начальный адресс str.sizeof = $ - str

Vi Chapmann
чзх? asciiz это теперь слабость?

хотя бы у одной строки размер известен?

Vi-Chapmann Автор вопроса
Alexey
Мы вычисли начальный адресс str.sizeof = $ - str

я говорю строки произвольной длины, они вводятся с клавиатуры!

Vi Chapmann
я говорю строки произвольной длины, они вводятся с...

Если ты введешь меньше 4 млрд , то все получится

Vi-Chapmann Автор вопроса
Alexey
Если ты введешь меньше 4 млрд , то все получится

понятное что меньше, там до 256, но сравнить надо, и максимально компактно

Vi Chapmann
понятное что меньше, там до 256, но сравнить надо,...

Такая конструкция всегда будет ссылаться на начало массива (строки), вот и любой размер и сравниться

Vi-Chapmann Автор вопроса
Mixail Frolov
repnz cmpsd

так, и какой суффикс для j использовать? z? e? b?

Vi Chapmann
понятное что меньше, там до 256, но сравнить надо,...

тогда тупой цыкл или теребить 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ДЦП

Vi Chapmann
так, и какой суффикс для j использовать? z? e? b?

0. OSdev это сложно и требует умения читать, отлаживать и рыться в железе Самостоятельно. Вы предупреждены

Vi-Chapmann Автор вопроса
²
тогда тупой цыкл или теребить avx/simd compare_loo...

задача: уложится в две инструкции так же квадрат:

²
тогда тупой цыкл или теребить avx/simd compare_loo...

Не читая уже понимаю что там ппц

Vi-Chapmann Автор вопроса
Mixail Frolov
0. OSdev это сложно и требует умения читать, отлаж...

это не касается осдева ну никак. я не ос пишу в данный момент. это вопрос чисто по асму

Vi Chapmann
так, и какой суффикс для j использовать? z? e? b?

Z скорее всего, там тогда zf равно 0 https://metanit.com/assembler/nasm/3.10.php

Vi-Chapmann Автор вопроса

как предложил alexey, сначала repnz cmpsb

Vi-Chapmann Автор вопроса
Vi Chapmann
это не касается осдева ну никак. я не ос пишу в да...

это касается всего и чем раньше поймёте, тем лучше. Ищите информацию сами

Vi Chapmann
как предложил alexey, сначала repnz cmpsb

в любом случае там будет болше 2

Vi-Chapmann Автор вопроса
Vi-Chapmann Автор вопроса
Mixail Frolov
это касается всего и чем раньше поймёте, тем лучше...

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

Vi-Chapmann Автор вопроса
Vi Chapmann
repnz cmpsb jnz notEqual

забыли mov ecx, size и обработку нуля

Vi-Chapmann Автор вопроса
Vi Chapmann
там repNZ

вот, вы даже не видите в чём вас будет ошибка

Vi-Chapmann Автор вопроса
Mixail Frolov
вот, вы даже не видите в чём вас будет ошибка

ну так оно будет сверять пока не увидит нуль

Vi Chapmann
ну так оно будет сверять пока не увидит нуль

оно будет сверять пока не найдёт различия между буферами или пока не закончится размер буфера в ecx

Vi Chapmann
так там же repnz

вот по этому я поддерживаю действия беркуса, за такое надо в мут на пару дней или отправлять в интел ман

Vi-Chapmann Автор вопроса
Vi-Chapmann Автор вопроса
Vi Chapmann
intel leaved us

хорошо, идите в амд ман

Vi Chapmann
intel leaved us

Тебе не хватает тех девяти версий мануала, которые лежат в этом чате?

Vi-Chapmann Автор вопроса
Mixail Frolov
хорошо, идите в амд ман

я просто заменил cmp на sca и всё заработало

Vi Chapmann
я просто заменил cmp на sca и всё заработало

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

Vi Chapmann
я просто заменил cmp на sca и всё заработало

Это потому что надо было repz, а не repnz

Vi-Chapmann Автор вопроса
randomize usr
Это потому что надо было repz, а не repnz

зач? repnz scasb и всё воркает идеально)

Vi Chapmann
зач? repnz scasb и всё воркает идеально)

напишите список вашего или модифицированного вами софта, чтобы случайно не скачать

Vi-Chapmann Автор вопроса
s54820
@Doczom, работает — не трогай!

Самая не любимая поговорка

Alexey
Самая не любимая поговорка

Потому что у тебя ничего не работает?)

Alexey
Самая не любимая поговорка

у меня на ней драйвер работает, так что очень даже хорошая

The Bird of Hermes
Потому что у тебя ничего не работает?)

Потому что я люблю копаться во всем

The Bird of Hermes
Потому что у тебя ничего не работает?)

У меня тоже не любимая. Мне вообще не нравится вот этот ITшный каламбур насчёт того, что в IT постоянно всё не работает. Это как-то жалко выглядит.

КТ315
У меня тоже не любимая. Мне вообще не нравится вот...

Это обычно относится к тому чтобы все переделать так, чтобы оно начало работать лучше

КТ315
У меня тоже не любимая. Мне вообще не нравится вот...

так это везде так: рванёт? не должно. А чего отходишь?

Mixail Frolov
так это везде так: рванёт? не должно. А чего отход...

А мне вот и не нравится как раз. Особенно когда это неуместно. Это придаёт неуверенность.

Кирилл Луценко
так это буквально везде

Да где везде то... Это в студенческие годы обычно только, и там это оправданно. А когда взрослый человек стоит, и во время тестирования чего-то начинает говорить "Сейчас рванёт, сейчас крашнется, сейчас сломается". Это как-то тупо выглядит.

КТ315
А мне вот и не нравится как раз. Особенно когда эт...

с железом походу только так и можно работать, никогда не знаешь где оно решит сломаться

Mixail Frolov
с железом походу только так и можно работать, нико...

Даже если не знаешь, лучше сделать умное лицо, и не ждать ошибок. А когда ошибка вылезает - не переводить это в шутку.

Mixail Frolov
с железом походу только так и можно работать, нико...

У нас неиронично был 100% воспроизводимый баг, который решался припаиванием конденсатора.

КТ315
Даже если не знаешь, лучше сделать умное лицо, и н...

а как не засмеяться когда от одной простенькой ошибки в драйвере каскадом упало ядро ос, поток в прерывании и какого-то чёрта taskbar

Joshua Jakowlew
У нас неиронично был 100% воспроизводимый баг, кот...

Проблема в питании? Вы просто сглаживали импульсы?

Mixail Frolov
а как не засмеяться когда от одной простенькой оши...

и после этого поток с файловым менеджером всё ещё жив

Кирилл Луценко
Проблема в питании? Вы просто сглаживали импульсы?

У нас по UART передавались бинарные команды для управления мотором. Они были размером до ~30 байт обычно. Но была одна отладочная со статистикой, которая имела размер больше 500 байт. И именно в ней были битые данные, причем стабильно определенные поля. Решилось припаиванием кондея, видимо действительно пульсации были, которые вот так странно влияли

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта