12,943,701 members (55,050 online)
alternative version

#### Stats

51.4K views
12 bookmarked
Posted 15 Jun 2005

# Convert Float to Int using Assembly Language Programming

, 15 Jun 2005 CPOL
 Rate this:
An article on Converting Float value to an integer value trimming off the decimal part

## Introduction

This program takes a floating point value as input and converts it into an integer by trimming the decimal point. Please e-mail your suggestion to Jayadev at jayadevmv@rediffmail.com.

## Background

The code uses the tag `_asm `in VC++. Using the assembly code, the floating point value is converted into an integer value.

## Using the Code

The code is very simple and it can be plugged into any other code easily.

The function `ftoi `looks like this:

```int ftoi(float flt)
{
int i;
_asm
{
mov  eax,flt; //loaded mem to acc

rcl  eax,1;   //left shift acc to remove the sign

mov  ebx,eax; //save the acc

mov  edx,4278190080; //clear reg edx;

and  eax,edx; //and acc to retrieve the exponent

shr  eax,24;
sub  eax,7fh; //subtract 7fh(127) to get the actual power

mov  edx,eax; //save acc val power

mov  eax,ebx; //retrieve from ebx

rcl  eax,8;     //trim the left 8 bits that contain the power

mov  ebx,eax; //store

mov  ecx, 1fh; //subtract 17 h

sub  ecx,edx;
mov  edx,00000000h;
cmp  ecx,0;
je   loop2;
shr  eax,1;
or   eax,80000000h;
loop1:
shr  eax,1; //shift (total bits - power bits);

sub  ecx,1;
cmp  ecx,0;
ja   loop1;
loop2:
mov  i, eax;

//check sign +/-

sign:
mov  eax,flt;
and  eax,80000000h;
cmp  eax,80000000h;
je     putsign;
}

return i;

putsign:
return -i;
}```

## History

• 15th June, 2005: Initial version

## Share

 Web Developer India
Hi.. I have been working on C/C++ for more than 2 years. My areas of interest are Network programming and System Level programming.
I work with C/C++ over Windows and Solaris.

## You may also be interested in...

 Pro

 View All Threads First Prev Next
 hi why so difficult ? justme2215-Jun-05 2:00 justme22 15-Jun-05 2:00
 2+2 == sqrt(16) Kochise15-Jun-05 3:11 Kochise 15-Jun-05 3:11
 Re: 2+2 == sqrt(16) Rick York15-Jun-05 8:11 Rick York 15-Jun-05 8:11
 Rounding mode Don Clugston15-Jun-05 14:29 Don Clugston 15-Jun-05 14:29
 justme22 wrote: FLD srcvalue ; Push real onto stack FISTP destvalue ; Convert top of stack to integer It's not quite so simple. FISTP uses the current rounding mode. Changing the rounding mode is an extremely slow process. I *think* the author wanted to avoid this. Regardless, the best asm code for this (and for virtually everything else) is in Agner Fog's Pentium Optimisation manual. You can find it at www.agner.org in the manual pentopt.pdf If you have any interest in asm, read that manual! It's much more accurate than Intel's manual.
 Re: Rounding mode John M. Drescher15-Jun-05 16:16 John M. Drescher 15-Jun-05 16:16
 Re: hi why so difficult ? John M. Drescher15-Jun-05 16:10 John M. Drescher 15-Jun-05 16:10
 Re: hi why so difficult ? JeanLuc_17-Sep-09 6:52 JeanLuc_ 17-Sep-09 6:52
 Last Visit: 31-Dec-99 18:00     Last Update: 22-May-17 16:53 Refresh 1