基于汇编语言的打印水仙花数

发布于:2022-12-23 ⋅ 阅读:(439) ⋅ 点赞:(0)

打印水仙花数

需求说明

设计要求:

  • 进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。

  • 具体的设计任务及要求:

  • 输入一个三位整数n;

  • 将小于n的水仙花数打印出来(各位数字的立方和等于该数本身);

  • 程序要有子程序结构或宏指令,结构清晰;

  • 友好清晰的用户界面,能识别输入错误并控制错误的修改。

  • 两种方法实现:计算法、查表法

设计说明

所谓“水仙花数”是指一个3位数,其个、十、百位数字的立方和等于其本身。

功能简述

程序可以输入一个三位数,若输入有误则提示错误,并提示重新输入,若输入正确,系统将显示出所有大于等于 100,并且小于等于输入数字的水仙花数。 然后提示是否继续,若用户输入y或Y,则系统回到最开始的状态,若输入 n或N,则退出系统,若为其他则提示错误,并重新输入。

设计说明(简要的分析与概要设计)

简要分析

原理说明

程序主体流程由四大部分组成,分别为输入模块,运算模块,输出模块与错误识别模块。其中运算模块按照课程设计要求,分为查表法模块与运算法模块。

错误识别模块分别针对三种可能发生的输入错误,做出了相应提示,并要求用户重新输入,分别为上限数字输入有误,运算方法选择有误与是否继续选择有误。其中上限数字输入有误细分为输入位数错误,含有数字以外的字符或三位数的首尾为0.

程序流程图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据段设计

DATA    SEGMENT USE16 
BUF     DB      10                             	 	; 保存输入的字符串 
BUF_L   DB      ?                             	 	 	; 输入字符串的长度 
BUF_S   DB      10      DUP(0)                	 	 	; 输入的字符 
INPUT   DB      'PLEASE IPUT X(100~999): $'  	 	 	; 输入提示 
INERR   DB      'INPUT ERROR! TRY AGAIN.', 0AH, 0DH, '$'  ; 错误输入提示 
CHOOSE  DB      '1. LOOKUP', 0AH, 0DH, '2. CALCULATE', 0AH, 0DH, 'CHOOSE METHOD YOU WANT: $' 
OUT_S   DB      'ALL NARCISSISTIC NUMBER UNDER $' 	 	;输出语句 
RES_S   DB      'WANNA PLAY AGAIN? (Y/N): $' 	 	 	; 是否继续使用 
TAB     DW      153, 370, 371, 407            	 	 	; 查表法 
=       8                             	 	 	; 表长度 (字节) 
RANGE   DW      ?                             	 	 	; 实际输入的数字(转换后) 
OUT_BUF DB      10      DUP(0) 	 	 	 	 	 	; 输出缓冲区 
TMP     DW      0                             	 	 	; 累加 
DATA    ENDS 

主要子程序(或宏指令)设计与描述

宏指令:

1. CRLF 输出换行
2. READ A 从读取一段字符串存取缓冲区A中
3. WRITE A 输出字符串A
4. GETC 从控制台读取一个字符存入AL

TONUM 将读取的字符串转换为数字(已经过合法性检查)子程序:

QUAD 按照水仙花数规则计算AX中的三位数映射,并存入变量TMP

CLN_A 清空所有存储器,防止多次执行时数据紊乱

IS_NUM 判断AL中的字符是否为数字字符,是则AH=0,否则AH=1

RADIX 将AX中的数字转换为BX进制,存入SI指向的缓冲区中

源程序与执行结果

源程序代码

见附件main.asm

测试

测试用例

输入数字:

在这里插入图片描述

在这里插入图片描述

测试结果

在这里插入图片描述

左:查表法右:计算法


网站公告

今日签到

点亮在社区的每一天
去签到