汇编语言(Assembly Language)习题:键盘输入一个字符串,试将其中的小写字母转换为大写字母,其它字符保持不变。

这篇具有很好参考价值的文章主要介绍了汇编语言(Assembly Language)习题:键盘输入一个字符串,试将其中的小写字母转换为大写字母,其它字符保持不变。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.题目:键盘输入一个字符串,试将其中的小写字母转换为大写字母,其它字符保持不变。

前置知识:汇编语言常用系统功能调用(如果懂直接跳过看题目详解)

1.单字符输入(1号调用)

格式:

         MOV	AH,1
        INT  	21H

功能:从键盘输入字符的ASCII码送入寄存器AL中,并送显示器显示。

2.单字符显示(2号调用)

格式:

         MOV  DL,待显示字符的ASCII码
        MOV  AH,2
        INT     21H

功能:将DL寄存器中的字符送显示器显示,如果DL中为〈CTRL〉+〈BREAK〉的ASCII码,则退出。

3.打印输出(5号调用)

格式:

         MOV	DL,待打印字符的ASCII码
        MOV	AH,5
        INT	21H

功能:将DL寄存器中的字符送打印机打印。

4.结束调用(4CH号调用)

格式:

         MOV	AH,4CH
        INT	21H

功能:终止当前程序并返回调用程序。

5.显示字符串(9号调用)

格式:

          LEA	DX,待显示字符串首偏移地址
         MOV	AH,9
         INT 	21H

功能:将当前数据区中以‘$’结尾的字符串送显示器显示。

6.字符串输入(10号调用)

格式:

           LEA	DX,缓冲区首偏移地址
           MOV	AH,10
           INT	21H

功能:从键盘上输入一字符串到用户定义的输入缓冲区中,并送显示器显示。

3.各步骤详细讲解:

(1)基本框架:

DATAS SEGMENT
    ;此处输入数据段代码 
    string db 10,?,10 dup(?)
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    
    MOV AH,4CH
     INT 21H  
 
       
    
CODES ENDS
    END START

(2)步骤1:

    mov dx,offset String ;
    mov ah,0ah
    int 21h
    
    mov si,offset String+1  
    mov cx ,0              
    mov cl,[si]

经过常用的系统功能调用知识的回顾不难看出前3行是输入字符串;
第4行把string+1的偏移地址送给si寄存器。
有人问:为什么是string+1?
下面给出一个数据的实例:

buffer	db 81
;定义缓冲区,第1个字节填入可能输入的最大字符数
	db 0
;第2个字节将用于存放实际输入的字符数
	db 81 dup(0)
;第3个字节开始用于存放输入的字符串

10号调用从键盘上输入一字符串到用户定义的输入缓冲区中,并送显示器显示。入口参数为DS:DX。
例:从键盘上输入字符串’WELCOME’

DATA SEGMENT 'DATA'
    BUFF DB 10,0,10 DUP(?)
DATA ENDS
CODE SEGMENT 'CODE'
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV DX,OFFSET BUFF
    MOV AH,0AH
    INT 21H
     MOV AH,4CH
     INT 21H     
    
CODES ENDS
    END START

存储如下:
汇编语言给出菜单提示,要求用户输入一个字符串,选项1将小写转换为大写,选项2将大,汇编语言入门及习题讲解,汇编
同理,string+2就是实际存储的字符串的首地址。

    mov cx ,0              
    mov cl,[si]

这两行,先将CX清零,再把si指向的字节内容给cl,这两句也可以写成mov cx,[si]。CX是循环的条件之一,代表循环进行多少次,见下文。这里就是把字符串的实际大小给CX。

(3)步骤2:

lp: inc si 
    mov al,[si]             
    cmp al,'a'     ;每个字符判断是否<'a'或者>'z',是则直接转到下一个字符,否就转换成小写字符         
    jb next                 
    cmp al,'z'
    ja next                 
    sub al,20h                      
    mov [si],al
    
next:
     loop lp                 

注意:* CX 中存放循环次数

  • 只能使用段内直接寻址的8 位位移量
    LOOP
    LOOPZ / LOOPE
    LOOPNZ / LOOPNE
    执行步骤:
    (1) (CX) ← (CX) - 1
    (2) 检查是否满足测试条件,如满足则
    (IP) ← (IP) + 8位位移量,实行循环;
    不满足则 IP 不变,退出循环。

循环指令:LOOP OPR
测试条件:(CX) !=0

为零或相等时循环指令:LOOPZ(LOOPE) OPR
测试条件:ZF=1 且 (CX) !=0

不为零或不相等时循环指令:LOOPNZ(LOOPNE) OPR
测试条件:ZF=0 且 (CX) !=0

(4)步骤3:

     mov byte ptr [si+1],'$' ;因为9号调用字符串以'$'结尾,所以我们在结尾加上
     mov ah,2 
     mov dl,0ah       ;换行
     int 21h        
     mov dl,0dh        ;回车
     int 21h          
     
     mov dx,offset String+2  
     mov ah,9
     int 21h           ;调用9号DOS中断,显示首地址为DS:DX的字符串

完整代码:

DATAS SEGMENT
    ;此处输入数据段代码 
    string db 10,?,10 dup(?)
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    mov dx,offset String
    mov ah,0ah
    int 21h
    
    mov si,offset String+1  
    mov cx ,0              
    mov cl,[si] 
    
