2012-03-31 4 views
4

레지스터에서 NASM의 비트 시프트에 대해 어떻게 생각하십니까? 설명서를 읽었을 때만이 연산자를 언급 한 것 같습니다. >>, < <. NASM을 사용하려고하면 스칼라 값으로 작업하는 시프트 연산자에 대해 불평합니다. 스칼라 값이 무엇인지 설명하고 사용 방법의 예를 들려 주시겠습니까 >>< <. 또한 shr 또는 shl 연산자가 있다고 생각했습니다. 그들이 존재한다면 어떻게 사용하는지 예를들 수 있습니까? 시간 내 주셔서 감사합니다.NASM 시프트 연산자

답변

4

<<>>은 정수 상수에만 사용됩니다. 이것은 "스칼라 가치"가 의미하는 것입니다. shl 또는 shr 명령어를 사용하여 레지스터에서 값을 이동할 수 있습니다. 레지스터의 값을 각각 왼쪽 또는 오른쪽으로 지정된 비트 수만큼 이동시키는 데 사용됩니다.

이 예제의 첫 번째 줄은 ax의 값을 4로 왼쪽으로 이동하며 16을 곱한 것과 같습니다. 두 번째 줄은 bx의 값을 2로 나누고 정수 나누기와 동일합니다. 4.

shl ax, 4 
shr bx, 2 

또한 상수 대신에, 이동하는 비트 수를 나타냅니다 cl를 사용할 수 있습니다. 이에 대한 자세한 내용은 this page을 참조하십시오.

4

돼지 - 백업 ughoavgfhw의 대답에 ... <<>>이, 상수에 직접 사용 사용하기 :

MOV EAX, 1 << 2 ; Puts 4 into EAX 
MOV EAX, 2 << 2 ; Puts 8 into EAX 
MOV EAX, 8 >> 1 ; Puts 4 into EAX