접두사 66H
접두어는 피연산자의 크기를 16 비트보다 우선합니다.
사용하려는 경우 주소 크기를 무시하지 않습니다. 67H
다음은 모든 피연산자 목록입니다.
F0h = LOCK -- locks memory reads/writes
String prefixes
F3h = REP, REPE
F2h = REPNE
Segment overrides
2Eh = CS
36h = SS
3Eh = DS
26h = ES
64h = FS
65h = GS
Operand override
66h. Changes size of data expected to 16-bit
Address override
67h. Changes size of address expected to 16-bit
그러나 자신의 nop 명령어를 만들지 말고 권장 (멀티 바이트) nop을 사용하는 것이 가장 좋습니다.
표 4-9를 다음과 같이 AMD 권장 멀티 바이트의 NOP를에 따르면
입니다.11 바이트까지 NOP 년대는과 같이 구성 할 수 있도록 NOP 명령
bytes sequence encoding
1 90H NOP
2 66 90H 66 NOP
3 0F 1F 00H NOP DWORD ptr [EAX]
4 0F 1F 40 00H NOP DWORD ptr [EAX + 00H]
5 0F 1F 44 00 00H NOP DWORD ptr [EAX + EAX*1 + 00H]
6 66 0F 1F 44 00 00H NOP DWORD ptr [AX + AX*1 + 00H]
7 0F 1F 80 00 00 00 00H NOP DWORD ptr [EAX + 00000000H]
8 0F 1F 84 00 00 00 00 00H NOP DWORD ptr [AX + AX*1 + 00000000H]
9 66 0F 1F 84 00 00 00 00 00H NOP DWORD ptr [AX + AX*1 + 00000000H]
의 권장 멀티 바이트 시퀀스는 인텔, 최대 3 중복 접두사를 상관하지 않습니다.
10 66 66 0F 1F 84 00 00 00 00 00H NOP DWORD ptr [AX + AX*1 + 00000000H]
11 66 66 66 0F 1F 84 00 00 00 00 00H NOP DWORD ptr [AX + AX*1 + 00000000H]
당연히 여분의 접두사가있는 일반 지침 앞에 접두어를 붙임으로써 nop을 제거 할 수도 있습니다.
rep mov reg,reg //one extra byte
또는 강제로 동일한 명령어의 더 긴 버전을 사용하십시오.
test r8d,r8d is one byte longer than: test edx,edx
즉각적인 피연산자가있는 명령어에는 짧고 긴 버전이 있습니다.
and edx,7 //short
and edx,0000007 //long
대부분의 어셈블러는 지연을 초래하지 않고도 점프 목표를 정렬하는 데 도움 수있는 전략적 위치에있는이 산재 db
를 사용하여 더 이상 설명을 직접 코딩해야하므로 유용하게 당신을 위해 모든 지침을 단축 nop의 디코딩 또는 실행으로 인해
대부분의 CPU가 실행중인 nop가 여전히 리소스를 사용하고 있음을 기억하십시오.
0x66 접두사는 변위 크기에 영향을 미치지 않으며 피연산자 크기에만 영향을줍니다. –
명령어의 구성 요소가 Prefix, Opcode, Mod R/M, SIB, Displacement, Immediate이면 0x66이 * Immediate * 값에 영향을 줍니까? 좋아요, 그것은 일종의 의미가 있습니다 : 멀티 바이트 NOP는 즉각적인 가치를 가지지 않으므로 0x66은 아무런 효과가 없습니다. 고맙습니다! – ayekat