나는이 어셈블리를 가지고 :왜 어셈블리에서 주소를 계산하기위한 지침 대신 "+"및 "*"기호를 사용합니까?
movzx eax, r8w
add r8d, 0x4
movzx edx, r8w
cmp edx, 0x1f4
movdqu xmm3, xmmword ptr [r9+rax*4+0xfb0] ; Why "+" instead of ADD asm??
movdqu xmm1, xmmword ptr [r11+rax*4] ; ??
movdqu xmm4, xmmword ptr [r10+rax*4] ; ??
왜이 "+"와 "*"연산자 대신에 추가로 표시하고 주소를 계산하기 위해 ASM 지침을 곱하면? 확실히 어셈블리의 요점은 C++을 x86 명령어로 완전히 분해하는 것입니다.
인 -
번째 지점이 또한 평소 명령어 기반 부가보다 훨씬 빠르게 발생한다는 것이다. x86에는 단일 명령을 실행하는 과정에서이 계산을 수행 할 수있는 어드레싱 모드가 있습니다. 상수와 두 개의 레지스터를 추가하는 주소를 계산할 수 있으며 레지스터 하나에 2 또는 4 또는 8을 곱할 수 있습니다. 이것은 단일 명령어가 상당히 복잡한 작업을 수행 할 수 있기 때문에 RISC 칩이 아닌 CISC 칩으로 간주되는 이유 중 하나입니다. – jcoder
@jcoder : 대답이 아닌가요? –
그리고 또한 : rax가 변경 될 의도가 없다는 것을주의하십시오 (Add가 수행 할 작업). – icbytes