下面是关于浮点运算指令方面的一例,程序对三角形的面积和周长进行了计算!!!
.386
.model flat, stdcall ;32 bit memory model
option casemap :none ;case sensitive
include m1.inc
.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke InitCommonControls
invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
invoke ExitProcess,0
;########################################################################
DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
mov eax,uMsg
.if eax==WM_INITDIALOG
.elseif eax==WM_COMMAND
.if wParam==IDC_OK
invoke GetDlgItemText,hWin,IDC_A,addr lpA,sizeof lpA ;得到边长a
invoke FpuAtoFL,addr lpA,0,DEST_FPU;转化为数值
invoke GetDlgItemText,hWin,IDC_B,addr lpB,sizeof lpB
invoke FpuAtoFL,addr lpB,0,DEST_FPU
invoke GetDlgItemText,hWin,IDC_C,addr lpC,sizeof lpC
invoke FpuAtoFL,addr lpC,0,DEST_FPU
fld st(0) ;判定所输入数据是否是三角形
fld st(2)
fadd
fcomp st(3)
fstsw ax ; 将状态字保存
and eax,100000000B ;;测试状态字的第9位,若为1则说明两边之和小于了第三边
jnz ErrorHandle fld st(0)
fld st(3)
fadd
fcomp st(2)
fstsw ax
and eax,100000000B
jnz ErrorHandle
fld st(1)
fld st(3)
fadd
fcomp st(1)
fstsw ax
and eax,100000000B
jnz ErrorHandle ;判定结束
fadd ;边长相加
fadd ;边长相加
invoke FpuFLtoA,0,4,addr lpL,SRC1_FPU or SRC2_DIMM
invoke SetDlgItemText,hWin,IDC_L,addr lpL
fild LTWO
fdiv
fld st(0)
invoke FpuAtoFL,addr lpA,0,DEST_FPU
fsub
fld st(1)
invoke FpuAtoFL,addr lpB,0,DEST_FPU
fsub
fld st(2)
invoke FpuAtoFL,addr lpC,0,DEST_FPU
fsub
fmul
fmul
fmul
fsqrt
invoke FpuFLtoA,0,4,addr lpS,SRC1_FPU or SRC2_DIMM
invoke SetDlgItemText,hWin,IDC_S,addr lpS
ret
ErrorHandle:
invoke MessageBox,hWin,addr lpMessage,NULL,MB_OK and MB_ICONERROR
ret
.endif
.elseif eax==WM_CLOSE
invoke EndDialog,hWin,0
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
end start
下面是inc文件的内容;
include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc
include fpu.inc
includelib fpu.lib
includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib
DlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM
.const
IDD_DIALOG1 equ 101
IDC_A equ 1003
IDC_B equ 1004
IDC_OK equ 1005
IDC_C equ 1006
IDC_S equ 1008
IDC_L equ 1010
LTWO dw 2
lpMessage db "不是三角形",0
;#########################################################################
.data?
hInstance dd ?
lpA db 10 dup(?)
lpB db 10 dup(?)
;#########################################################################
lpC db 10 dup(?)
lpL db 10 dup(?)
lpS db 10 dup(?)
附件是全部的源程序: m1.rar