Category : Assembly Language Source Code
Archive   : MATHASM.ZIP
Filename : RN_F.ASM

 
Output of file : RN_F.ASM contained in archive : MATHASM.ZIP
RN_F PROC NEAR
;********************************************************
; Rounds a floating point operand to
; the nearest integer value
;********************************************************
PUSH SI ;save index registers
PUSH DI

MOV BX,CX ;and BX
MOV DX,[DI]+2 ;get operand in DX:AX
MOV AX,[DI]
;
SUB CX,CX ;clear CX
MOV DI,10000000B ;isolate sign in DI
AND DI,DX
OR DX,10000000B ;restore leading one
; check range
CMP DH,128 ;exponent bias is 128
JA RN1
JB RN7 ;if exponent<0 round to zero
; exponent is zero
CMP DL,128 ;number >= .5 and < 1
JBE RN7 ;if fraction=0 round to zero
MOV DX,CX ;round to +1-all zeros
MOV AX,CX
MOV BH,81H ;and biased exponent of 1
JMP RN6 ;restore sign and exit
;
RN1: MOV BH,DH ;exponent in BH in case we exit
CMP DH,152 ;if exponent>=24, already integer
JAE RN6 ;so restore sign and exit
; exponent is in range 1-23
MOV CL,DH ;put unbiased exponent in CX
SUB CX,128
NEG CX ;COUNT is CX - 24
ADD CX,24
; shift right COUNT bits
SUB DH,DH ;clear DH
MOV BH,DH ;and BH
RN2: SHR DL,1 ;shift it right
RCR AX,1
RCR DH,1 ;rotate fraction into DH:BX
RCR BX,1
LOOP RN2
; round
OR DH,DH ;is guard bit on?
JNS RN4 ;if not, rounding not needed
TEST AX,1 ;if integer odd
JNZ RN3 ;round up
CMP DH,80H ;if any trailing bits on
JA RN3 ;round up
OR BX,BX
JZ RN4
RN3: ADD AX,1 ;round up
ADC DX,0
; normalize--shift left
RN4: MOV BH,152 ;set exponent to zero
RN5: SHL AX,1 ;shift left
RCL DL,1
DEC BH ;increment exponent
OR DL,DL
JNS RN5 ;shift again if not normalized
;
RN6: JMP FINISH ;restore sign and exit
RN7: SUB DX,DX ;zero result
MOV AX,DX
MOV BX,DX
JMP EXIT
RN_F ENDP

  3 Responses to “Category : Assembly Language Source Code
Archive   : MATHASM.ZIP
Filename : RN_F.ASM

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/