我想请问我划红的那条语句答案给出的解释是试除,可是我实在没看出来它有什么用,请赐教。
题目是:某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. 被开方数是是小数的