汇编语言功能字符串大小写转换实现方法是什么
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,本篇内容介绍了"汇编语言功能字符串大小写转换实现方法是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所
千家信息网最后更新 2025年01月22日汇编语言功能字符串大小写转换实现方法是什么
本篇内容介绍了"汇编语言功能字符串大小写转换实现方法是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
问题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安全错误
数据库的锁怎样保障安全
作业批改软件开发
成立软件开发公司条件
军队网络安全观后感
js下载服务器静态文件
.net 连接数据库文件
上海市夺畅网络技术有限公司
网络信息或网络安全
网络安全核心个股公司
宏基260服务器
使命召唤18服务器快照
人行网络安全宣传
网络安全密钥怎么显示
热血球球数据库
关于网络安全主题绘画有字
国有银行软件开发总部
易语言昵称图标保存在数据库
醉八仙服务器
中国美术信息系统数据库
数据库名称35mydb是对的吗
商丘网络安全工程师证书
综合服务器开发与管理
网络安全目标是什么
一个数据库只有一个表
大学计算机网络技术要造模吗
使命召唤18服务器快照
贵州淼浩网络技术
中华财险软件开发面试
数据库开发需要会什么
大型软件开发周期
修改数据库后台密码