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 ENDS

STACKS SEGMENT        ;堆栈段
STACKS ENDS

CODES SEGMENT                                   ;代码段
          ASSUME CS:CODES,DS:DATAS,SS:STACKS    ;设置段寄存器 代码段寄存器CS:CODES 数据段寄存器DS:DATAS 堆栈段寄存器SS:STACKS
    START:                                      ;程序入口
          MOV    AX,DATAS                       ;设置数据段
          MOV    DS,AX
    
          MOV    AH,07H                         ;输入无回显 是指在输入字符时,字符不会在屏幕上显示出来
          INT    21H                            ;中断 AL=输入字符
    
          SUB    AL,1                           ;将输入的字符减1,得到其前导字符
          MOV    DL,AL                          ;将前导字符存入DL
          MOV    AH,02H                         ;输出前导字符
          INT    21H                            ;中断 DL=输出字符
    
          ADD    AL,1                           ;将输入的字符加1,得到中间字符
          MOV    DL,AL                          ;将中间字符存入DL
          MOV    AH,02H                         ;输出中间字符
          INT    21H                            ;中断 DL=输出字符
    
          ADD    AL,1                           ;将输入的字符加1,得到其后续字符
          MOV    DL,AL                          ;将后续字符存入DL
          MOV    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 SEGMENT
      STRING DB 'zabcdefghijklmnopqrstuvwxyza'
      CRLF   DB 0AH,0DH,'$'                         ;回车换行符
DATA ENDS

STACK SEGMENT PARA STACK
            DW  128 DUP(?)      ;定义栈段
            TOP LABEL WORD      ;栈顶指针
STACK ENDS

CODE SEGMENT
            ASSUME CS:CODE,DS:DATA,SS:STACK

      START:
            MOV    AX,DATA
            MOV    DS,AX
  
            MOV    AX,STACK                      ;设置栈段
            MOV    SS,AX                         ;设置栈顶指针
            LEA    SP,TOP                        ;设置栈顶
  
            MOV    AH,1                          ;读入一个字符
            INT    21H                           
  
            LEA    DI,STRING                     ;把STRING的地址放到DI
      L1:   INC    DI                            ;INC:+1,指向字符串的第一个字符 ,‘z’
            CMP    AL,[DI]                       ;比较当前字符和字符串的第一个字符
            JNE    L1                            ;如果不相等,则继续比较下一个字符
  
            DEC    DI                            ;如果相等,DEC:-1,指向前导字符
  
            MOV    AH,9                          ;显示字符串
            LEA    DX,CRLF                       ;显示回车换行符
            INT    21H
  
            MOV    CX,3                          ;设置循环次数
      L2:   MOV    DL,[DI]                       ;把字符串的字符放到DL
            MOV    AH,2                          ;显示字符
            INT    21H
            INC    DI                            ;指向下一个字符
            LOOP   L2                            ;循环CX次
  
            MOV    AH,4CH                        ;退出程序
            INT    21H
CODE ENDS
       
         END START

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/619169.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【python量化交易】qteasy使用教程07——创建更加复杂的自定义交易策略

创建更加复杂的自定义交易策略 使用交易策略类,创建更复杂的自定义策略开始前的准备工作本节的目标继承Strategy类,创建一个复杂的多因子选股策略策略和回测参数配置,并开始回测 本节回顾 使用交易策略类,创建更复杂的自定义策略 …

