第一个asm……好囧
这真是一门可怕的学科 TAT
编写程序实现:从键盘输入0~9中任意一个自然数,将其平方值在屏幕上显示出来(要求使用查表法)。
于是,
-
DATAS SEGMENT
-
INFOR1 DB 'please input the number:$'
-
INFOR2 DB 0AH,0DH,'the result is:$'
-
SQUTAB DB 0,1,4,9,16,25,36,49,64,81
-
SQUBUF DB ?
-
STRING DB 2 DUP(30h) ,'$'
-
DATAS ENDS
-
-
CODES SEGMENT
-
ASSUME CS:CODES,DS:DATAS
-
START:
-
MOV AX,DATAS
-
MOV DS,AX
-
-
MOV DX,OFFSET INFOR1 ;显示INFOR1内容
-
MOV AH,9
-
INT 21H
-
-
MOV AH,1 ;输入数字
-
INT 21H
-
SUB AL,30H
-
-
MOV BX,OFFSET SQUTAB ;读入表
-
XLAT ;查询
-
MOV SQUBUF,Al
-
-
MOV DX,OFFSET INFOR2 ;显示INFOR2内容
-
MOV AH,9
-
INT 21H
-
-
MOV AX,0
-
MOV AL,SQUBUF
-
MOV BL,10
-
DIV BL
-
ADD STRING[1],AH
-
ADD STRING[0],AL
-
-
LEA DX,STRING
-
MOV AH,09H
-
INT 21H
-
-
MOV AH,4CH
-
INT 21H
-
CODES ENDS
-
END START
然后老师讲了一下,发现有符合我们现在学到的方法…… - -:
-
DATAS SEGMENT
-
INFOR1 DB 'please input the number:$'
-
INFOR2 DB 0AH,0DH,'the result is:$'
-
SQUTAB DB 00,01,04,09,16,25,36,49,64,81
-
SQUBUF DB ?
-
DATAS ENDS
-
-
CODES SEGMENT
-
ASSUME CS:CODES,DS:DATAS
-
START:
-
MOV AX,DATAS
-
MOV DS,AX
-
-
MOV DX,OFFSET INFOR1 ;显示INFOR1内容
-
MOV AH,9
-
INT 21H
-
-
MOV AH,1 ;输入数字
-
INT 21H
-
SUB AL,30H
-
MOV CL,AL
-
-
MOV DX,OFFSET INFOR2 ;显示INFOR2内容
-
MOV AH,9
-
INT 21H
-
-
MOV BX,OFFSET SQUTAB
-
MOV AH,0
-
MOV AL,CL
-
XLAT
-
AAM
-
-
MOV BH,AL
-
ADD AH,30H
-
MOV DL,AH
-
MOV AH,2
-
INT 21H
-
-
MOV AL,BH
-
ADD AL,30H
-
MOV DL,AL
-
MOV AL,2
-
INT 21H
-
-
MOV AH,4CH
-
INT 21H
-
CODES ENDS
-
END START