lp: inc si 
    mov al,[si]             
    cmp al,'a'              
    jb next                 
    cmp al,'z'
    ja next                 
    sub al,20h                      
    mov [si],al
    
next:
     loop lp                 
     mov byte ptr [si+1],'$' 
     mov ah,2 
     mov dl,0ah
     int 21h        
     mov dl,0dh
     int 21h           ;换行
     
     mov dx,offset String+2  
     mov ah,9
     int 21h           ;调用9号DOS中断,显示首地址为DS:DX的字符串
 
     MOV AH,4CH
     INT 21H     
    
CODES ENDS
    END START

运行结果

汇编语言给出菜单提示,要求用户输入一个字符串,选项1将小写转换为大写,选项2将大,汇编语言入门及习题讲解,汇编文章来源地址https://www.toymoban.com/news/detail-778061.html

到了这里,关于汇编语言(Assembly Language)习题:键盘输入一个字符串,试将其中的小写字母转换为大写字母,其它字符保持不变。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【汇编语言与微机原理】实验五:键盘按键与数码管显示

    熟悉星研集成开发环境,掌握微机接口程序编写调试的基本方法。 掌握矩阵式键盘工作原理及识别按键的方法。 掌握8段数码管显示数字或字符的工作原理和它的使用方法。 掌握用8255扫描键盘及用8255刷新数码管的显示方法。 在2*8(看 着像4*4,实际上是2*8 )的小键盘上按下

    2024年02月16日
    浏览(44)
  • 汇编语言笔记(一)——汇编语言基础

    一、开发环境 我使用visual studio 2022 preview,其他版本的设置大同小异。 第一步: 打开visual studio,点击“创建新项目”: 第二步: visual studio并没有专门的汇编项目,所以需要挂羊头卖狗肉,选择C++空项目 第三步: 输入项目名称,点击创建 第四步: 鼠标右键单击项目名称—

    2024年02月05日
    浏览(45)
  • 汇编语言—常见汇编指令汇总

    mov    寄存器 ,数据                如:mov ax ,8 mov   寄存器,寄存器              如:mov ax,bx mov   寄存器,内存单元          如:mov ax,[0] mov   内存单元,寄存器          如:mov [0],ax mov   段寄存器,寄存器          如:mov ds,ax add   寄存器,数据

    2024年02月10日
    浏览(44)
  • 5.8 汇编语言:汇编高效除法运算

    通常情况下计算除法会使用 div/idiv 这两条指令,该指令分别用于计算无符号和有符号除法运算,但除法运算所需要耗费的时间非常多,大概需要比乘法运算多消耗10倍的CPU时钟,在Debug模式下,除法运算不会被优化,但Release模式下,除法运算指令会被特定的算法经过优化后转

    2024年02月11日
    浏览(44)
  • 5.7 汇编语言:汇编高效乘法运算

    乘法指令是一种在CPU中实现的基本算术操作,用于计算两个数的乘积。在汇编语言中,乘法指令通常是通过 mul(无符号乘法) 和 imul(有符号乘法) 这两个指令实现的。由于乘法指令在执行时所消耗的时钟周期较多,所以编译器在优化代码时通常会尝试将乘法操作转换为更

    2024年02月11日
    浏览(38)
  • 5.6 汇编语言:汇编高效数组寻址

    数组和指针都是用来处理内存地址的操作,二者在C语言中可以互换使用。数组是相同数据类型的一组集合,这些数据在内存中是连续存储的,在C语言中可以定义一维、二维、甚至多维数组。多维数组在内存中也是连续存储的,只是数据的组织方式不同。在汇编语言中,实现

    2024年02月11日
    浏览(49)
  • 汇编语言第一讲:计算机的组织架构和汇编语言介绍

    第一讲:计算机的组织架构和汇编语言介绍 汇编语言 计算机组织架构 数字电路 术语回顾 数制 数字电路 硬件电路 数字电路的问题 汇编语言的开始 程序的节(sections) 调用操作系统的系统调用 列出文件(Listing files) 汇编和链接 调试汇编程序 反汇编现有的程序 附录 课程资源

    2024年04月09日
    浏览(52)
  • 5.10 汇编语言:汇编过程与结构

    过程的实现离不开堆栈的应用,堆栈是一种后进先出 (LIFO) 的数据结构,最后压入栈的值总是最先被弹出,而新数值在执行压栈时总是被压入到栈的最顶端,栈主要功能是暂时存放数据和地址,通常用来保护断点和现场。 栈是由 CPU 管理的线性内存数组,它使用两个寄存器 (S

    2024年02月11日
    浏览(41)
  • 南京邮电大学汇编语言程序设计实验一(汇编语言语法练习与代码转换)

    排除语法错误:给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。要求实验者按照原样对源程序进行编辑,汇编后,根据TASM给出的信息对源程序进行修改,知道没有语法错误为止。然后进行链接,并执行相应可

    2024年02月08日
    浏览(62)
  • 低级语言汇编真的各个面不如汇编吗?

    今日话题,低级语言汇编真的各个面不如C语言吗?C语言因其可移植性、开发效率和可读性而在各领域广泛使用,市场占有率极高。然而,汇编语言在特定场景下仍然具有独特优势,稳固地占据一席之地。如果你对这方面感兴趣,我可以分享一套包含各类语言和嵌入式行业教

    2024年02月06日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包