2011-02-12 2 views
3

div 표시 후 11.1 표시 방법? 예 : 32/5 = 6.4, 6.4는 어떻게 표시 할 수 있습니까?표시 방법 11.1 어셈블리에서 div 후

OUT23는 :

MOV BL,CNT ;CNT is the total number of even number 
DIV BL 
MOV DL,AL 
MOV BH,AL 
MOV AH,09H 
LEA DX,MSG23 
INT 21H 
MOV DL,BH ;print out the average, only the integer part able to display 
MOV AH,02 
ADD DL,30H 
INT 21H 

답변

2

DIV 정수 나눗셈 명령이다. 부동 소수점 나누기를 원하면 FDIV을 봐야합니다.

2

이미 설명한 바와 같이 DIV은 정수 나누기를 수행합니다. 정수 나눗셈이므로 몫과 나머지는 별도의 레지스터 쌍에서 사용할 수 있습니다. 정확한 레지스터는 제수의 크기에 따라 다릅니다.

1 바이트 제수

AX - Dividend 
AH - Remainder 
AL - Quotient 

2 바이트 제수

DX:AX - Dividend 
DX - Remainder 
AX - Quotient 

4 바이트 제수

EDX:EAX - Dividend 
EDX - Remainder 
EAX - Quotient 

죄 당신은 1 바이트 제수 'BL'을 사용하고 나머지는 AH 레지스터에 저장됩니다. 32/5의 사용자의 경우에는 AL 레지스터 값 6을 포함하고 AH 당신에게 6.4의 답변을 제공 0.4입니다 2/5의 나머지가 의미 값 2를 등록합니다.

당신은 당신이 당신이 FPU 떨어져 두 값을 나타 것이다 FDIV를 호출 후, 각 값에 대해 한번의 FLD 명령을 사용하여 FPU 스택으로 두 값 325를로드해야합니다 FPU 연산을 사용하려는 경우 스택으로 나누고 결과를 FPU 스택으로 밀어 넣습니다.

결과는 FSTP 명령어를 사용하여 스택에서 메모리 주소로 이동할 수 있습니다. 결과를 얻으면 이진 IEEE 부동 소수점 표현에서 화면에 표시 할 수있는 문자열 표현으로 변환해야합니다.

1

는 포인트 부문 부동 사용하는 경우, 문자열

로 플로트를 변환하는 여러 가지 방법이 있습니다하지만 결과는 정수 나누기를 사용하여 인쇄를 시도 할 경우 초등학교에 손으로 분할처럼 다음 그것을 할.

는 1 부 리그 후

위의 예 32/5을 가지고 :

32/5 = 6 → Print out "6." 
Remainer: 2, multiply it by 10 → 2*10 = 20 
20/5 = 4 → Print out "4" 
Remainder: 0, stop here 

더 복잡한 부서는 각 단계 이후 (10)에 의해 나머지를 곱하면, 위와 같이 수행 할 수있다. 결과가 무한하다면 충분한 정밀도를 얻을 때 중단하십시오.

또 다른 예 : 11분의 25 = 2.27272727 ...

25/11 = 2 R 3 → 2. 
3*10/11 = 2 R 8 → 2 
8*10/11 = 7 R 3 → 7 
3*10/11 = 2 R 8 → 2 
8*10/11 = 7 R 3 → 7 
and so on...