NO TIME, BUT COURAGE, BUT BEAUTY(汇编小程序)

2023-10-24 04:40

本文主要是介绍NO TIME, BUT COURAGE, BUT BEAUTY(汇编小程序),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

程序题目:

编写一个程序。 先从键盘输入一个字符串(有英文字母,可能也有数字),然后显示其中数字符的个数、英文字母的个数和字符串的长度;字符串中不能有空格,若有将其删除,并将改变后的字符串按相反的顺序显示出来;输入第二个字符串,显示的时全都以‘*’显示,然后将输入的字符串与前面处理后的字符串比较是否相同,若相同,输出“Password Right!”,否则输出 “Password Error!”。
样例:

题目分析:这个题目比较直白,有几个要注意的地方

1)个人在处理输入原始的密码并计算其中的字母和数字的长度时,所用的方法是单个字符输入(调用中断),每次输入都检查是否是回车,是否是空格,是否是数字或是字母;
2)在输出长度时,如果长度小于10,可以直接将二进制表示与‘0’相加再用字符的形式输出,但是当长度大于10就行不通了,要把十位和个位分离出来;所用的方法是将长度去除以10,这样div会直接把个位和十位分开;

代码:

DATAS SEGMENTMSG  DB      "Please input a string:",  '$'MSG1 DB      "The number of alphabet:", '$'MSG2 DB      "The number of digit:", '$'MSG3 DB      "The length of string: ",'$'MSG4 DB      "The opposite direction string: " ,'$'MSG5 DB      "Please input password:",'$'MSG6 DB      "The result:", '$'MSG7 DB      "Password Right",'$'MSG8 DB      "Password Error", '$'DIG_NUM DB    0  ;数字长度ALP_NUM DB    0   ;字母长度BLANK_NUM DB  0   ;空格个数FLAG DB       '*', '$'PASSWORD DB 30 DUP ('$')  ;密码内容与长度PASSWORD_LEN DB 0TEST_PASS DB 30 DUP ('$') ;输入的测试密码内容与长度TEST_PASS_LEN DB 0CRLF DB 0DH, 0AH, '$' ;回车,换行 结束
DATAS ENDSSTACKS SEGMENTDB 8 DUP (0)DB 8 DUP (0)
STACKS ENDSCODES SEGMENTASSUME CS:CODES, DS:DATAS, SS:STACKS
START: ;PROC FAR ;主函数 MOV AX, DATASMOV DS, AXMOV AX, STACKSMOV SS,AX;MOV AX, CODES  ;怎么回事;MOV CS,AXLEA DX, MSGMOV AH, 9INT 21H;输入并处理密码,处理指去空格并同时计算各种长度LEA DI, PASSWORDCALL SET_AND_DEAL_POSSWORDLEA DX, CRLFMOV AH, 9INT 21H;输出各种长度LEA DX, MSG1MOV AH, 9INT 21HMOV AL, ALP_NUMMOV AH, 0CALL OUTPUT_LENLEA DX, CRLFMOV AH, 9INT 21HLEA DX, MSG2MOV AH, 9INT 21HMOV AL, DIG_NUMMOV AH, 0CALL OUTPUT_LENLEA DX, CRLFMOV AH, 9INT 21HLEA DX, MSG3MOV AH ,9INT 21HMOV AL, PASSWORD_LENADD AL, BLANK_NUMMOV AH, 0CALL OUTPUT_LENLEA DX, CRLFMOV AH, 9INT 21H;输出真正的字符串,有空格就反序输出LEA DX, MSG4MOV AH, 9INT 21H;LEA DX, PASSWORD;MOV AH, 9;INT 21HLEA SI, PASSWORDCALL OUTPUT_PASSWORDLEA DX, CRLFMOV AH, 9INT 21H;输入密码LEA DX, MSG5MOV AH, 9INT 21HLEA DI, TEST_PASSCALL INPUT_PASSWORDLEA DX, CRLFMOV AH, 9INT 21H;测试密码;输入参数LEA SI, TEST_PASSLEA DI, PASSWORDMOV AL, [PASSWORD_LEN]MOV AH, [TEST_PASS_LEN]CALL IS_RIGHTLEA DX,CRLFMOV AH,9INT 21HMOV AH,4CHINT 21H;******************* SET_AND_DEAL_POSSWORD ***************
SET_AND_DEAL_POSSWORD PROC NEARSO:MOV AH, 1INT 21HCMP AL, 0DH ;输入回车结束JNZ NOT_ENDMOV AH, '$'MOV [DI], AH ;输入字符串结束符RETNOT_END:CMP AL, ' 'JZ BLANK_CASEMOV [DI], AL ;把数据装入密码中INC DICMP AL, 'A'; 'A' = 65, 'a' = 97, '9' = 57JB  DIGIT_CASE ; 数字的情况JMP ALPHABEG_CASE ;字母的情况BLANK_CASE:INC BLANK_NUMJMP SODIGIT_CASE:INC DIG_NUMINC PASSWORD_LENJMP SOALPHABEG_CASE:INC ALP_NUMINC PASSWORD_LENJMP SOSET_AND_DEAL_POSSWORD ENDP;*************** OUTPUT_LEN ************
OUTPUT_LEN PROC NEARMOV BL, 10DIV BLMOV BH, AH ;保存余数MOV DL, ALCMP DL, 0JZ OL_S1  ;如果十位为0不输出ADD DL, '0'MOV AH, 2INT 21HOL_S1:MOV DL, BH ;得到个位ADD DL, '0'MOV AH, 2INT 21HRETOUTPUT_LEN ENDP
;**************************
OUTPUT_PASSWORD PROC NEARCMP BLANK_NUM, 0JNZ OP_S1 ;反序;ELSEMOV DX, SIMOV AH, 9INT 21HRETOP_S1:MOV DL, PASSWORD_LENMOV DH, 0ADD SI, DX ;从后面开始DEC SI;按字符输出MOV CL, PASSWORD_LENMOV CH, 0OP_S2:MOV DL, [SI]MOV AH, 2INT 21HDEC SILOOP OP_S2RET
OUTPUT_PASSWORD ENDP;********************** INPUT_PASSWORD **************
INPUT_PASSWORD PROC NEARS2:MOV AH, 8INT 21HCMP AL, 0DH ; 判断是不是输入换行符JNZ IP_S3MOV AH, '$'MOV [DI], AHRETIP_S3:MOV [DI], AL;[si]是当前地址,相当于c语言中的*pt = value; INC DIINC [TEST_PASS_LEN]MOV DL, '*'MOV AH, 2INT 21HJMP S2INPUT_PASSWORD ENDP;*************************
IS_RIGHT PROC NEARCMP AL, AHJZ S3LEA DX, MSG8 ;长度不相等MOV AH, 9INT 21HRETS3:MOV CL, PASSWORD_LENMOV CH, 0S4: MOV AL, [SI]MOV AH, [DI]INC SIINC DICMP AL, AHJNZ S5LOOP S4;rightLEA DX, MSG7MOV AH,9INT 21HRETS5:;errorLEA DX, MSG8MOV AH,9INT 21HRETIS_RIGHT ENDP
;********
CODES ENDS
END START
NO TIME, BUT COURAGE, BUT BEAUTY

 经验总结:

1)写代码,可读性,可重用性,简洁性要保证, BUT BEAUTY;

2)对于自己的代码,如果自己都不能清晰地表达出思路,那就该反省反省,并采取行动,NOT TIME, BUT COURAGE.

转载于:https://www.cnblogs.com/kinthon/p/4497186.html

这篇关于NO TIME, BUT COURAGE, BUT BEAUTY(汇编小程序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/272770

相关文章

python中time模块的常用方法及应用详解

《python中time模块的常用方法及应用详解》在Python开发中,时间处理是绕不开的刚需场景,从性能计时到定时任务,从日志记录到数据同步,时间模块始终是开发者最得力的工具之一,本文将通过真实案例... 目录一、时间基石:time.time()典型场景:程序性能分析进阶技巧:结合上下文管理器实现自动计时

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听