汇编实验(输入一个数输出其平方值)

时间:2021-02-18 01:08:24

实验三 输出20以内数的平方值

题目:输入一个0到19的数字,输出这个数的平方值

要求:1.以十进制输出

           2.平方值可以事先存放在表单中

           3.输入范围越界要有错误提示

           4.可以重复输入,直至输入空格为止

我的思路:把0-19的平方值,放在一段存储区(一定要以字为单位,因为一个字节最大为255),按照0^2,1^2.......19^2的顺序,这样可以方便索引,比如输入5,则其平方值在表单中偏移地址为5*2,这样就可以以  BUF[EBP*2](BUF为表单首地址,EBP为输入的数值)寻址得到相应的平方值。然后的问题就是,我们以十号调用输入的为一个个字符,这样就要想办法把这一串数字符转换为十进制数,可以讲每个数字字符减去30H转换为数字然后求加权和(即乘十循环),存起来放到EBP,最后一个问题就是将在表单中索引到的十进制平方值,除10去余存放到一个指定的存储区,注意倒着存储,即先得到的余数在存储区下面。最后将此存储区内的内容输出即可。当然这中间的会遇到很多细节的问题,需要耐心调试,精心分析。做好基本符合要求的程序后,最后稍加优化,在细节上加以改进即可,当然也可以自己再添加一些功能。

           另一种思路是,将平方值以字符的形式存放到表单中,这样知道输入的数值后可以直接在表单中查找到输出,不需要取余转化,但是个人感觉前一种思路更能够锻炼自己的汇编能力。

;功能:输入一个0~19的整数,输出其平方值
;作者:KDF5000
;时间:2012.11.9
.386
DATA SEGMENT USE16
SQUARE DW 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361 ;存入0~19的平方值便于查询
INPUT DB 8
DB ?
DB 8 DUP('$') ;次缓冲区用于存放输入的值
DB 5 DUP('$')
OUTPUT DB '$' ;此区存放平方值的输出
ERROR DB '请输入一个0-19范围的数!$'
MESSAGE DB '请输入0-19范围的数:$'
RESULT DB 0DH,0AH,' 其平方值为:$'
EXITMES DB 0DH,0AH,'谢谢你的使用!',0DH,0AH,'$'
HUANHANG DB 0DH,0AH,'$'
DATA ENDS

STACK SEGMENT USE16 STACK
DB 200 DUP(0)
STACK ENDS

CODE SEGMENT USE16
ASSUME DS:DATA,CS:CODE,SS:STACK
BEGIN:
MOV AX,DATA
MOV DS,AX

;输出提示信息
LEA DX,MESSAGE
MOV AH,9
INT 21H

; 输入数值
LEA DX,INPUT
MOV AH,10
INT 21H

;如果输入空格则推出程序
MOV AL,INPUT+2
CMP AL,20H
JE EXIT

;取出输入的数值
LEA SI,INPUT+2
MOV AX,0
MOV BL,10
MOV CL,INPUT+1 ;记录循环的次数

;将输入的值放到AX
LOPA: MOV DL,[SI]
DEC CL
SUB DL,30H
MUL BL
ADD AX,DX
INC SI
CMP CL,0
JE NEXT
JMP LOPA

NEXT:
;如果输入的数字大于十九或者小于小于0报错
CMP AX,19
JG ERROR1
CMP AX,0
JB ERROR1

MOV BP,AX ;将输入的数据作为变量
MOV AX,SQUARE[EBP*2] ;此时AX存放平方值

MOV CL,10 ;设置除数
MOV SI,OFFSET OUTPUT
LOPB: ;次循环为把已经存入的平方值转换为十进值输出
DEC SI
DIV CL
ADD AH,30H
MOV [SI],AH
MOV AH,0
CMP AL,0
JNE LOPB
;输出结果提示
LEA DX,RESULT
MOV AH,9
INT 21H
;输出十进制平方值
MOV DX,SI
MOV AH,9
INT 21H
;输出换行
LEA DX,HUANHANG
MOV AH,9
INT 21H
;跳到开始继续输入
JMP BEGIN

ERROR1:
LEA DX,HUANHANG
MOV AH,9
INT 21H

LEA DX,ERROR
MOV AH,9
INT 21H

LEA DX,HUANHANG
MOV AH,9
INT 21H

JMP BEGIN

EXIT:
LEA DX,EXITMES ;输出退出信息
MOV AH,9
INT 21H

MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN



相关文章