signed division operation의 경우
이 작업을 수행하려면 먼저 eax에 나뉘어지는 수가 들어가야 되고,
edx의 sign bit자리에는 나뉘어지는 수와 동일한 부호값(부호비트)이 세팅 되어있어야한다.
그리고 sign bit을 제외한 나머지 비트들은 0이 되있어야한다.
(안그러면 core dumped 에러 발생)
이상태에서 operation을 해야 몫은 eax에, 나머지는 edx에 들어간다.
그래서 보통 이렇게 할려면
movl 나뉘어지는수, eax
movl 나뉘어지는수, edx
sarl $31, edx
idivl 나누는 수
이런식으로 짜야하는데, sarl에 대해서 참고적으로 덧붙이면
shrl - shift right는 부호비트까지 포함해서 비트를 오른쪽으로 이동시키는 거고
sarl - shift arithmetic right는 부호비트는 빼고 나머지 비트들만 오른쪽으로 이동시키는 것..이라고
마노책에서 본 기억이 난다.
----------------------------------------------
그냥 단순히 eax에 나뉘어지는 수 넣고서
나눗셈 진행하면 될줄 알았더니 아니더라.
이건 AT&T 문법에서 그런거고, 인텔 문법에선 어떨지 잘 모르겠다
'Assembly > 공개글' 카테고리의 다른 글
MIPS jal nop branch delay slot (0) | 2015.07.11 |
---|---|
x86/gcc에서 relative jump 사용하는법 (0) | 2015.02.08 |
intel 문법과 AT&T 문법에서 주소 참조 차이 (1) | 2015.01.07 |
어셈블리어는 unsigned/signed를 구분해서 처리한다. (0) | 2014.07.30 |
어셈블리에서 mul할 때 오버플로우 관련해서 (0) | 2014.07.30 |