INPUT MACRO NUM
LOCAL NEXT1
LOCAL NEXT2
LOCAL END0
NEXT1:
LEA DX,STRING1
MOV AH,9
INT 21H
MOV AH,1
INT 21H
CMP AL,30H
JL NEXT2
CMP AL,39H
JG NEXT2
JMP END0
NEXT2:
LEA DX,STRING2
MOV AH,9
INT 21H
JMP NEXT1
END0:
AND AL,0FH
MOV NUM,AL
ENDM
DATA SEGMENT
STRING1 DB 0AH,0DH,'Please input a number(0 to 9):$'
STRING2 DB 0AH,0DH,'Bad number!$'
STRING3 DB 0AH,0DH
DB 10 DUP(0)
NUM1 DB ?
NUM2 DB ?
DATA ENDS
STACK1 SEGMENT PARA STACK
BUF Db 60 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
INPUT NUM1
INPUT NUM2
CLD
LEA DI,[STRING3+2]
MOV AL,NUM1
OR AL,30H
STOSB
MOV AL,2BH
STOSB
MOV AL,NUM2
OR AL,30H
STOSB
MOV AL,3DH
STOSB
XOR AX,AX
MOV AL,NUM1
ADD AL,NUM2
AAA
PUSH AX
MOV AL,AH
TEST AL,AL
JZ NEXT
OR AL,30H
STOSB
NEXT:
POP AX
OR AL,30H
STOSB
MOV AL,24H
STOSB
LEA DX,STRING3
MOV AH,9
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS
END START
給妳壹個算法: 可以求壹個數的近似開方平值!
1+3+5+7......2(n-1)=n的平方
所以只要用n的平方的值連續減去奇數1.3.5......2(n-1) 當減到第n+1次其差為負,則夠減的次數n就是要開方的近似值! 我可能說的不是太明白,給妳壹段開方子程序給妳參考!
mov bx,0
mov dx,1
mov ax,y ;y是要開方的數
again: sub ax,dx
jc exit ;如果不夠減則結束
inc dx
inc dx
inc bx ;計數器bx
jmp again
最後求出的那個bx的值就是所要求的平方根