进制:
十进制的定义:又是个符号组成,分别为0 1 2 3 4 5 6 7 8 9.
十六进制的定义:有十六个符号组成,分别为0 1 2 3 4 5 6 7 8 9 A B C D E F.
所以
X进制的定义:有x个符号组成。
0~16二进制与十六进制的映射:
0000~0 | 0001~1 | 0010~2 | 0011~3 |
0100~4 | 0101~5 | 0110~6 | 0111~7 |
1000~8 | 1001~9 | 1010~A | 1011~B |
1100~C | 1101~D | 1110~E | 1111~F |
在进制运算中我们必须熟练的掌握不同进制的运算规律才能快速运算;
例:
八进制的加法表与乘法表:
1+1=2 | ||||||
1+2=3 | 2+2=4 | |||||
1+3=4 | 2+3=5 | 3+3=6 | ||||
1+4=5 | 2+4=6 | 3+4=7 | 4+4=10 | |||
1+5=6 | 2+5=7 | 3+5=10 | 4+5=11 | 5+5=12 | ||
1+6=7 | 2+6=10 | 3+6=11 | 4+6=12 | 5+6=13 | 6+6=14 | |
1+7=10 | 2+7=11 | 3+7=12 | 4+7=13 | 5+7=14 | 6+7=15 | 7+7=16 |
1*1=1 | ||||||
1*2=2 | 2*2=4 | |||||
1*3=3 | 2*3=6 | 3*3=11 | ||||
1*4=4 | 2*4=10 | 3*4=14 | 4*4=20 | |||
1*5=5 | 2*5=12 | 3*5=17 | 4*5=24 | 5*5=31 | ||
1*6=6 | 2*6=14 | 3*6=22 | 4*6=30 | 5*6=36 | 6*6=44 | |
1*7=7 | 2*7=16 | 3*7=25 | 4*7=34 | 5*7=43 | 6*7=52 | 7*7=61 |
熟悉每个进制的这两个表就能更好地进行运算。
X进制的x个字符是不确定的、是任意的;
x进制的本质:逢x进1;
数据宽度:
定义:数学上的数字,是没有大小限制的可以无限大,但在计算机中,由于硬件的约束,数据都是有长度的,因此我们将储存长度的大小成为数据宽度。
计算机中数据的两个本质:
- 计算机只认识0或1
- 将要储存的数据若超过数据宽度将被删除。
四位宽度表示,计算机只能识别四位二进制的数据,例:
同理八位宽度只能识别八位二进制的数据,十六位宽度只能识别十六位二进制的数据,
在计算机中所输入的数据有字符数或无字符数的情况由使用者来决定,
CPU的计算:
例:2+3=5
X:0010 Y:0011
注:将2储存到计算机一个储存单位X; 将3储存到计算机一个储存单位Y;储存是需要是二进制
将X与Y进行 异或
0010
Xor 0011
-------------
0001
储存0001到M即: M:0001
然后计算机会进行验证是否计算正确
验证方法为:将X与Y进行 与 运算 运算结果进行“左移“看是否全为零,若全为零,则计算机运算结果正确。
0010
And 0011 ➡ 0010左移 0100 储存0100到N;即:N:0100
------------
0010
不为零时将M与N重新进行CPU计算 直到运算结果为正确(左移值全为零)
最简单的加密运算:
例:异或加密
明文:24; 密文:12; 密钥:18;
00100100 —— 24(明文)
00011000 —— 12(密文)
---------
00111100 —— 18(密钥)
32位通用寄存器的指定用途如下:
寄存器 | 编号 | 储存数据的范围 |
EAX | 0 | 0~0xFFFFFFFF |
ECX | 1 | 0~0xFFFFFFFF |
EDX | 2 | 0~0xFFFFFFFF |
EBX | 3 | 0~0xFFFFFFFF |
ESP | 4 | 0~0xFFFFFFFF |
EBP | 5 | 0~0xFFFFFFFF |
ESI | 6 | 0~0xFFFFFFFF |
EDI | 7 | 0~0xFFFFFFFF |
寄存器 | 寄存器 | 寄存器 | ||
32位 | 16位 | 8位 | ||
AX | AL | 000 | 0 | |
ECX | CX | CL | 001 | 1 |
EDX | DX | DL | 010 | 2 |
EBX | BX | BL | 011 | 3 |
ESP | SP | AH | 100 | 4 |
EBP | BP | CH | 101 | 5 |
ESI | SI | DH | 110 | 6 |
EDI | DI | BH | 111 | 7 |
关于32位、16位与8位寄存器之间的关系:
根据上面这种情况 就可以出现将低位寄存器储存到高位寄存器中
MOV指令可以表示为
SUB指令:表示减法指令
ADD指令:表示加法指令
寄存器与内存的区别:
- 寄存器位于CPU内部,执行速度快,但比较贵。
- 内存速度相对较慢,但成本比较低,所以可以做得很大。
- 寄存器和内存没有本质区别,都是用于储存数据的容器,都是顶宽的。
- 计算机中的几个常量计量单位:byte、word、dword。
- 寄存器中常用的有8个:EXA、ECX、EDX、EBX、ESP、EBP、ESI、EDI。
Byte 字节 =8(bit)
Word 字 =16(bit)
Dword双字 =32(bit)
内存中数量特别庞大,无法每个内存单元都起一个名字,所以用编号来代替。
既 00000000 、 00000001直到FFFFFFFF。
32位计算机可以识别4g内存。
内存:
从指定内存中写入/读取数据
Mov dword ptr ds:[0x12356898],ox12345678
dword表示数据宽度
ptr表示后面为储存地址