Осъзнавам, че често е най-добре да не задавате ръчно предварително извличане на данни в кеш паметта на процесора. Аз обаче просто исках да напиша този код, за да експериментирам и да се уверя, че мога да го използвам:
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' всъщност отпечата различна грешка на грешна комбинация операнд/инструкция.