(四十)第 6 章 树和二叉树(树的双亲表存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

基于yolov5+streamlit目标检测演示系统设计

YOLOv5与Streamlit&#xff1a;智能目标检测可视化展示介绍 随着人工智能技术的飞速发展&#xff0c;目标检测技术已成为推动智能化社会进步的关键技术之一。在众多目标检测算法中&#xff0c;YOLOv5以其卓越的性能和实时性&#xff0c;成为了业界的佼佼者。与此同时&#xff…

代码随想录阅读笔记-动态规划【爬楼梯】

题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;给定 n 是一个正整数。 示例 1&#xff1a; 输入&#xff1a; 2输出&#xff1a; 2解释&#xff1a; 有两种方法可以爬到楼…

[AutoSar]BSW_Diagnostic_002 DCM模块介绍

目录 关键词平台说明背景一、DCM所处架构位置二、DCM 与其他模块的交互三、DCM 的功能四、DCM的内部子模块4.1 Diagnostic Session Layer (DSL)4.1 DSL 与其他模块的交互 4.2 Diagnostic Service Dispatcher (DSD)4.3 Diagnostic Service Processing (DSP)4.4 小结 关键词 嵌入…

vue3土味情话pinia可以持久保存再次修改App样式

我是不是你最疼爱的人-失去爱的城市 <template><div class"talk"><button click"getLoveTalk">土味情话</button><ul><li v-for"talk in talkStore.talkList" :key"talk.id">{{ talk.title }}<…

计算机服务器中了360后缀勒索病毒怎么解密,360后缀勒索病毒恢复

计算机网络技术的不断发展与应用&#xff0c;为企业的生产运营提供了极大便利&#xff0c;大大提高了企业的办公效率&#xff0c;为企业的生产运营注入了新的动力&#xff0c;但网络是一把双刃剑&#xff0c;在为企业提供便利的同时&#xff0c;也为企业的数据安全带来严重威胁…

macos使用yarn创建vite时出现Usage Error: The nearest package directory问题

步骤是macos上使用了yarn create vite在window上是直接可以使用了yarn但是在macos上就出现报错 我们仔细看&#xff0c;它说的If /Users/chentianyu isnt intended to be a project, remove any yarn.lock and/or package.json file there.说是要我们清除yarn.lock和package.js…

深圳晶彩智能ESP32-1732S019实时观看GPIO的状态

深圳晶彩智能ESP32-1732S019介绍 ESP32-1732S019开发板是基于ESP32-S3-WROOM-1模块作为主控&#xff0c;双核MCU ,集成WI-FI和蓝牙功能&#xff0c;主控频率可达240MHz , 512KB SRAM , 384KB ROM&#xff0c;8M PSRAM&#xff0c;16MB Flash&#xff0c;显示分辨率为170*320 I…

职校智慧校园现状及问题分析

各大中职院校及高职院校是校园信息化的先行者和开拓者&#xff0c;很早就开始注重信息化基础设施建设和信息化人文素养的提升。在过去几年里&#xff0c;随着国家大力发展与扶植职校教育&#xff0c;学校投入相当的经费进行了校园信息通信网络、计算机等基础硬件设备建设&#…

单调栈问题

原理 单调栈的核心原理是&#xff1a;在栈内保持元素的单调性&#xff08;递增或递减&#xff09; 单调递增栈&#xff1a; 用于处理“下一个更小的元素”问题。当新元素比栈顶元素小或等于时&#xff0c;直接入栈&#xff1b;否则&#xff0c;一直从栈顶弹出元素&#xff0c…

AtCoder Regular Contest 177 D. Earthquakes(概率 单调栈)

题目 D - Earthquakes 思路来源 官方题解 题解 对于不存在连锁反应的区间&#xff0c;每个区间独立处理&#xff0c;最后求个乘积 对于每个区间&#xff0c;相邻的两个杆子距离都小于H&#xff0c; 意味着没倒的区间是个连续的区间&#xff0c;假设要算i的概率 一定是第i…

金三银四面试题(二十七):适配器模式知多少?

什么是适配器模式 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将一个类的接口转换为客户期望的另一个接口。通过适配器&#xff0c;原本不兼容的接口可以一起工作&#xff0c;从而提高系统的灵活性和可扩展性。 关键元素&…

JVM 类的加载器

文章目录 1. 作用2. 类加载器的显示加载与隐式加载3. 类加载机制的必要性4. 加载的类是唯一的吗5. 类加加载机制的基本特征(了解) 1. 作用 类加载器是 JVM 执行类加载机制的前提。 ClassLoader 的作用&#xff1a; ClassLoader 是 Java 的核心组件&#xff0c;所有的 Class 都…

C++基础与深度解析 | C++初探 | Hello World | 系统I/O | 控制流 | 结构体与自定义数据类型

文章目录 一、从Hello World谈起二、系统I/O三、控制流四、结构体与自定义数据类型 一、从Hello World谈起 #include <iostream>void fun(const char *pInfo) {std::cout << pInfo << std::endl; }int main() {fun("Hello World!");fun("Hel…

【补充】图神经网络前传——DeepWalk

论文阅读 论文&#xff1a;https://arxiv.org/pdf/1403.6652 参考&#xff1a;【论文逐句精读】DeepWalk&#xff0c;随机游走实现图向量嵌入&#xff0c;自然语言处理与图的首次融合_随机游走图嵌入-CSDN博客 abstract DeepWalk是干什么的&#xff1a;在一个网络中学习顶点…

求最大梯形的面积

【入门】求最大梯形的面积 今天做4星题单发现一个好玩的&#xff08;太简单了&#xff09;。 说明 从键盘读入n(3<n<100)个梯形的上底、下底和高&#xff0c;请问这n个梯形中&#xff0c;最大面积的梯形的面积是多少&#xff1f;&#xff08;梯形面积的求解公式为 S …

ExcelVBA在选择区域(有合并)中删除清除空行

【问题】 关于删除空行&#xff0c;以前是用函数来完成工作的&#xff0c; 今天有人提出问题&#xff0c;传来这个文件&#xff0c; 现有数据&#xff0c;1w多行&#xff0c;其中有部分列有不同合并单元格&#xff0c;跨行也不一样。如果要进行筛选删除空行&#xff0c;有一定的…

Rerank进一步提升RAG效果

RAG & Rerank 目前大模型应用中&#xff0c;RAG&#xff08;Retrieval Augmented Generation&#xff0c;检索增强生成&#xff09;是一种在对话&#xff08;QA&#xff09;场景下最主要的应用形式&#xff0c;它主要解决大模型的知识存储和更新问题。 简述RAG without R…

买卖股票的最佳时机 II(LeetCode 122)

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…