DATAS SEGMENT
OUTERROR DB 0AH,0DH,'ERROR!$'
INPUT DB'PLEASE INPUT X(0..9):$'
TABLE DB 0H,1H,4H,9H,16H,25H,36H,49H,64H,81H
RESULT DB ?
BUF1 DB 0AH,0DH,'IT IS ='
BUF2 DB 4 DUP(?)
DATAS ENDS
STACKS SEGMENT
DB 200
DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME
CS:CODES,DS:DATAS,SS:STACKS
START:
MOV
AX,DATAS
MOV
DS,AX
LEA
DX,INPUT
MOV
AH,9
INT
21H
MOV
AH,1
INT
21H
CMP
AL,'0'
JB ERROR
CMP
AL,'9'
JA ERROR
AND
AL,0FH
MOV
BL,AL
MOV
BH,0
MOV
AL,TABLE[BX]
MOV
RESULT,AL
LEA
DI,BUF2
MOV
CL,4
SHR
AL,CL
OR
AL,30H
MOV
[DI],AL
INC DI
MOV
AL,RESULT
AND
AL,0FH
OR
AL,30H
MOV
[DI],AL
INC
DI
MOV
BYTE PTR[DI],'$'
MOV
DX,OFFSET BUF1
MOV
AH,9
INT
21H
JMP
EXIT
ERROR:LEA DX,OUTERROR
MOV AH,9
INT 21H
EXIT:MOV AH,4CH
INT
21H
CODES ENDS
END
START
平方表中的平方值后都加了H(加了H“形不变值变”),这里是便于直接以10进制输出结果。(输出必须先处理成ASCII码)如果不加H,则以十六进制输出(数字在机内以二进制储存,不加H以16进制输出)
我的另一篇相关文章http://blog.sina.com.cn/u/4c59c08a010007l1
又一种思路,我帮别人完善了一下的。
http://www.programfan.com/club/post-239368.html
DATA
SEGMENT
TABLE DB
0,1,4,9,16,25,36,49,64,81
ASK DB
0DH,0AH,'Please enter a nummble(0~9):',0DH,0AH,'$'
SEV DB
'Key (N/n)
to close!$'
ANS DB
'THE
RESULT IS:$'
OVER DB
0DH,0AH,'ERROR!',0DH,0AH,0AH,0DH,'$'
DATA ENDS
CODE SEGMENT
ASSUME
CS:CODE,DS:DATA
START: MOV
AX,DATA
MOV
DS,AX
;将数据送入DS
STA: MOV
DX,OFFSET
SEV
;输出提示
MOV
AH,9
INT
21H
MOV
DX,OFFSET ASK
MOV
AH,9
INT
21H
MOV
AH,1
;输入数字
INT
21H
CMP
AL,'N'
;判断输入是否为“N/n”
JZ
CLO
;为“N/n”则跳转至CLO
CMP
AL,'n'
JZ
CLO