imul
- 음수를 포함한 수를 곱할때 필요한 명령어
- eax와의 연산만이 아닌 레지스터끼리의 곱, eax가아닌 다른 레지스터와 메모리의 곱, 상수와의 곱을 가능하게한다.
imul source | eax와의 곱셈, 레지스터와 메모리만 올 수 있다. |
imul register, source | 두개의 operand를 가진다. add의 형식과 같이 곱한값이 operand1로 대입된다. |
imul register, source, immediate | 두개의 operand와 immediate 즉 상수를 가진다. |
imul source에 대한 Operand 표
imul register, source에 대한 Operand표
imul register, source, immediate에 대한 Operand표
- imul의 곱 연산예시-
1. imul bx 는 ax = ax * bx로 해석 5*2 = 10을 16진수 값으로 ax에 할당한다.
2. imul Factor 는 Factor변수와 ax의 곱 ax = ax * Factor이 된다. (마찬가지로 16진수 값을 할당)
3. imul ebx, 10 은 ebx = ebx * 10(상수) 이다. 10 * 10이므로 100의 16진수 64를 ebx에 할당
1. imul ecx, Double 은 ecx = ecx * Double , imul은 부호가 있는 수의 곱이기 때문에 ecx와 Double은 음수로 해석된다.
2. imul bx, Value, 1000 의 연산값은 bx로 할당됨
(숙제)
-
|
div
- 나눗셈
idiv
- 부호가 있는 수의 나눗셈
source size메모리에는 잿수, AX Operand메모리에는 피잿수, AL에는 몫, AH에는 나머지가 할당된다.
피잿수 = 잿수 * 몫 + 나머지
- 피잿수의 size에 따라 크기가 결정된다. -
1. eax = ebx / eax 즉 13 / 100 이다. 몫은 eax에 저장 나머지는 edx저장되었음.
2. 같은방식
3. 3번연산은 BYTE크기로 연산되었기 때문에 몫과 나머지가 각각 AX의 AH, AL공간에 저장된다. - AH에 나머지, AL에 몫 -
1. cx / ax , 1번은 idiv연산이기 때문에 cx의 값이 음수이다.
(2의 보수를 취해주면 cx의 값은 -13이 된다.)
-13 / 100을 하면 몫은 -7(FFF9) 나머지는(9가 된다. 나머지는 음수와 음수의 계산으로 양수로 전환)
2. 13 / - 100
3. -13 / - 100, 음수끼리의 나눗셈이기 때문에 몫은 음수와 음수가 충돌해 양수가 되고 나머지는 음수가 된다.
1. bl / ax, -32 / -511
2. -1 / - 511
byte를 연산할 경우
AX의 값을 다 바꿔야하고
word를 연산할 경우
DX의 값도 바꿔야하고
double word를 연산할 경우
EDX의 값도 함께 바꿔줘야 한다.
예를 들면
div ebx 를 한다고 치면
mov edx , 0
mov eax , 2
mov ebx , 2
div ebx
mov edx , -1 (FF FF FF FF)
mov eax , -2
mov ebx , 2
div ebx
이런식으로 확장된 곳의 값도 함께 바꿔줘야 한다.
이런 불편함을 덜어주는 명령어가
cbw AL -> AX
cwd AX -> DX:AX
cdq EAX -> EDX:EAX
cwde AX -> EAX
이다.
cwd AX -> DX:AX
cdq EAX -> EDX:EAX
cbw AL -> AX
cwde AX -> EAX
------- movzx , movsx Instruction
8 bit를 16 bit로,
16 bit를 32 bit로
확장하여 값을 넣는다.
movzx , movsx 의 다른 점은
movzx 는 확장된 곳에 무조건 0 을 채워 넣고
movsx 는 확장된 곳에 부호에 맞게 채워 넣는다.
'교육 > ASSEM' 카테고리의 다른 글
ASSEM- 레지스터값 (0) | 2014.08.27 |
---|---|
[어셈블리어] ESP와 push와 pop명령어 + pushad, popad (0) | 2014.08.01 |
[어셈블리어] adc와 Jump (0) | 2014.07.30 |
[어셈블리어]inc(증가), dec(감소), mul(곱셈)명령 (0) | 2014.07.29 |
[어셈블리어] mov와 xchg (0) | 2014.07.25 |