Я понимаю, что часто лучше не указывать данные предварительной выборки вручную в кеши ЦП. Однако я просто хотел написать этот код для эксперимента и убедиться, что смогу его использовать:
global start
section .data
msg: db 'hello',0 ; C-style null terminated char array
section .text
start:
lea rax, [msg] ; rax = address of 'hello'
prefetch0 rax ; fetch data [rax] into cache
ret ; return
Я скомпилировал с помощью NASM, но получил сообщение об ошибке prefetch0 rax
:
unable to parse: instruction expected.
Просматривая форумы, кажется, что эта ошибка иногда может быть вызвана неправильным объявлением метки или раздела, но я считаю, что у меня все в порядке, и ошибка связана только с этой конкретной инструкцией.
Просто чтобы быть тщательным, хотя я подозревал, что это не будет иметь значения, я пробовал каждую инструкцию предварительной выборки, то есть prefetch1
, prefetchnta
и т. д. Версия 'nta' фактически печатала другую ошибку неправильной комбинации операнда/инструкции.