二进制: 0000 0001 0010 0011 0100 0101 0110 0111
十六进制: 0 1 2 3 4 5 6 7
十进制: 1 2 3 4 5 6 7 8
1000 1001 1010 1011 1100 1101 1110 1111
8 9 A B C D E F
9 10 11 12 13 14 15 16
第一节:数据宽度
位:1个0或1 字节:8个0或1 字:16个0或1 双字:32个0或1
存储范围:
字节:0~0xFF 字:0~0xFFFF 双字:0~0xFFFFFFFF
如果要储存的数据超过最大宽度,那么多余的数据将被丢弃
第二节:无符号数有符号数
无符号数:无符号数没有符号,不存在负数,所以它的绝对值就是解析出来的值
有符号数:有正负数之分,如果最高位的是1,则为负数,
如果最高位的是0,则为正数,如果为0,则编码规则与无符号数一样
第三节:编码规则(原码反码补码)
原码:最高位为符号位,其余各位为数值本身的绝对值
反码:
正数:反码与原码相同
负数:符号位为1,其余位对原码相反
补码:
正数:补码与原码相同
负数:符号位为1,其余位对原码取法加1
总结:
1.正数原码存储
2.负数补码存储
第四节:计算机只会做位运算
1.与运算
两个位都为1时,结果才为1
比如:
1011 0001
and(&) 1101 1000
----------------------------------------
1001 0000
2.或运算
只要有一个为1就是1
比如:
1011 0001
or(|) 1001 1000
-----------------------------------------
1111 1001
3.异或运算
不一样的时候是1
比如:
1011 0001
xor(^) 1001 1000
-----------------------------------------
0110 1001
4.非运算
0就是1,1就是0
比如:
not(~) 1101 1000
-----------------------------------------
0010 0111
5.左移
各二进位全部左移若干位,高位丢弃,低位补0
比如:
shl(<<) 1101 1000 左移2位为 0110 0000
6.右移
各二进位全部右移若干位,低位丢弃,高位补0或者补符号位
比如:
shr 1101 0101 0011 0101
对应C语言(>>)
unsigned int a=10;//10为十进制,自动转换为2进制 unsigned的意思为32位
printf(“%d\n,a>>2”);
sar 1101 0101 1111 0101
对应C语言(>>)
int a=10;
printf(“%d\n”,a>>2);
第五节
计算机做加法过程:
4+5=?的运算过程
正常加法运算:
0000 0100 0000 0100
0000 0101 0000 0101
加---------------------------- 异或----------------------------
0000 1001 0000 0001
计算机执行的加法过程:
1)异或 3)继续异或
0000 0100 0000 0001
0000 0101 0000 1000
异或------------------------------ 异或------------------------------
0000 0001 0000 1001
2)判断是否有进位(与) 4)判断是否有进位(与)
0000 0100 0000 0001
0000 0101 0000 1000
与------------------------------ 与------------------------------
0000 1000 0000 0000
最终结果:0000 1000->9
计算机做减法过程:
4-5=?的运算过程
减法的实质:4-5=4+(-5)
1)异或
0000 0100
1111 1011
异或-------------------------------------------
1111 1111
2)判断是否有进位(与)
0000 0100
1111 1011
与---------------------------------------------
0000 0000
最终答案:1111 1111 转换为十六进制:FF,转为十进制:-1
乘法的运算过程:
X+Y 的本质就是加法, Y个X相加,得到的结果就为乘法的值
除法的运算过程:
X/Y 的本质就是减法,X能减去多少个Y,得到的结果就为除法的值
推论:所有的复杂运算都是建立在加法和减法之上来完成的。
第六节:
1.寄存器
寄存器:CPU中用来存储数据的地方
存储数据:
CPU>内存>硬盘
如果计算机为32位,CPU能提供三种类型:8 16 32
如果计算机为64位,CPU能提供三种类型:8 16 32 64
2.通用寄存器
32位通用寄存器(下面这些超过32位的0和1将被舍弃):
EAX ESP
ECX EBP
EDX ESI
EBX EDI
第七节:内存
1.每个应用程序都会有自己的独立的4GB内存空间(并不是真在的物理内存)
进程A
4G
———— 物理内存————内存条其他硬件设备
/
进程B /
4G
1Byte = 8Bit 1KB = 1024Byte 1MB =1024KB 1GB = 1024MB
2.内存地址
<1>内存太大没法起名字,所以只能用编号。当我们想向内存中存储数据,或
者从内存中读取数据时,必须用到这个编号,就像写信必须要写收信人地址一样。
<2>这个编号又称为内存地址(32位,前面0可以有省略)。
7 0
|————| [0x00000000]
|————|
|————|
|————|
|————|
|————|
|————|
———— [0xFFFFFFFF]
每一个编号,每一个地址对应的1个字节,8位,8个0和1
FFFFFFFF+1(0也是1个)= 100000000(十六进制)
100000000x8=800000000(十六进制)
800000000转为十进制=34359738368(十进制)
34359738368/8 = 4294967296(表示整个内存可以有多少个字节)
4294967296/1024 = 4194304(表示整个内存能够寻找的一共有多少KB)
4194304/1024 = 4096(表示整个内存能够寻找的一共有多少MB)
4096/1024 = 4(表示整个内存能够寻找的一共有多少GB)
正好是4GB,对应上面说的每个应用程序都会有自己的独立的4GB内存空间
第九节:小端存储模式
1.存储模式
7 0
小 | |————| [0x00000000] <1>mov byte ptr ds:[0x00000000],0x1A
| |————| [0x00000001] <2>mov byte ptr ds:[0x00000000],0x1A2C
| |————| [0x00000002] <3>mov byte ptr ds:[0x00000000],0x1A2C3E4F
| |————| [0x00000003]
| |————| [0x....] 大端模式:数据高位在低位,数据低位在高位
大 | |————|
———— [0xFFFFFFFF] 小端模式:数据低位在低位,数据高位在高位
第十节:常用汇编指令
回顾:
1.数据可以存在哪:寄存器、内存
2.数据是如何存放的:小端存储