请教一个关于求平方根的汇编程序

ruthm 2012-05-30 03:38:42
我想请问我划红的那条语句答案给出的解释是试除,可是我实在没看出来它有什么用,请赐教。
题目是:某16位二进制数,放在变量名为DATA开始的连续两个单元中,试编程求其平方根和余数,将其分别存放在ANS和REMAIN中。
答案给出的源程序是:
DATA SEGMENT
NUM DW 3
ANS DB ?
REMAIN DB ?
DATA ENDS

STACK SEGMENT STACK
DB 20 DUP (?)
STACK ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV BL,2
AGAIN: MOV CX,NUM
MOV AL,BL
MUL BL
CMP AX,CX
JG EXIT
MOV AX,CX
DIV BL
INC BL
JMP AGAIN
EXIT: DEC BL
MOV ANS,BL
MOV AL,BL
MUL BL
SUB CX,AX
MOV REMAIN,CL
MOV AH,4CH
INT 21H
CODE ENDS
END START
...全文
647 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangbch 2012-06-06
  • 打赏
  • 举报
回复
我也没有看出这句有什么用,另外,这个程序的速度很慢,BL逐次加1,然后计算BL的平方和被开方数比较,直到BL的平方大于被开方数为止。对于开方,比较快的方法是牛顿迭代法。

看看这个帖子吧,http://topic.csdn.net/t/20050902/15/4246143.html内有我写的多个开平方的程序。
包括
1. 被开方数是32bit的
2. 被开方数是16 bit的
3. 被开方数是是小数的
ruthm 2012-06-06
  • 打赏
  • 举报
回复
恩恩,谢谢啦
ruthm 2012-05-30
  • 打赏
  • 举报
回复
既然程序新一轮循环时ax会被重新赋值,那ax=cx/bl有何用呢?
WJN92 2012-05-30
  • 打赏
  • 举报
回复
AGAIN: MOV CX,NUM
MOV AL,BL
MUL BL
CMP AX,CX
JG EXIT
MOV AX,CX
DIV BL
INC BL
JMP AGAIN

cx = NUM;
bl = 2;
while(0)
{
ax = al * bl
if (ax < cx) goto exit;
ax = cx / bl
bl ++;
}

希望帮到你

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