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

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

80 ответов

27 просмотров
Vi Chapmann-#FREEDUROV Автор вопроса

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

Cmpsb

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

repnz cmpsb?

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

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

²
simd? /CMPSB

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Vi Chapmann #FREEDUROV
понятное что меньше, там до 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 #FREEDUROV
так, и какой суффикс для j использовать? z? e? b?

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

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

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

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

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

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

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

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

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

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

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

Vi Chapmann #FREEDUROV
это не касается осдева ну никак. я не ос пишу в да...

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

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

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

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

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

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

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

Vi Chapmann #FREEDUROV
там repNZ

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

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

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

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

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

Vi Chapmann #FREEDUROV
так там же repnz

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

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

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

Vi Chapmann #FREEDUROV
intel leaved us

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

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

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

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

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

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

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

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

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

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 байт. И именно в ней были битые данные, причем стабильно определенные поля. Решилось припаиванием кондея, видимо действительно пульсации были, которые вот так странно влияли

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта