Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly TASM数学协处理器FSUB不减法_Assembly_Tasm_X87 - Fatal编程技术网

Assembly TASM数学协处理器FSUB不减法

Assembly TASM数学协处理器FSUB不减法,assembly,tasm,x87,Assembly,Tasm,X87,我在使用数学协处理器时遇到困难。我需要用Heron公式计算三角形的面积(s=sqrt(p(p-a)(p-b)(p-c)),其中p是半周长,a,b和c是三角形的边)。我成功地读取了a,b,c并计算了p,但我在从p中减去a,b和c时遇到了问题。 我的代码: FSUB适用于浮点数。如果您有一个整数,可能需要FISUB。还要确保使用正确的操作数大小。此外,特别是如果您希望他人帮助,请注释您的代码。而且,像往常一样,学习使用调试器和指令集引用。@Jester是的,显然它可以与FISUB一起使用,但为什么呢

我在使用数学协处理器时遇到困难。我需要用Heron公式计算三角形的面积(s=sqrt(p(p-a)(p-b)(p-c)),其中p是半周长,a,b和c是三角形的边)。我成功地读取了a,b,c并计算了p,但我在从p中减去a,b和c时遇到了问题。 我的代码:


FSUB
适用于浮点数。如果您有一个整数,可能需要
FISUB
。还要确保使用正确的操作数大小。此外,特别是如果您希望他人帮助,请注释您的代码。而且,像往常一样,学习使用调试器和指令集引用。@Jester是的,显然它可以与
FISUB
一起使用,但为什么呢?我进入了3,4,5区,给了我6区,很公平。但我也输入了3,4,6,它给了我5.3326,所以它也适用于浮点数。几乎没有一条浮点数指令是正确的。它们将内存操作数解释为32位单精度浮点数,而不是提供的32位整数。
DATA SEGMENT PARA PUBLIC 'DATA'
A DD 0
B DD 0
C DD 0
P DD 0
PA DD 0 ; P-A
PB DD 0 ;P-B
PC DD 0 ;P-C
AREA DD 0
TWO DD 2
AUX DD 0
DATA ENDS

READ MACRO X, AUX ; THE READING MACRO FOR A, B AND C. THIS GOES FINE
LOCAL R, FINAL
PUSH EAX
PUSH EBX
PUSH EDX
MOV X, 0
MOV EBX, 10
R:
   MOV AH, 1H
   INT 21H
   CMP AL, 0DH
   JE FINAL
   CMP AL,30H
   JB R
   CMP AL, 39H
   JA R
   SUB AL, 48
   XOR AH,AH
   MOV AUX,EAX
   MOV EAX, X
   MUL EBX
   ADD EAX, AUX
   MOV X, EAX
   JMP R

FINAL:

POP EDX
POP EBX
POP EAX
ENDM

CODE SEGMENT PARA PUBLIC 'CODE'
.386
START PROC FAR
ASSUME CS:CODE, DS:DATA
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX

READ A, AUX
READ B, AUX
READ C, AUX

FINIT
FLD A
FADD B
FADD C
FDIV TWO
FSTP P ;P IS COMPUTED
FLD P
FSUB A ; HERE IS MY PROBLEM. IT SEEMS IT DOESN'T SUBTRACT A
FSTP PA
FLD P
FSUB B ; ALSO, THE SAME PROBLEM HERE
FSTP PB
FLD P
FSUB C ;ALSO, THE SAME PROBLEM HERE
FSTP PC
FLD P
FMUL PA
FMUL PB
FMUL PC
FSQRT
FSTP AREA
FWAIT

RET
START ENDP
CODE ENDS
END START