python3 输入一个数然后输出他的平方_汇编实验(输入一个数输出其平方值)

该博客介绍了一个使用汇编语言编写的程序,旨在输入0到19之间的数字并输出其平方值。程序首先将0-19的平方值存储在表单中,然后通过读取用户输入,计算输入数值对应的平方,并将其转换为十进制输出。程序还包括错误检查和用户友好的提示信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验三 输出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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值