汇编语言功能字符串大小写转换实现方法是什么
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,本篇内容介绍了"汇编语言功能字符串大小写转换实现方法是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所
千家信息网最后更新 2025年11月15日汇编语言功能字符串大小写转换实现方法是什么
本篇内容介绍了"汇编语言功能字符串大小写转换实现方法是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
问题1:将data段中的第一个字符串转换成大写,第二个字符串转换成小写
分析:
如何转换成大小写
如果利用ASCII码进行转换的话,需要判断该字符是大写还是小写,汇编语言实现太过困难,可以对字符串的二进制进行分析。
在ASCII码中,大写字母的第五位为0,小写字母的第五位为1,可以对位取反进行大小写转换
assume cs:code,ds:datadata segment db 'BaSiC' db 'InfoMaTion'data ends;------------------------------------;做法一code segmentstart: mov ax,data mov ds,ax mov bx,0 ;设置ds:bx指向数据段 mov cx,5 ;对于第一个字符串进行循环转换s: mov al,ds:[bx] and al,11011111B ;将字符的第五位转换成0,转换成大写字母 mov ds:[bx],al inc bx loop s mov bx,5 ;指向第二个字符串 mov cx,11s0: mov al,ds:[bx] or al,00100000B ;将字符的第五位转换成1,转换成小写字母 mov ds:[bx],al inc bx loop s mov ax,4c00h int 21hcode ends;------------------------------------;做法二,改进版:利用bx+idata实现代码的简化 code segmentstart: mov ax,data mov ds,ax mov bx,0 mov cx,5s: mov al,ds:[bx] and al,11011111b mov ds:[bx],al mov al,ds:[bx+5] or al,00100000b mov ds:[bx+5],al inc bx loop s code ends;------------------------------------end start
问题2:将data段中每个单词的头一个字母改成大写字母
分析: 如何实现循环
该段数据是结构化的数据,则可以看做成一个二维数组,用一个变量定位行,用一个常量定义第一个字母
assume cs:code,ds:datadata segment db '1. file ' db '2. edit ' db '3. search 'data endscode segmentstart: mov ax,data mov ds,ax mov bx,0 ;ds:bx指定数据段,同时bx作为定义行的变量 mov cx,3s: mov al,ds:[bx+3] ;3作为常量,定义第一个字母 and al,11011111b mov ds:[bx+3],al add bx,16 loop s mov ax,4c00h int 21hcode ends end
问题3:将data段中每个单词改为大写字母
分析: 1、对于这种结构化的数据,不仅需要一个变量定义行,同时也需要一个变量定义列
assume cs:code,ds:data,ss:stackdata segment db 'ibm ' db 'dec ' db 'vax 'data ends ;--------------------------------------------;做法一code segmentstart: mov ax,data mov ds,ax mov bx,0 mov cx,3s0: mov dx,cx ;同时使用同一个变量进行循环,需要对外层循环的值保存 mov si,0 mov cx,3 ;cx设置成内层循环的次数 s: mov al,ds:[bx+si] and al,11011111b mov ds:[bx+si],al inc si loop s add bx,16 mov cx,dx ;用dx中存放的外层循环恢复外层循环的计数器 loop s0 mov ax,4c00h int 21hcode ends ;--------------------------------------------;做法二,利用栈保存外层循环的值stack segment dw 8 dup(0) ;利用栈段保存cx的值stack endscode segmentstart: mov ax,stack mov ss,ax mov sp,16 ;ss:sp指向栈段 mov ax,data mov ds,ax mov bx,0 ;ds:bx指向数据段 mov cx,3s0: push cx mov si,0 mov cx,3 s: mov al,ds:[bx+si] and al,11011111b mov ds:[bx+si],al inc si loop s add bx,16 pop cx loop s0 mov ax,4c00h int 21hcode ends;-------------------------------------------- end start
问题4:将data段中每个单词的前4个字母改为大写字母
分析 如何定位每个字符串的内容
采用bx+si+idata来进行首字母的定位
assume cs:code,ds:data,ss:stackdata segment db '1. display ' db '2. brows ' db '3. replace 'data endsstack segment dw 8 dup(0)stack ends code segmentstart: mov ax,stack mov ss,ax mov sp,16 mov ax,data mov ds,ax mov bx,0 mov cx 3 ;设置外层循环只有3行s0: push cx mov si,0 mov cx,4 ;设置内层循环只需4次 s: mov al,ds:[bx+si+3] ;设置需要改变的第一个字母 and al,11011111b mov ds:[bx+si+3],al inc si loop s add bx,16 pop cx loop s0 mov ax,4c00h int 21hcode ends end start
问题5:设计一个子程序,将一个全是字母的字符串转化成大写
分析: 子程序的设计需要注意两个问题:字符串的内容和长度
字符串的内容不可能全部放在子程序中,可以考虑在子程序中放入字符串的首地址,利用循环遍历字符串,循环的次数就是字符串的长度
assume cs:code,ds:datadata segment db 'conversation'data ends code segmentstart: mov ax,data mov ds,ax mov si,0 ;ds:si指向字符串所在空间的首地址 mov cx,12 ;cx存放字符串的长度 call capital mov ax,4c00h int 21h capital: and byte ptr ds:[si],11011111b inc si loop capital retcode ends end start
问题6:设计一个子程序,将一个全是字母,以0结尾的字符串,转化成大写
分析:
1、要处理以0结尾的字符串,需要识别结尾的0
采用jcxz进行判断最后的字符是否是0
2、循环的次数无法知道
所以不能用loop,只能使用jmp跳到循环开始处
assume cs:code,ds:datadata segment db 'conversation',0data ends code segmentstart: mov ax,data mov ds,ax mov si,0 ;ds:si指向数据段的开始处 call capital mov ax,4c00h int 21h capital: mov cl,ds:[si] mov ch,0 jcxz ok ;如果字符串为0,则会跳出循环 and byte ptr ds:[si],11011111b inc si jmp short capital ;跳转实现循环 ok: ret ;结束循环 code endsend start
复杂一点的对结构化数据的版本
assume cs:code,ds:data,ss:stackdata segment db 'word',0 db 'unix',0 db 'wind',0data endsstack segment db 8 dup(0)stack ends code segmentstart: mov ax,data mov ds,ax mov bx,0 mov cx,3 ;外循环实现s: mov si,bx call capital add bx,5 ;内循环的实现 loop s mov ax,4c00h int 21h capital: push cx push si change: mov cl,ds:[si] mov ch,0 jcxz ok and byte ptr ds:[si],11011111b inc si jmp short change ok: pop si pop cx ret code endsend
"汇编语言功能字符串大小写转换实现方法是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
字符
字符串
循环
字母
大写
数据
问题
分析
指向
内容
变量
大写字母
子程序
大小
做法
外层
小写
汇编语言
语言
单词
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广闪联网络技术有限公司
松江区app软件开发系统
sql数据库安全性的语句
列举身边网络安全威胁的例子
金蝶没有加密服务器
网络安全硕士留学菲律宾
北京放射卫生监测数据库
腾讯云服务器哪里便宜
汉王人验考勤数据库文件
赛季服务器金农选择
江苏常见网络技术节能规范
微博服务器docker
以太坊软件开发
深圳新普软件开发有限公司电话
软件开发项目统计表
服务器自动关机如何设置
互联网科技跨国集团公司
云墙怎么改日本服务器
mango服务器
门头沟区应用软件开发服务价钱
secbase与别的数据库
河北现代化软件开发批发价格
魔兽斗地主服务器
普陀区工商数据库系统研发要求
单位网络安全做法
艾默生dcs软件开发语言
steam星露谷物语建立服务器
数据库集成英文
优秀毕业论文 软件开发
华为通用软件开发薪资多少