zoukankan      html  css  js  c++  java
  • 用汇编进行大小写转换

    最近学习了一下8086的16位汇编语言,学习了一种比较奇葩的进行字母大小写转换的方法。

    不必用CMP语句进行判断,一步到位。当然前提要求是输入的数据必须是字母哈。

    把字母的ASCII码用二进制查看:

    大写        16进制        二进制                                             小写            16进制             二进制

    A            41            0100 0001                                        a                 61                0110 0001

    B            42            0100 0010              b                  62                0110 0010

    C            43           0100 0011                                         c                  63               0110 0011

    D           44            0100 0100

    ...

    Z          5A            0101 1010                                        z                     7A             0111 1010

    明显的,小写的ASCII值 = 大写的ASCII值 + 20H

    而且,小写的和大写的在第5位是完全不同的,大写的恒为0, 小写的恒为1

    于是,可以用位运算。

    assume cs:code, ds:data
    
    data segment
    	db 'baSiC'
        db 'InFOinTion'
    data ends
    
    code segment
    start:	mov ax, data
    		mov ds, ax     ;数据域对应data
    		
    		mov bx, 0
    		mov cx, 5
    s:		mov al, [bx]
    		and al, 11011111b     ;转换成大写
    		mov [bx], al
    		inc bx
    		loop s
    		
    		mov bx, 5
            mov cx, 10
    s1:		mov al, [bx]
    		or  al, 00100000b      ;转换成小写
    		mov [bx], al
    		inc bx
    		loop s1
    		
    		mov ax, 4c00h
    		int 21h
    code ends
    end start
    

    对应的C++语言:

    #include <cstdio>
    using namespace std;
    
    int main()
    {
    	char a[9] = "aBcdeFGh";
    	char b[9] = {0};
    	char c[9] = {0};
    	
    	for (int i=0; i<9; i++)
    		b[i] = a[i] & 0xDF;   //转换成大写
    	for (int i=0; i<9; i++)
    		c[i] = a[i] | 0x20;    //转换成小写
    	
    	return 0;
    }
    
  • 相关阅读:
    “阿基里斯与乌龟”的终结性思考
    这个世界本来的样子
    Seven times have I despised my soul 《我曾七次鄙视自己的灵魂》
    Youth is not a time of life, it is a state of mind.
    对于过去所犯的错误,最好的道歉是在将来做正确的事
    使用UltraISO刻录自己的音乐CD步骤
    为什么一个目录里放超过十个Mp4文件会导致资源管理器和播放程序变卡变慢?
    用Perl发送邮件小例子
    用df命令显示磁盘使用量和占用率。
    三个JS函数闭包(closure)例子
  • 原文地址:https://www.cnblogs.com/ay27/p/3043596.html
Copyright © 2011-2022 走看看