일단 쉽고 많이쓰고 기본적인 사칙연산인것만 소개한다.

 

MOV = 대입

-> MOV [주소 & 레지], [값]

주소 혹은 레지스트리에 값을 대입.

 

SUB = 뺼셈

-> SUB [주소 & 레지], [값]

주소 혹은 레지스트리에 있던 것에 값을 빼줌.

 

ADD = 덧셈

-> ADD [주소 & 레지], [값]

주소 혹은 레지에 있던 기존값에서 값을 더함.

 

SHR =  나누기

-> SHR [주소 & 레지], [값]

사실 이건 쉬프트연산이지만 걍 나누기에 가깝다.

더보기

SHR은 Shift Right 로써, 비트를 모두 오른쪽으로 한칸씩 옮기는 것이다.

SHR [주소], 3 =========> 0000 0000 1010 1000 -> 0000 0000 0010 1010

여기서 근데 잘 생각해보면 어차피 이건 나눗셈이라는 것을 알 수 있다.

 

1000 을 SHR 3 해주면 0001 이 된다. 따라서 ======> 1000[8] => 0001[1] => 8/8 = 1

1000 을 SHR 2 해주면 0010 이 된다. 따라서 ======> 1000[8] => 0010[2] => 8/4 = 2

1000 을 SHR 1 해주면 0100 이 된다. 따라서 ======> 1000[8] => 0100[4] => 8/2 = 4

 

1 => 0001 => 2  <= 나눌 값

2 => 0010 => 4  <= 나눌 값

3 => 0100 => 8  <= 나눌 값

4 => 1000 => 16  <= 나눌 값

....

 

이런식으로 어느정도 알고있으면 어셈 해석할때 용이할것같다. 

 

SHL = 곱하기

-> SHL [주소 & 레지], [값]

이것도 쉬프트 연산이지만 곱셈에 아주 가깝다.

더보기

SHL은 Shift Left 이다. 비트를 싹다 왼쪽으로 옮겨버림.

SHㅣ [주소], 3 =========> 0000 0000 1010 1000 -> 0000 0101 0100 0000

자, 잘보면 이건 곱셈이다 ㅋㅋㅋㅋ

 

0001 을 SHL 3 해주면 1000 이 된다. 따라서 ======> 0001[1] => 1000[8] => 1*8 = 8

0001 을 SHL 2 해주면 0100 이 된다. 따라서 ======> 0001[1] => 0100[4] => 1*4 = 4

0001 을 SHL 1 해주면 0010 이 된다. 따라서 ======> 0001[1] => 0010[2] => 1*2 = 2

 

역시 마찬가지로 대충 어느정도 알고있으면 해석에 용이하다.

 

다음은 조건문에 대해서...

+ Recent posts