汇编语言
通过指令来代替二进制代码
通过汇编指令可以给计算机发一些操作,然后让计算机执行
32位的系统和64位的系统本质架构区别不大,只是64位的寻址能力增加
通用寄存器
寄存器:
存储数据:CPU > 内存 > 硬盘
32位CPU 8 16 32
64位CPU 8 16 32 64
通用寄存器,可以存储任意的东西
32位的通用寄存器只有8个
存储的范围:0~FFFFFFFF
#计算机如何向寄存器中存值
对于二进制来说: 直接修改值
不同的寄存器
FFFFFFFF FFFF FF
32位 16位 8位
EAX AX AL
ECX CX CL
EDX DX DL
EBX BX BL
ESP SP AH
EBP BP CH
ESI SI DH
EDI DI BH
8位:L表示低8位,H表示高8位
除了这些通用寄存器之外,其他的寄存器每一位都有自己特定的功能
内存
寄存器很小,不够用,所以数据存到内存中
1B = 8bit
1KB = 1024B
1MB = 1024 KB
1GB = 1024MB
每个应用程序都有4GB的内存空间,真正用的时候没有这么大,真正运行的时候,才会使用物理内存
内存地址
计算机中的内存地址很多,空间很大,每个空间分配一个地址。
这些给内存起的编号,就是我们的内存地址。32位是8个16进制的值
32位:最多支持4G内存
FFFFFFFF + 1 = 100000000,最大的值
位是怎么限制内存大小的
100000000内存地址 * 8 = 800000000位
转化为10进制/8:4294967296个字节
按照规则除以1024之后,最终发现是4GB
所以每个内存地址都有一个编号,可以通过这些编号向里面存值
内存如何存值
-
数据宽度:占多大的地址:byte word dword
-
地址的位置:0xFFFFFFFF
- 不是任意的地址都可以写东西的,需要先申请空间,只有程序申请过的空间才能使用
汇编如何向内存中写值 mov 数据宽度 内存地址,1 传递的值的大小一定要和数据宽度相等
例:
运行后000DFF74这个位置的后两位发生了变化,因为byte是8位,所以会修改后两位的数,同理,word是16位,会修改后四位的数,dword是32位,会修改8位数
内存有多种写法
ds:[0x19FF70+4] # +4 是加的地址偏移
ds:[eax] #也可以写入寄存器中的值
ds:[eax + 4] #寄存器偏移
ds:[reg + reg * {1,2,4,8} + 4] #数组,偏移
汇编指令
mov指令
mov 存的地址,存的数
mov 存的地址1,存的地址2
可以将数字写入寄存器,也可以将寄存器中的值写到寄存器