[어셈블리 언어] 제법 명령div와 곱셈 명령mul
나눗셈:
8비트와 16비트로reg(레지스터)나 메모리 단원에 저장
피제수:
16분과 32분.
피제수가 16자리이면 제수가 8자리이고 피제수는 기본적으로 AX에 저장됩니다.
피제수가 32비트이면 제수가 16비트이고 피제수는 AX 및 DX에 저장되며 AX는 8비트 낮고 DX는 8비트 높다
피제수
32비트
16비트
나눗셈
16비트
8비트
피제수 저장 위치
AX
AX(8비트 낮음) DX(8비트 높음)
결과:
나눗셈 8비트, AL 레지스터, AH 레지스터
나눗셈 16비트, AX 레지스터, DX 레지스터
계산 100001/100
피제수: 16자리는 최대 65535를 표시하기 때문에 피제수 100001은 16자리 레지스터ax와 dx 두 개만 저장할 수 있습니다
제수: 100은 255보다 작고 8자리로 표시할 수 있지만 피제수는 32자리이기 때문에 제수는 반드시 16자리 레지스터로 저장해야 한다
Debug 데이터는 기본적으로 16비트이기 때문에 먼저 피제수와 제수를 16진수로 변환해야 합니다
100001 = 186a1H
100 = 64H
절차는 다음과 같습니다.
mov dx,1
mov ax,86a1
mov bx,100
dix bx
계산 1001/100
피제수: 1001 <65535, 16비트 레지스터 AX로 저장
제수: 피제수는 16자리, 제수는 8자리
16진수 변환
1001 = 03e9H
100 = 64H
절차는 다음과 같습니다.
mov ax,03e9
mov bl,64
div bl
곱셈 명령
두 개를 곱한 숫자가 모두 8위 혹은 16위이다
8비트면 하나는 기본적으로 AL에 저장하고 다른 하나는 8비트 레지스터나 메모리 바이트에 저장합니다
16자리인 경우 하나는 AX에 기본적으로 저장되고 다른 하나는 16자리 레지스터나 메모리 문자에 저장됩니다
곱하기 적: 8자리 곱하기는 기본적으로 AX에 저장됩니다.
16비트의 경우 높이 8비트는 DX, 낮음은 AX
예제 프로그램:
8비트 곱셈, 100*2
mov al,100
mov bl,2
mul bl
16비트 곱셈, 100* 10000
mov ax,100
mov bx,10000
mul bx