| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1014 人关注过本帖
标题:求二次方程两个实根的程序
只看楼主 加入收藏
lllyw
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-5-15
收藏
 问题点数:0 回复次数:9 
求二次方程两个实根的程序

请各位帮看看,怎么改 25,35,45行的错误,都是instruction operands must be the same size。

先谢谢了。==..==


.model small
.386
.387
.stack
.data
msg1 db'please input a=' , '$'
msg2 db'please input b=', '$'
msg3 db'please input c=', '$'
msg4 db'tag=1, this formulia has root', '$'
msg5 db'tag=0, this formulia has not root', '$'
ftwo dd 2.0

ffour dd 4.0
_fa dd 3.0 ;二次方程的系数a
_fb dd 8.0 ;二次方程的系数b
_fc dd 5.0 ;二次方程的系数c
fr1 dd ? ;二次方程的第一个根
fr2 dd ? ;二次方程的第二个根
.code
.startup
mov dx,offset msg1 ;20
mov ah,9
int 21h
xor ax,ax
call read ;调用输入10进制数的子程式
mov _fa,ax ;25
mov dl,al
mov ah,2
int 21h
call dpcrlf
mov dx,offset msg2
mov ah,9
int 21h
xor ax,ax
call read ;调用输入10进制数的子程式
mov _fb, ax ;35
mov dl,al
mov ah,2
int 21h
call dpcrlf
mov dx,offset msg3
mov ah,9
int 21h
xor ax,ax
call read
mov _fc,ax ;45
mov dl,al
mov ah,2
int 21h
call dpcrlf
stsrt1: finit
fld ftwo
fmul _fa ;计算2a
fld ffour
fmul _fa
fmul _fc ;计算4ac
fld _fb
fmul_fb ;计算b*b
fsubr ;计算b*b-4ac
start2: ftst
fstsw ax
sahf
jz froot1 ;b*b-4ac=0,转移到froo1
fsqrt
fstsw ax
test ax,1
jz froot1 ;b*b-4ac>0,转移到froo1
fcompp
mov ah,9 ;显示无实根
mov dx,offset msg5
int 21h
jmp start3
froot1: fld _fb ;求第一个根
fchs ;计算-b
fsub st(0),st(1)
fdiv st(0),st(2)
fstp fr1
froot2: fld _fb
fchs
fadd
fdivr
fstp fr2
start3: .exit 0

read proc ; 输入有符号10进制数的子程式
push bx ;出口参数:AX=补码表示的二进制数值
push cx ;说明:负数用"-"引导,数据范围是+32767~-32768
push dx
xor bx,bx ;BX保存结果
xor cx,cx ;CX为正负标志,0为正,-1为负
mov ah,1 ;输入一个字符
int 21h
cmp al,'+' ;是"+",继续输入字符
jz read1
cmp al,'-' ;是"-",设置-1标志
jnz read2
mov cx,-1
read1:mov ah,1 ;继续输入字符
int 21h
read2: cmp al,'0' ;不是以0~9之间的字符,则输入数据结束
jb read3
cmp al,'9'
ja read3
sub al,30h ;是以0~9之间的字符,则转换为二进制数
shl bx,1 ; 利用移位指令,实现数值乘10:BX*10到BX
mov dx,bx
shl bx,1
shl bx,1
add bx,dx
;
mov ah,0
add bx,ax ;已输入数值乘10后,与新输入数值相加
jmp read1 ;继续输入字符
read3:cmp cx,0 ;是负数,进行求补
jz read4
neg bx
read4:mov ax,bx ;设置出口参数
pop dx
pop cx
pop bx
ret ;子程序返回
read endp
dpcrlf proc ;使光标回车换行的子程序
push ax
push dx
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
pop dx
pop ax
ret

dpcrlf endp
end

搜索更多相关主题的帖子: 方程 
2007-06-27 13:27
lllyw
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-5-15
收藏
得分:0 

米人来么?????????


2007-06-27 13:38
herbert_1987
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:1314
专家分:0
注 册:2007-5-13
收藏
得分:0 
mov _fc,ax ;45

ax 是 16 位
_fc 是 32 位
不对应.

人生重要的不是所站的位置,而是所朝的方向
2007-06-27 13:40
lllyw
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-5-15
收藏
得分:0 

那要怎么改?怎么把ax 改成32位?或者用什么替换ax?


2007-06-27 13:49
herbert_1987
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:1314
专家分:0
注 册:2007-5-13
收藏
得分:0 
好像有一个指令可以扩充位数的,但我忘记了..

人生重要的不是所站的位置,而是所朝的方向
2007-06-27 13:52
lllyw
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-5-15
收藏
得分:0 
我去百度一下,看看找得到没有。。。

2007-06-27 13:55
herbert_1987
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:1314
专家分:0
注 册:2007-5-13
收藏
得分:0 
mov word ptr _fa, ax
这样编译过关,不过不知道会不会有问题...

人生重要的不是所站的位置,而是所朝的方向
2007-06-27 13:59
lllyw
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-5-15
收藏
得分:0 
我试试看

2007-06-27 14:05
herbert_1987
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:1314
专家分:0
注 册:2007-5-13
收藏
得分:0 
可以了没?

人生重要的不是所站的位置,而是所朝的方向
2007-06-27 14:07
lllyw
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-5-15
收藏
得分:0 

可以了

谢谢你了

不过输出还有些问题。。。

但是我应该自己可以解决了

谢谢了啊


2007-06-27 14:13
快速回复:求二次方程两个实根的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029542 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved