汇编中的大小写字母转换的方法
本文由发表于7年前 | 汇编语言 | 评论数 1 |  被围观 9,175 views+

在汇编语言中,要实现大小写字母的转换,我们得先分析一下大写字母和小写字母的ASCII码,通过比较可以发现,大写字母和小写字母之间二进制的区别就是第6位1还是0,如果是大写字母第6位为0,如果是小写字母,第6位则为1,举个例子:A的二进制表示为:0100 0001,a的二进制表示为:0110 0001,通过对比可以发现,它们的区别就是第六位是一还是0。大写字母的第六位为0,小写字母的第六位为1。知道这个就好办了:

如果要转换成大写字母,则使用and指令把ASCII码的第6位置0;

and al,11011111B

如果要转换成小写字母,则使用or指令把ASCII码的第6为置1。

or al,00100000B

下面把程序中给出的三个字符串的小写字母转换为大写字母:

汇编代码
assume cs:codesg,ds:datasg,ss:stacksg
datasg segment
	db 'abc             '
	db 'lib             '
	db 'dos             '
datasg ends

stacksg segment
	dw 0,0,0,0,0,0,0,0	;定义一个段,用来做栈段,容量为16个字节
stacksg ends

codesg segment

	start:mov ax,stacksg
		  mov ss,ax
		  mov sp,16
		  mov ax,datasg
		  mov ds,ax
		  mov bx,0

		  mov cx,3	;外层循环三次,对应为数据段中的三个字符串
	s0:	  push cx	;将外层循环的cx值压栈保存
		  mov si,0
		  mov cx,3	;内层循环三次,对应为数据段中给出的每个字符串的三个字母

	s:	  mov al,[bx+si]	;
		  and al,11011111b	;使用and把小谢字母转换为大写字母
		  mov [bx+si],al	;重新保存到内存单元中
		  inc si	;si加1,继续循环修改下一个字母
		  loop s

		  add bx,16	;把bx加上16指向下一个字符串所在的地址
		  pop cx	;从栈顶弹出原来的cx值,恢复cx
		  loop s0	

		  mov ax,4c00h
		  int 21h

codesg ends
end start

这样就实现了汇编中的大小写字母的转换。

除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/uppercase-and-lowercase-letters-in-the-compilation-method-of-conversion.html
arthinking Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2011 4/16
文章评论
    一条评论
给我留言

有人回复时邮件通知我
汇编语言的相关文章
随机文章 本月热门 热评
1 乔布斯:遗失的访谈(1995) 2013/5/15
2 Struts2笔记 – Struts2相关帮助文档和在线学习资料 2011/6/18
3 【转】在危机的边缘上 马斯克如何看待失败? 2013/11/4
4 MyBatis一级缓存引发的问题 2016/6/16
5 Javascript笔记 – 面向对象的Javascript编程 2012/5/31
6 Java基础笔记 – IO流分类详细介绍和各种字节流类介绍与使用 过滤流 字节流 2011/10/21
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.