반응형
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를 반환하고, 함수를 종료한다.
반응형
'컴퓨터 시스템' 카테고리의 다른 글
Little Endian과 Big Endian (0) | 2021.11.01 |
---|---|
mov와 lea의 비교, 어셈블리 접미사의 의미(q, l, w,b) (0) | 2021.10.28 |
assembly 각 register의 역할과 caller-saved, callee-saved. (0) | 2021.10.11 |
실수의 저장 방식 (0) | 2021.10.04 |
비트연산과 정수 - 연산 꿀팁 (0) | 2021.10.01 |