网站链接: element-ui dtcms
当前位置: 首页 > 技术博文  > 技术博文

2021-06-12进制汇编

2021/6/12 14:06:36 人评论

学习ing https://www.bilibili.com/video/BV1ni4y1G7B9 在二进制中,当数有了符号,最高位就是符号位 1 为负数, 0 为正数 原码反码补码 在计算机中是以补码的方式存放数据的 正数的原码反码补码相同 负数的反码是原码除符号位(最高位)取反 原码 : 1 0 0 1 0 0 1 1 反码 :…

学习ing
https://www.bilibili.com/video/BV1ni4y1G7B9

在二进制中,当数有了符号,最高位就是符号位

1 为负数, 0 为正数

原码反码补码

在计算机中是以补码的方式存放数据的

正数的原码反码补码相同

负数的反码是原码除符号位(最高位)取反

原码 : 1 0 0 1 0 0 1 1
反码 : 1 1 1 0 1 1 0 0

补码是反码加一

补码 : 1 1 1 0 1 1 0 1

位运算

将计算机中存储的数字进行运算

与运算(and &)

当两个都为 1 时,结果为 1
1011 0001
1101 1000
--------------------与运算
1001 0000

或运算(or |)

只要有一个 1 ,结果为1
1011 0001
1101 1000
-----------------或运算
1111 1001

异或运算(xor ^)

不相同则为1
1011 0001
1101 1000
-----------------异或运算
0110 1001

非运算(not ~)

单目运算符 , 取反
1100 1010
---------------非运算
0011 0101

位运算

左移 : (shl <<)
所有二进制位全部左移若干位,高位丢弃,低位补0

右移 : (shr >>)
所有二进制位全部右移若干位,高位补0,低位丢弃

位运算的加减乘除

计算机中加法的运算

  1. 异或运算 , 如果没有进位操作,异或可以直接出结果
  2. 与运算 , 用于判断进位,如果与运算结果为0,就没用进位
  3. 当与运算结果不为0 , 将与运算的结果左移一位
  4. 再次异或
  5. 再次与运算判断进位
  6. 最终输出与运算结果为0的上一个异或结果

减法 : 就是加法运算加了一个负数
乘法 : x * y 本质就是 y 个 x 相加
除法 : x / y 就是算出 x 中能减多少个 y

汇编语言

通过指令来代替二进制编码
通过汇编指令向计算机发送一些操作,然后计算机执行

通用寄存器

寄存器 :
数据的存储 : CPU > 内存 > 硬盘
64位和32位的底层框架没有太大的区别,64位只是在32位的基础上优化改进,增加了寻址能力
32位的寄存器只有8个,每个寄存器的存值范围 0~FFFFFFFF

寄存器存值

mov指令
mov 存的地址,存的数
mov 写入的地址,写出的地址

内存

寄存器很小,数据放到了内存
每个应用程序进程都有4GB的内存空间
但是实际上只有程序运行的时候才会用到物理地址
1B = 8bit
1KB = 1024B
1MB = 1024KB
1GB = 1024MB

内存地址

存一个数 : 该数占用的大小,确定数据宽度
计算机中的内存地址很多,空间很大,每个空间分配了一个地址,名字
32位 : 寻址能力 4GB
64位 : 很大,但是因为硬件要求达不到导致算力多余

每一个内存地址都有一个编号,可以通过这些编号向内存中存值
向内存中存值的要求 :
数据宽度 : byte word dword (位 字节 双字节)
地址的位置 : 0xFFFFFFFF
而且并不是任意地址都可以写东西,只有该程序申请的内存地址才可以使用

汇编向内存中写值
mov 数据宽度,内存地址,数值
mov byte,ptr ds[0x123789],1
向0x123789这个地址中写入byte大小的1

内存地址有多种写法
ds:[0x19FF70+4] 内存地址偏移
ds:[eax] 寄存器
ds:[eax+4] 寄存器偏移
数组[]
ds:[reg+reg*{1,2,4,8}] 数组
ds:[reg+reg*{1,2,4,8}+4] 数组偏移

相关资讯

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?