【逆向】第二章 数据宽度与逻辑运算


前言

需要进制转换的基础

Byte 字节 8bit
Word 字 16Bit 2字节
DWord 双字 32Bit 4字节

一、数据宽度

计算机中由于受到硬件条件的制约,数据长度有限制,超过最多宽度的数据会被扔掉

“源码,补码,反码都是后来的人解释概念引进来的东西,自己用起来方便,对于我们理解概念没有实际作用“

1.设计算机只能存储4位2进制数

在这里插入图片描述
对于无符号的如图从0到F,然后F又回到0,但是我们要存贮有符号数,就把这个圆沿纵轴切一半
如果想让这个容器即存储正数,又存储负数,这个容器只能存储0到7正数,而8到f存负数

一般人经常说前面为1即为负数,正数里面第一位是1,如0-0111为正,1000-1111为负数,1011为-5

2.设计算机只能存储8位2进制数

在这里插入图片描述

这种存储无符号数可以从0存储到FF,正数可以从0到7F,负数从80到FF

3.设计算机只能存储16位2进制数

在这里插入图片描述

4.设计算机只能存储16位2进制数

在这里插入图片描述
无符号:0到8个f 有符号:0到7后面跟七个f (正数) 无符号:8后面七个0至八个f

计算机不知道正数、负数这个概念,它只管存。计算机有很多硬件容器。但是每一个容器都有界限,一旦超过这个界限就会把进位的值丢弃

二、逻辑运算本质

1.或运算

或运算:| or 只要一个为1便是1

2.与运算

与运算and &,两个都是1才是1

3.异或运算

异或:xor  ^ 不一样为1

4.非运算

非(not !10 01

三、逻辑运算应用

1.如何利用CPU进行2+3的运算?

汇编

Mov eax,2
add eax,3

涉及到电路层面:

容器x:0010  容器y:0011
进行异或 x xor y = 0001 将0001存进容器R:0001
进行与   x and y = 0010 (判断是否进行完运算)
0010左移 -> 0100(不为四个0,继续)
x:0001 放入x  0100放入y y:0100
进行异或 0001 xor 0100 = 0101 R:0101
0001 and 0100 = 0000
0000 左移 0000,四个0,计算完
此时,R的寄存器里为结果,即为0101

2.获取某个值的第N位

在这里插入图片描述
与A进行与运算,A所求的位是1,其他为0

3.加密算法

在这里插入图片描述
加密异或本身的逆运算就是异或

a ^ b = c 则可以推断出
c ^ b = a

猜你喜欢

转载自blog.csdn.net/qq_46441427/article/details/112425686