// Code I'll be working with
int shift_left2_rightn(int x, int n)
{
x <<= 2;
x >>= n;
return x;
}
질문 1 좌 시프트 = SAL
및 SHL
. 제 책에는 그들이 같은 효과가 있다고합니다. 그런데 왜 2 교대 작업이 있습니까? 예를 들어ATT 어셈블리 (산술 및 논리 연산)
는 :
movl 8(%ebp), %eax //Get x
_______ //x <<= 2
내 책은 또한 정답이었다
sall $2, %eax
것
shll $2, %eax
의 답을 준다?
질문 2 : 쉽게 설명하자면
SHR
와 SAR
의 차이점은 무엇입니까? 저의 책은 논리 시프트 (0으로 채워짐)이고 다른 하나는 산술 시프트 (부호 비트의 복사본으로 채우기)라고 말합니다.
0의/부호 비트를 채우십시오.
가 어떻게하여 다음의 지침을 사용할 일 알 것 : 예를 들어
? 이 책의
movl 12(%ebp), %ecx //Get n
______ //x >>=n
돌아 가기
sarl %cl, %eax
우리가 shrl
를 사용한 경우 무슨 일이 일어날 지 나에게 설명해주십시오 답을 가지고있다.
이해해 주셔서 감사합니다.
예제와 설명을 해주셔서 감사합니다 – juice
실제로'sal'과'shl'을위한 두 개의 다른 opcode가 있습니다 만, 지금까지의 행동은 똑같습니다. 인텔이 두 가지 중 하나를 사용하지 않으려는 것처럼 보입니다. 선적 서류 비치. –
@AlexeyFrunze 어느 것? [인텔 ® 64 및 IA-32 아키텍처 소프트웨어 개발자 설명서] (http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software- developer/manual-325462.html)'sal'과'shl'에 대해서'REX'의 유무에 관계없이'DO/4','D2/4','C0/4 ib','D1/4','D3/4','C1/4 ib'. 또한 예를 들어 조립하면. 'sal al, 1'을 NASM으로 보내면'D0 E0'이되고 ndisasm은'shl al, 1'로 디스 어셈블합니다. – nrz