Notice
Recent Posts
Recent Comments
LuvSea
에셈블리로하는 나눗셈 본문
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
1. 나눗셈 연산의 피젯수는(32bit의 나눗셈을 가정) 항상 edx:eax 이다.
2. cdq 는 나눗셈을 위해 피젯수의 사이즈를 확장하는 것이다.
2. cdq 는 나눗셈을 위해 피젯수의 사이즈를 확장하는 것이다.
나눗셈연산(div, idiv)은 eax와 edx에 의해서만 이루어집니다.
- 피젯수(나눔을 당하는 수) 는 eax, edx에만 들어갈 수 있다는 얘기에요
16 / 5 연산을 한다고 가정해 봅시다.
16과 5 둘다 32bit data라고 가정하구요
그럼 일단 eax에 16을 넣습니다. 그 다음 ebx(다른레지스터나 메모리도 상관없음)에
5를 넣습니다. 그 다음 div 연산을 하면.........될것 같지만 안됩니다..
일반적으로 제수(여기서는 5)가 32bit이면 피젯수(여기서는 16) 는 64bit가 되어야
32bit 값을 가지는 몫을 얻을 수 있습니다.
그래서 피젯수의 bit를 확장 시켜주는것이 바로 cdq 연산입니다
32bit 크기의 eax의 값을 64bit의 값인 edx:eax로 만들어줍니다.
여기서 edx는 상위자리가되고 eax는 하위 자리가 되죠
자..그럼 cdq 연산까지 끝났으면 edx:eax에 16이 들어가있고 ebx에 5가 들어있겠네요
그럼 idiv연산을 해봅시다(div는 부호가없는 나눗셈 idiv 부호가 있는 나눗셈)
그럼 몫과 나머지가 나와야 하겠죠? 그 결과는 다시 eax와 edx로 들어가는데
eax에는 몫이, edx에는 나머지 부분이 들어갑니다.
'sTudy' 카테고리의 다른 글
데이터 전송 명령어 mov, movzx, movsx (0) | 2009.08.10 |
---|---|
곱셈 - MUL, IMUL (0) | 2009.08.10 |
data 세그먼트와 bss 세그먼트 (0) | 2009.08.10 |
elf32-littlearm.lds 파일 분석 (0) | 2009.08.10 |
Boot Code(Startup Code) (0) | 2009.08.10 |
Comments