当前位置: 代码迷 >> 汇编语言 >> 请问一个关于求平方根的汇编程序
  详细解决方案

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

热度:7665   发布时间:2013-02-26 00:00:00.0
请教一个关于求平方根的汇编程序
我想请问我划红的那条语句答案给出的解释是试除,可是我实在没看出来它有什么用,请赐教。
题目是:某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


------解决方案--------------------------------------------------------
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 ++;
}

希望帮到你
------解决方案--------------------------------------------------------
我也没有看出这句有什么用,另外,这个程序的速度很慢,BL逐次加1,然后计算BL的平方和被开方数比较,直到BL的平方大于被开方数为止。对于开方,比较快的方法是牛顿迭代法。

看看这个帖子吧,http://topic.csdn.net/t/20050902/15/4246143内有我写的多个开平方的程序。
包括
1. 被开方数是32bit的
2. 被开方数是16 bit的
3. 被开方数是是小数的