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


    打印水仙花数

    需求说明

    设计要求:

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

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

    • 输入一个三位整数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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

    宏指令:

    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

    测试

    测试用例

    输入数字:

    在这里插入图片描述

    在这里插入图片描述

    测试结果

    在这里插入图片描述

    左:查表法右:计算法

  • 相关阅读:
    【STL源码剖析】deque 的使用
    业务安全相关安全产品的反思
    软件设计模式系列之九——桥接模式
    山东省如何准备申报“专精特新”?
    ModuleNotFoundError: No module named ‘Crypto.Cipher‘或‘Crypto 的终极解决方案
    Advanced .Net Debugging 2:CLR基础
    USB3.1HUB驱动芯片VL822
    uniapp打包网页版配置页面窗口标题
    [HJ60 查找组成一个偶数最接近的两个素数]
    3.1、Linux的vim编辑器
  • 原文地址:https://blog.csdn.net/newlw/article/details/126763760