影子论坛

发新帖

三角形计算公式ヾ ^_^♪分享给大家

隔黑白键空好音 2021-11-30 408

注意,在计算正、余弦前应将角度换算成弧度。假设只需考虑正弦值(Triangle),
如下:
.486 ;支持FPU指令集
STACK SEGMENT STACK USE16

DB 200 DUP(0)
STACK ENDS
DATA SEGMENT USE16
TI_LEN DD 35.48 ;斜边长度
ANGL DD 51.6 ;锐角的角度(度数)
AREA DD ? ;三角形的面积
TEMP DW 180 ;临时变量,存放180*和2,便于装到FPU中
DATA ENDS
CODE SEGMENT USE16
ASSUME CS: CODE,DS:DATA,SS:STACK
BEGIN: MOV AX,DATA
MOV DS,AX
FINIT FLD TI_LEN ;斜边装入FPU的栈顶ST(0)
FLD ANGL ;锐角的角度装入FPU的栈顶

FLDPI ;常数送到FPU的发,此时寄存器栈的坎态见图5.M

FMUL ST(1),ST(0) ;计算(3.14*ANGL).乘积在ST(1)中
(TEMP)-ST(0),上述来积改为由ST(2)米元
FILD TEMP

FDIV ST(2),ST(0) ;将度数换成弧度值,(rANGL)/180.弧度值在也在S(公中
;将弧度值交换到ST(0)中,即(ST(0))-(ST(2))

FXCH ST(2);计算弧度的正弦值一ST(0)。寄存器栈的状态见图6.14(6)
FST ST(2) ;在ST(2)中存放一个弧度值的备份
FSIN ;计算锐角对边的长度:对角的正弦值*斜边长度一ST(0)
FMUL ST(0),ST(3) ;一个直角边的长度ST(0)-ST(2),弧度值ST(2)-ST(0)
FXCH ST(2) ;计算弧度的余弦值-ST(0)
FCOS ;计算锐角邻边的长度:邻角的余弦值*斜边长度+ST(0)
FMUL ST(0),ST(3) ;两个直角边相乘-ST(0)
FMUL ST(0),ST(2) ;将2送到临时变量中
MOV TEMP,2
FILD TEMP ;2在ST(0)中,直角边的乘积从ST(0)移到了ST(1)
FDIV ST(1),ST(0) ;直角边的乘积/2+ST(1),得到三角形的面积
FXCH ;将三角形的面积交换到ST(0)
FST AREA ;将三角形的面积保存到变量AREA中
FINIT
MOV AH,4CH
INT 21H
CODE ENDS
END

最新回复 (0)
返回
发新帖
隔黑白键空好音
主题数
5
帖子数
9
注册排名
506

Processed Time:0.19414710998535