Я мало знаю о сборке (NASM), я хотел выполнить строковую операцию (присутствует подстрока или нет) с использованием SSE4.2. Итак, я узнал, как работает PCMPESTRI, PCMPISTRM. Я застрял в середине, т.е. передача данных из памяти в регистр xmm. По сути, я хотел получить ввод через командную строку (например: ./a.out ABCD) и передать в регистр xmm1. Взятие ввода через командную строку может иметь любую длину строки, т. Е. (1 - более 16), а данные командной строки хранятся с добавлением 0 (т. Е. ABCD \ 0), и мы получаем его начальный адрес, который присутствует в стеке. Так как же сделать так, чтобы данные командной строки были выровнены с 16 байтами (ABCD \ 0 \ 0 \ 0 \ 0 ... до 16)?
Также я не хочу выделять память с помощью системного вызова и копирования brk все данные командной строки к нему и затем передать в регистр xmm1. (Поскольку я хотел выполнить проверку подстроки всего за один go вместо перемещения всех данных во вновь выделенную память и затем скопировать каждое содержимое ...., что может увеличить выполнение время)
Я пытался сделать это: -
section .data
align 16 ; I thought that command line data is stored in data section and may align to 16. :-(
...
section .bss
...
section .text
...
Но это не сработало .. Так как мне добиться передачи данных в регистр xmm, учитывая, что ввод может быть переменной длины (1 - более 16)
какую инструкцию перемещения я должен использовать?
Как мне решить это движение данных, когда ввод будет из командной строки и может иметь любую длину. .?
Мои информационные флаги ЦП (/ proc / cpuinfo): sse sse2 ssse2 sse4_1 sse4_2