NASM: Не може да се сглоби инструкцията „prefetch0“.

Осъзнавам, че често е най-добре да не задавате ръчно предварително извличане на данни в кеш паметта на процесора. Аз обаче просто исках да напиша този код, за да експериментирам и да се уверя, че мога да го използвам:

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


person user45389    schedule 04.08.2014    source източник


Отговори (1)


Инструкцията, която търсите, е PREFETCHT0 (има 'T' преди числото). Трябва също да посочите адреса в квадратни скоби.

person Mika Lammi    schedule 04.08.2014