Re(1)

进制

进制的定义:
N进制由n个符号组成,逢n进1,n个符号没有要求,用没有顺序的符号能够进行加密
计算机与数字的关系:
1.计算机中的任何信息最终都是以二进制进行储存的。
2.计算机采用二进制的形式储存数据,主要有两方面原因:1)二进制足够用2)受硬件制约。
所以一定要对二进制非常熟悉。
3.由于二进制书写复杂,所以软件中数据用16进制来表示,16进制就是二进制的简写 形式。1个十六进制数==4个二进制数
计算机为什么使用二进制:
计算机只认识0 1
十六进制可以看成二进制的简写过程
每四个二进制可以转换为一个十六进制

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
1111   E
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

熟练掌握二进制和十六进制的转换,忘掉十进制(想学好计算机的)
进制的运算实际上就是查数

不同文件有不同的编码规则
有符号数的编码规则:
原码:最高位为符号位,其余各位为数值本身的绝对值
反码
正数:反码与原码相同
负数:符号位为1,其余位对原码取反
补码
正数:补码与原码相同
负数:符号位为1,其余对原码取反加1(只有最后一位加1)

例如: 先明确数据宽度
就以字节 8Bit为例
1 00000001 原码反码补码相同
6 00000110 原码反码补码相同
-1 10000000 原码 11111110反码 11111111补码
-7 10000111 原码 11111000反码 11111001补码
(负数是以补码的形式存在的)

数据类型是1BYTE(8BIT)
在这里插入图片描述
数据宽度为Doubleword(32BIT)
在这里插入图片描述

位运算

为什么要学习位运算?

有些功能必须通过位运算才能实现:
1)比如写调试器,判断CPU的各种状态位 2)大公司的面试题

1.与运算:两个位都为1时,结果才为1  and(&2.或运算:只要有一个为1就是1   or(|3.异或运算:不一样的时候是1   xor(^)
4.非运算:0就是1    1就是0   not(~)
5.左移:各二进制位全部左移若干位,高位丢弃,低位补0   shl(<<6.右移:各二进制群不右移若干位,低位丢弃,高位补0或者补符号位   shr
1)shr    高位补0
c语言中表示方法(>>):unsigned(表示是无符号数)  int a=10;//转成2进之后向右移,补0
	                printf("%d\n",a>>2);
2)sar    高位补符号位
c语言表示方法(>>):int a=10;//有符号数,补符号位
	              printf("%d\n",a>>2);

括号里面代表c语言中的对应符号,括号外是汇编对应符号
总结:计算机只会做位运算

位运算加减乘除:

4+5的运算过程:

1)异或:
      0000  0100
      0000  0101
异或------------------
      0000  0001
2)判断是否有进位
  0000  0100
  0000  0101
与------------------
  0000  0100(结果不是0说明有进位,为1的位置是进位的位置)
3)继续异或
 	0000  0001
	0000  1000(与运算左移一位)
异或--------------------------
	0000  1001
4)判断是否有进位
 	0000  0001
	0000  1000
与--------------------------
	0000  0000(全为0,没有进位)
所以结果为 0000  1001(转为十进制是9)

减法:
4-5=4+(-5)
过程同加法,乘法的本质就是加法(x*y就是x个y相加),除法的本质就是减法(x/y就是看看x能减去几个y)

寄存器

寄存器:
作用时间存储数据
CPU>内存>硬盘
32位CPU:8 16 32
64位CPU:8 16 32 64
64位和32位差别不大
目前绝大多数程序还是32位
通用寄存器:
32位通用寄存器:

EAX ESP
ECX EBP
EDX ESI
EBX EDI
存储数据不能超过32个
MOV指令:
1)立即数到寄存器
2)寄存器到寄存器
选中按f8执行

mov eax,1;把1赋值到eax.
mov edx,eax;把eax的值赋值到edx.

16位:

AX CX DX BX SP BP SI DI

8位:

AL CL DL BL ( L结尾是低八位 )AH CH DH BH (H结尾高八位)

EAX 0000 1100总的来说是32位,后四位单独来说是低16位(就是1100),后四位中的前两位是高8位(就是11)后两位是低八位(就是00)
可以进行寄存器之间的赋值,不过赋值的寄存器一定要是同一级位数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值