专栏首页乱码三千x86汇编语言之大小写快速转换

x86汇编语言之大小写快速转换

分析

大写字母 abcd对应的ascii码以及二进制:

A  41H  0100 0001B
B  42H  0100 0010B
C  43H  0100 0011B
D  44H  0100 0100B

小写字母 abcd对应的ascii码以及二进制:

a  61H  0110 0001B
b  62H  0110 0010B
c  63H  0110 0011B
d  64H  0110 0100B

发现规律

大写转小写,只需二进制和0010 0000B进行或运算即可:

or 0010 0000B ;大写变成小写, 小写依然还是小写

小写转大写,只需二进制和1101 1111B进行与运算即可:

and 1101 1111B ;小写变成大写, 大写依然还是大写

示例代码

assume cs:code ,ds:data

data segment
	db 'ABcDEF'
	db 'abCdef'
data ends


code segment

	start:
		mov ax ,data
		mov ds,ax
		mov bx,0
		
		mov ax,data
		mov es,ax
		
		mov cx,6
		
downLetter:		;大写转小写
		mov dl,ds:[bx]
		or dl,00100000B
		mov es:[bx],dl
		inc bx
		loop downLetter
		
	
		mov cx,6
		mov bx,6
upLetter:		;小写转大写
		mov dl,ds:[bx]
		and dl,11011111B
		mov es:[bx],dl
		inc bx
		loop upLetter
		
		mov ah,4ch
		int 21h
		
	
code ends
end start

以上代码可使用偏移地址组合方式[bx+x]进行优化,结果为:

assume cs:code ,ds:data

data segment
	db 'ABcDEF'
	db 'abCdef'
data ends


code segment

	start:
		mov ax ,data
		mov ds,ax
		mov bx,0
		
		mov ax,data
		mov es,ax
		
		mov cx,6
		
changeLetter:		
		;大写转小写
		mov dl,ds:[bx]
		or dl,00100000B
		mov es:[bx],dl
		;小写转大写
		mov dl,ds:[bx+6]
		and dl,11011111B
		mov es:[bx+6],dl
		inc bx
		loop changeLetter
		
	
		mov ah,4ch
		int 21h
		
	
code ends
end start

本文分享自微信公众号 - 乱码三千(infree6),作者:有瓣知识

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 汇编语言---大小写字母转换

    跋扈洋
  • x86汇编语言之段空间大小的对齐

    以8086为例,假如声明一个段,不论是数据段,栈段还是代码段, 一旦段里面有内容,那么会从一个新的段地址开始开辟空间,如果代码进行了分段处理,那么就会形成16字...

    乱码三千
  • 初学汇编

    若尘_
  • 汇编语言知识总结

    汇编是一类编程语言,每种cpu对应一种cpu语言,这些语言语法大同小异,指令集有所不同,

    乱码三千
  • Sickle:推荐一款优质ShellCode开发工具

    Sickle是一个shellcode开发工具,用于加速创建正常运行的shellcode所需的各个步骤。 Sickle主要有以下功能: 识别可能会导致shellc...

    FB客服
  • Tencent JDK 国产化CPU架构支持分享

    导语 GIAC(全称:GLOBAL INTERNET ARCHITECTURE CONFERENCE)是长期关注互联网技术与架构的高可用架构技术社区和msup...

    腾讯大数据
  • CSAPP第三章(1)

    计算机的发展是很迅猛的,短短的几十年,社会发生了天翻地覆的变化。这也离不开处理器芯片的高速发展。下面就简单的罗列一下处理器芯片的发展历程。

    HeaiKun
  • Tencent JDK 国产化CPU架构支持分享

    ? GIAC(GLOBAL INTERNET ARCHITECTURE CONFERENCE)是长期关注互联网技术与架构的高可用架构技术社区和msup推出的,...

    腾讯技术工程官方号
  • 《深入理解计算机系统》阅读笔记--程序的机器级表示(上)

    编译器基于编程语言的规则,目标机器的指令集和操作系统遵循的惯例,经过一系列的阶段生成机器代码。GCC c语言编译器以汇编代码的形式产生输出,汇编代码是机器代码的...

    coders
  • 阿里面试官:说说你对java虚拟机中,并发设施和指令重排序的理解!

    对于一名高级 Java 工程师来说,JVM 可以说是面试必问的一个知识点,而大多数人可能没有对 JVM 的实际开发和使用经验,接下来这一系列文章将带你深入了解 ...

    Java程序猿
  • Linux x86 和ARM什么区别?

    CISC:Complex Instruction Set Computer,复杂指令集计算机;

    FPGA技术江湖
  • 汇编语言入门教程

    但是,计算机不理解高级语言,必须通过编译器转成二进制代码,才能运行。学会高级语言,并不等于理解计算机实际的运行步骤。

    刘盼
  • 汇编语言入门教程

    学习编程其实就是学高级语言,即那些为人类设计的计算机语言。 但是,计算机不理解高级语言,必须通过编译器转成二进制代码,才能运行。学会高级语言,并不等于理解计算机...

    ruanyf
  • C语言实现大写字母A转换为小写a

    解题思路:字符数据以ASCII码存储在内存的,形式与整数的存储形式相同,所以字符型数据和其他算术型数据之间可以互相赋值和运算。

    小林C语言
  • 《深入理解计算机系统》(CSAPP)读书笔记 —— 第三章 程序的机器级表示

      在之前的《深入理解计算机系统》(CSAPP)读书笔记 —— 第一章 计算机系统漫游文章中提到过计算机的抽象模型,计算机利用更简单的抽象模型来隐藏实现的细节。...

    嵌入式与Linux那些事
  • 程序员需要了解的硬核知识之汇编语言(全)

    之前的系列文章从 CPU 和内存方面简单介绍了一下汇编语言,但是还没有系统的了解一下汇编语言,汇编语言作为第二代计算机语言,会用一些容易理解和记忆的字母,单词来...

    cxuan
  • 【连载】两百行Rust代码解析绿色线程原理(二)一个能跑通的例子

    首先,让我们在名为 green_threads 的文件夹中启动一个新项目。命令行执行:

    MikeLoveRust
  • 计算机基础系列:源代码如何被计算机执行

    现在各行各业的朋友都开始使用计算机解决自己的业务问题,网络上有大量的免费公开课,教我们处理数据并数学建模。Python等编程语言上手快,开源软件多,足以应付绝大...

    PP鲁
  • 实现一个基于XDP_eBPF的学习型网桥

    eBPF技术风靡当下,eBPF字节码正以星火燎原之势被HOOK在Linux内核中越来越多的位置,在这些HOOK点上,我们可以像编写普通应用程序一样编写内核的HO...

    Linux阅码场

扫码关注云+社区

领取腾讯云代金券