selph
selph
发布于 2022-01-05 / 332 阅读
0
0

《xchg rax,rax》片段分析0x04--大小写转换

前言

本次是该系列的的第0x04篇


实验环境:

  • Windows10 + VS2022 + masm

0x04

代码片段链接:xorpd | xchg rax,rax 0x04

xor al, 0x20

代码分析

代码片段分析

al寄存器是8位宽度,

0x20的十进制是32,

xor操作可以给这个8位宽度的数字加上或者减去32

刚好,ASCII码英文字母A是65(0x41),a是97(0x61),中间的差值刚好是32(0x20)

本篇内容的含义是英文字母的大小写转换(真是巧妙,又学到了新知识)

测试代码:

#include<stdio.h>
int main()
{
	char str[] = "hello WORLD";
	for (int i = 0; str[i]; i++) str[i] ^= str[i] != ' ' ? 0x20 : 0;
	printf("%s",str);
	return 0;
}

输出:HELLO world

参考资料

ASCII码一览表,ASCII码对照表 (biancheng.net)


评论