반응형

1. Arithmetic Operations

Format(이름) parameter(들어가는 값) computation(연산방식)
addq b,a  a=a+b
subq b,a a=a-b
imulq b,a a=a*b
salq(shlq) b,a a=a<<b
sarq b,a a=a>>b (Arithmetic) (signed)
shrq b,a a=a>>b (logical) (unsigned)
xorq b,a a=a^b
andq b,a a=a&b
orq b,a a=a | b

parameter에서 a,b가 아닌 b,a인것을 보면 알수 있듯이, 우리가 생각하는 C언어의 연산과 반대다.

 

Format(이름) parameter(들어가는 값) computation(연산방식)
incq a a=a+1
decq a a=a-1
negq a a=-a
notq a a=~a

2. jx instructions

jX Condition Description (cmp a b = b-a)가정
jmp 1 조건 없음
je ZF b==a
jne ~ZF b!=a
js SF b-a<0
jns ~SF b-a>0
jg ~(SF^OF)&~ZF b>a sign버전
jge ~(SF^OF) b>=a sign버전
jl SF^OF b<a sign버전
jle (SF^OF) | ZF b<=a sign버전
ja ~CF&~ZF b>a unsign버전(jae는 b>=a)
jb CF b<a unsign버전(jbe는 b<=a)

3. 그외 기타 operations

movq

movq a,b a값을 b에 넣는다. (a),b일 경우, *a값을 b에 넣는다라고 생각할 수 있다. 

a,(b) 역시 a값을 *b에 넣는것으로 해석된다.

 

leaq

mov와 비슷하지만, lea는 무조건 주소를 옮긴다는 점에서 다르다. a b모두 주소일때, lea a b 는 b에 a를 넣는다.

이건 mov로도 쉽게 구현가능하지만, 주소로 0x120과 같이 값용도로 쓸때, 연산을 하면 무조건 ()를 쓰게 되므로 lea를 사용해서 ()를 써도 주소의 주소로 가는일을 방지한다.

 

pushq

스택에 새 피연산자를 저장하고, rsp의 값을 8줄인다.

 

popq

rsp의 값을 8늘리고(마지막에 넣은값 사라지는 효과) 그 자리에 있던 값을 반환한다.

 

callq

callq 함수주소 <함수이름> 특정함수로 이동한다.

 

retq

%rax를 반환하고, 함수를 종료한다. 

반응형

+ Recent posts