当前位置: 首页 > news >正文

4.1 编写程序,从键盘接收一个小写字母,然后找出他的前导字符和后续字符,再按顺序显示这三个字符

方法一:

运行效果:

输入B,输出显示ABC;输入A,输出显示@AB

思路:

1、通过键盘输入接收一个字母。

2、将输入的字母减去1,得到前导字符,然后输出。

3、将输入的字母加上1,得到中间字符,然后输出。

4、将输入的字母加上1,得到后续字符,然后输出。

通过MOV AH,07H调用中断接收输入字符,之后输入的字符就存储在AL中,只需要对AL进行操作就可以了。
 

Tips: MOV AH 01H 和 MOV AH 07H的区别:

MOV AH 01H:按下任何键,将其对应字符的ASCII码送入AL中,并在屏幕上显示该字符。

MOV AH 07H:按下任何键,将其对应字符的ASCII码送入AL中,不在屏幕上显示该字符。

使用MOV AH 01H的效果:

使用MOV AH 07H的效果:(本博客使用的是07H)

两者均是从键盘接收字符并存入AL中,只是显示的区别。

代码如下:

DATAS SEGMENT        ;数据段
DATAS ENDSSTACKS SEGMENT        ;堆栈段
STACKS ENDSCODES SEGMENT                                   ;代码段ASSUME CS:CODES,DS:DATAS,SS:STACKS    ;设置段寄存器 代码段寄存器CS:CODES 数据段寄存器DS:DATAS 堆栈段寄存器SS:STACKSSTART:                                      ;程序入口MOV    AX,DATAS                       ;设置数据段MOV    DS,AXMOV    AH,07H                         ;输入无回显 是指在输入字符时,字符不会在屏幕上显示出来INT    21H                            ;中断 AL=输入字符SUB    AL,1                           ;将输入的字符减1,得到其前导字符MOV    DL,AL                          ;将前导字符存入DLMOV    AH,02H                         ;输出前导字符INT    21H                            ;中断 DL=输出字符ADD    AL,1                           ;将输入的字符加1,得到中间字符MOV    DL,AL                          ;将中间字符存入DLMOV    AH,02H                         ;输出中间字符INT    21H                            ;中断 DL=输出字符ADD    AL,1                           ;将输入的字符加1,得到其后续字符MOV    DL,AL                          ;将后续字符存入DLMOV    AH,02H                         ;输出后续字符INT    21H                            ;中断 DL=输出字符MOV    AH,4CH                         ;结束程序INT    21H                            ;中断 0=结束程序
CODES ENDS                                      ;代码段结束END START                                     ;程序结束 

在上述代码中,我们可以总结出输出一个字符的固定格式

MOV DL,要显示的字符现在所存入的寄存器(例如本例中是AL)

MOV AH,02H

INT 21H

方法二:

从方法一中我们看出,当输出的字母是A时,打印出来的三个连续字符是“@AB”,这是因为A的ascll码前一位是“@”,如何实现当输出的字母是A时,打印出来的三个连续字符是“ZAB”呢?运行效果如下所示:

思路:

1、定义一组字符串,让'a','z'首尾相接,'zabcdefghijklmnopqrstuvwxyza'

2、接收用户从键盘输入的字母,将输入字母与字符串的字母进行比较。

3、如果字符不相等,则继续循环直到找到匹配的字符;找到匹配字符后,通过DEC指令将当前所在字符串的位置减1,以便指向输入字符的前导字符,输出;再加1,找到中间字符,输出;再加1,找到后续字符,输出。

代码如下:

DATA SEGMENTSTRING DB 'zabcdefghijklmnopqrstuvwxyza'CRLF   DB 0AH,0DH,'$'                         ;回车换行符
DATA ENDSSTACK SEGMENT PARA STACKDW  128 DUP(?)      ;定义栈段TOP LABEL WORD      ;栈顶指针
STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV    AX,DATAMOV    DS,AXMOV    AX,STACK                      ;设置栈段MOV    SS,AX                         ;设置栈顶指针LEA    SP,TOP                        ;设置栈顶MOV    AH,1                          ;读入一个字符INT    21H                           LEA    DI,STRING                     ;把STRING的地址放到DIL1:   INC    DI                            ;INC:+1,指向字符串的第一个字符 ,‘z’CMP    AL,[DI]                       ;比较当前字符和字符串的第一个字符JNE    L1                            ;如果不相等,则继续比较下一个字符DEC    DI                            ;如果相等,DEC:-1,指向前导字符MOV    AH,9                          ;显示字符串LEA    DX,CRLF                       ;显示回车换行符INT    21HMOV    CX,3                          ;设置循环次数L2:   MOV    DL,[DI]                       ;把字符串的字符放到DLMOV    AH,2                          ;显示字符INT    21HINC    DI                            ;指向下一个字符LOOP   L2                            ;循环CX次MOV    AH,4CH                        ;退出程序INT    21H
CODE ENDSEND START

http://www.lryc.cn/news/347451.html

相关文章:

  • (Java)心得:LeetCode——18.四数之和
  • 网络编程套接字详解
  • 蓝桥杯备战11.歌唱比赛
  • 微信小程序中的图像奥秘:图片与Base64的华丽变身记
  • 【35分钟掌握金融风控策略25】定额策略实战2
  • 我和爬虫的故事
  • 常用的简单友好的工单系统(免费)- WGCAT
  • 使用Pycharm编写Python程序时对基本类结构中方法的重写的两种初步操作方式
  • HTTP URL 详解
  • Python 原生爬虫
  • 数据结构---经典链表OJ
  • HTML_CSS学习:CSS像素与颜色
  • 华为交换机配置导出备份python脚本
  • DS:时间复杂度和空间复杂度
  • AI跟踪报道第41期-新加坡内哥谈技术-本周AI新闻:本周Al新闻: 准备好了吗?事情即将変得瘋狂
  • Go 之 interface接口理解
  • 简约在线生成短网址系统源码 短链防红域名系统 带后台
  • 设置默认表空间和重命名
  • Hive大表join大表如何调优
  • SAF文件选择、谷歌PhotoPicker图片视频选择与真实路径转换
  • java可变参数
  • Flutter 中的 Expanded 小部件:全面指南
  • [Kubernetes] KubeKey 部署 K8s v1.28.8
  • C# 与 Qt 的对比分析
  • MapReduce | 二次排序
  • Java后端初始化项目(项目模板)
  • electron 多窗口 vuex/pinia 数据状态同步简易方案(利用 LocalStorage)
  • 自定义数据集图像分类实现
  • 【C++】手搓读写ini文件源码
  • undolog