Rev | Line | |
---|
[9] | 1 | .sect .text; .sect .rom; .sect .data; .sect .bss
|
---|
| 2 | .define .fif8
|
---|
| 3 |
|
---|
| 4 | .sect .text
|
---|
| 5 | .fif8:
|
---|
| 6 | mov bx,sp
|
---|
| 7 | fldd 8(bx)
|
---|
| 8 | fmuld 16(bx) ! multiply
|
---|
| 9 | fld st ! and copy result
|
---|
| 10 | ftst ! test sign; handle negative separately
|
---|
| 11 | fstsw ax
|
---|
| 12 | wait
|
---|
| 13 | sahf ! result of test in condition codes
|
---|
| 14 | jb 1f
|
---|
| 15 | frndint ! this one rounds (?)
|
---|
| 16 | fcom st(1) ! compare with original; if <=, then OK
|
---|
| 17 | fstsw ax
|
---|
| 18 | wait
|
---|
| 19 | sahf
|
---|
| 20 | jbe 2f
|
---|
| 21 | fisubs (one) ! else subtract 1
|
---|
| 22 | jmp 2f
|
---|
| 23 | 1: ! here, negative case
|
---|
| 24 | frndint ! this one rounds (?)
|
---|
| 25 | fcom st(1) ! compare with original; if >=, then OK
|
---|
| 26 | fstsw ax
|
---|
| 27 | wait
|
---|
| 28 | sahf
|
---|
| 29 | jae 2f
|
---|
| 30 | fiadds (one) ! else add 1
|
---|
| 31 | 2:
|
---|
| 32 | fsub st(1),st ! subtract integer part
|
---|
| 33 | mov bx,4(bx)
|
---|
| 34 | fstpd (bx)
|
---|
| 35 | fstpd 8(bx)
|
---|
| 36 | wait
|
---|
| 37 | ret
|
---|
Note:
See
TracBrowser
for help on using the repository browser.