汇编入门-二进制

汇编入门

语言

机器语言
目前主流的电子计算机只认识二进制
状态表示0 和 1
最早的程序员:穿孔卡带
加 0100 0000
减 0100 1000
乘 0100 1000 0100 1000
除 0100 1000 1100 1000

复杂的机器语言能简化——》助记符。

使用汇编语言将人能够理解的语言转换为机器能够理解的语言

加 INC->编译器->0100 0000
减 DEC
乘 MUL
除 DIV

汇编一般用于底层的编写,单片机…

C语言
加 A+B -> 编译器->0100 0000
减 A-B -> 编译器->0100 1000
加 A+B -> 编译器->0100 1000 0100 1000
加 A+B -> 编译器->0100 1000 1100 1000

进制

思想

每一种进制都有自己的计算方式

1进制:一进一,结绳记事。

2进制:二进一,计算机

8进制:八进一,0 1 2 3 4 5 6 7

10进制:十进一,0  1 2 3 4 5 6 7 8 9

16进制:十六进一,0 1 2 3 4 5 6 7 8 9 A B C D E

查数:几进制到几加一位

可以自己随便定义

十进制: 0 1 2 3 4 5 6 7 8 9

自己设置的十进制:0 2 4 6 8 B D F H J

使用自己设置的进制,达到进制的加密

数字量一大,总会有规律的

进制的运算

# 八进制的计算
 277 		276			237      234 / 4 = 47
+333	   * 54	 	   - 54
-----	  ------       -----
 632       20250        163

结论:不论是什么机制,本身都是有一套体系的

二进制

计算机使用的二进制 0 1 因为计算机只有两种电平,使用电子表现状态

缺陷:因为摩尔定律,存在物理极限,硬操作快到极限了

追求语言的极限,并发语言,软操作

量子计算机

使用量子计算的机器。

传统的计算机通过集成电路表现出来0 1 两种状态

量子计算机的单位:昆比特,量子的两态来表示,比电子计算速度快

21世纪的计算力快到尽头了,

量子计算机能够提高计算机的计算力

二进制的简写
0 1 2 3 4 5 6 7 8 9 a b c d e f
0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111

这就是十六进制

数据宽度

数学上:0-无穷大是没有限度的,但计算机碍于内存,需要给数据增加数据宽度。

计算机底层需要我们给这些数据定义宽度,所以C、C++、Java等需要定义数据的类型。

bit				1位
byte			8位
word			16位
dword			32位
qword			64位

位 0 1

字节0-0xFF

字 0-0xFFFF

双字 0-0xFFFFFFFF

在计算机中,每一个数据都需要给它定义类型,给它定义宽度,在内存中的宽度

有符号数和无符号数

数据都是有宽度的。

规则

给二进制解码增加一个规则

无符号数规则

数字是什么就是什么

	1 0 0 1  0 1 0 1
	
	将其转换成十六进制,四位四位的计算
	比如1 0 0 1 相当于十六进制中的9
	0 1 0 1 相当于十六进制的5
	所以转化为十六进制就是0x95
有符号数规则

最高位是符号位:1(负数)0(正数)

1 0 0 1  0 1 0 1
十六进制:-15

原码反码补码

编码规则

有符号数的编码规则

原码:最高位是符号位,对其他的位进行本身的绝对值即可

反码:

  • 正数:反码和原码相同
  • 负数:符号位一定是1,其余位对原码取反

补码:

  • 正数:反码和补码相同
  • 负数:符号位一定是1,反码 + 1
如果是正数,那么原码反码补码都是一样的
1
# 原码		0 0 0 0 0 0 0 1
# 反码		0 0 0 0 0 0 0 1
# 补码		0 0 0 0 0 0 0 1

如果是负数,
-5
# 原 码		1 0 0 0 0 1 0 1
# 反码		1 1 1 1 1 0 1 0
# 补码		1 1 1 1 1 0 1 1

如果看到一个二进制的数,需要了解它是有符号数还是无符号数

# 二进制的标志
2  10 
4  100
8  1000
16 10000

寄存器

mov 寄存器,值

正数在计算机里面是正常存储的

负数在计算机里面是以补码的方式存储的

位运算

计算机可以存储所有的数字(正数,浮点数,字符)

很多底层的调试器。需要通过位来判断CPU的状态

与运算(and &)

在这里插入图片描述

或运算(or |)

在这里插入图片描述

异或运算(xor ^)

不相同就是1,相同就是0

在这里插入图片描述

1011 0001
1101 1000
---------	异或运算
0110 1001

非运算( not ~)

单目运算符,只有一个数字

取反,0就是1,1就是0

位运算(移动位)

左移×2,右移/2

0000 0001	1
0000 0010	2
0000 0100	4
左移(shl <<)

所有二进制位全部左移若干位,高位丢弃,低位补0

0000 0001	
000 00010
右移(shr >>)

所有二进制位全部有移若干位,低位丢弃,高位补0或者1(符号位决定)

1000 0010	(有符号数)
1100 0001

位运算的加减乘除

计算机只认识0,1

基本数学是建立在加减乘除上的。

4 + 5

#计算机是怎么操作的
0000 0100
0000 0101
---------(加法,计算机是不会直接计算的)
0000 1001


#计算机的实现原理
第一步:异或,如果不考虑进位,异或可以直接出结果

0000 0100
0000 0101
---------
0000 0001

第二步:与运算(判断进位,如果与运算结果为0,则说明没有进位)
0000 0100
0000 0101
---------
0000 0100 

第三步:将与运算的结果,左移一位。
0000 1000	#进位的结果

第四步:异或
第一次异或的结果,与第三步的结果再次异或
0000 0001
0000 1000
---------
0000 1001

第五步:与运算(判断进位,如果与运算结果为0,没有进位)
0000 0001
0000 1000
---------
0000 0000

说明没有进位,结果正确

4 - 5

#计算机是怎么操作的
4 + (-5)

0000 0100
0000 0101
---------减法,计算机不会直接计算,先将被减数取补码

0000 0100
1111 1011 
---------

第一步:异或
0000 0100
1111 1011
---------
1111 1111

第二步:与运算
0000 0100
1111 1011
---------
0000 0000

最终结果
1111 1111 
16进制下为 FF 
10进制下为-1

乘:x * y ,就是y个x相加,还是加法

除:x/y,本质就是减法,x能够减去多少个y,本质还是加法

计算机只会做加法

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值