滴水汇编第四天
本帖最后由 Insist_2020 于 2021-5-18 22:47 编辑内存
1.寄存器和内存的区别
<1>.寄存器位于CPU内部,执行速度快,但比较贵。
<2>.内存速度相对较慢,但成本较低,所以可以做的很大。
<3>.寄存器和内存没有本质区别,都是用于存储数据的容器,都是定宽的。
<4>.寄存器常用的有8个:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI。
<5>.计算机中的几个常用计量单位:BYTE WORD DWORD
2.内存中常用的计量单位
<1>BYTE 字节 = 8(BIT)= 1BYTE 1KB = 1024 BYTE= 2的10次方BYTE
<2>WORD字 = 16(BIT)= 2BYTE 1MB = 1024 KB = 2的20次方BYTE
<3>DWORD 双字 = 32(BIT)= 4BYTE 1GB = 1024 MB = 2的30次方BYTE
3.系统硬件的组成
<1>CPU(central processing unit)中央处理器:包含控制器,运算器,寄存器,计算机系统的运算和控制核心
<2>ALU(算术/逻辑单元):算术运算与逻辑运算的组合逻辑电路
<3>PC(程序计数器):指向主存中的某条机器语言指令(即含有该条指令的地址)
<4>总线
数据总线(Data Bus):在CPU与RAM之间来回传送需要处理或是需要储存的数据。
地址总线(Address Bus):用来指定在RAM(Random Access Memory)之中储存的数据的地址。
控制总线(Control Bus):将微处理器控制单元(Control Unit)的信号,传送到周边设备。
扩展总线(Expansion Bus):外部设备和计算机主机进行数据通信的总线,例如ISA总线,PCI总线。
局部总线(Local Bus):取代更高速数据传输的扩展总线。
数据总线DB(Data Bus)、地址总线AB(Address Bus)和控制总线CB(Control Bus),也统称为系统总线
<5>I/0设备
I/O设备(Input/Output Device)的作用:计算机用于输入和输出的设备,主要分为字符设备、块设备和网络通信设备。
(1)字符设备(Character Device),又称为人机交互设备。用户通过这些设备实现与计算机系统的通信。大多以字符为单位传输数据,通信速度较慢。
常见的有键盘、鼠标、显卡、显示器、打印机和扫描仪等。
(2)块设备(Block Device),又称为外部存储器。用户通过这些设备实现程序和数据的长期保存。与字符设备相比,它们以块为单位进行传输,传输速度较快。
常见的有磁盘、U盘、磁带和光盘等。
(3)网络通信设备。这类设备主要有网卡、调制解调器等,主要用于与远程设备间的通信。这类设备的传输速度比字符设备快,比块设备慢。I/O设备是计算机与外界通信的通道,
通过控制器或适配器与I/O总线连接。控制器与适配器的主要区别在于封装方式,控制器是I/O设备或计算机主板上的芯片组,用于翻译CPU指令为设备可识别的控制信号。
而适配器是一个独立的外部设备,用于I/O设备与计算机间数据协议的转换。二者在功能上是相同的,通过I/O总线,实现I/O设备与计算机间的为通信。
<6>存储器
存储器是用来存储程序和各种数据信息的记忆部件
只读存储器(ROM):易挥发性随机存2113取存储器,高速存取,读写时间相等,且与地址无关,计算机内存等。
随机存取存储器(RAM):断电后信息不丢失,如计算机启动用的BIOS芯片与硬盘等。存取速度很低,(较RAM而言)且不能改写
3.内存寻址
<1>内存的数量特别庞大,无法每个内存单元都起一个名字,且每个内存单元都无特殊的意义,所以用编号来代替,计算机CPU是32位或者64位,主要指是通用寄存器的宽度。
而内存的寻址能力由地址总线的确定的,32位CPU时代有32根地址总线和36根地址总线两种,32位的32根地址总线也就是2的32次方个字节也就是4G,32位的36根地址总线
也就是2的36次方个字节也就是64G;所以32位CPU最高的寻址能力为64G
4.内存分布
<1>2G的内核空间,64kb的空指针赋值区,64k禁入区,用户态访问会报错
5.汇编中内存格式
6.从指定内存中写入/读取数据
<1>mov dword ptr ds:,0x12345678 将数据写入内存编号0x0012FF34中
<2>mov ebx,dword ptr ds: 将内存编号0x0012FF34中的数据读到ebx中
<3>dword :要读/写多少此时是4字节 byte == 1字节(al bl dl cl ah ...)word == 2字节(ax bx cx dx ...)
<4>ptr: Point 代表后面是一个指针 (指针的意思就是里面存的不是普通的值,而是个地址)
<5>ds:段寄存器,内核需要用到
<6>0x0012FF34:内存编号,必须是32位的前面0可以省略
注意:地址编号不要随便写,因为内存是有保护属性与访问权限,并不是所有的内存都可以直接读写(需要特别处理),建议地址编号写成esp的值
7.内存四区
<1>内存四区的常用属性: Write 写W Read 读 R Execute 可执行E Share 可共享 S
<2>代码区(.text):代码区中主要存放程序中的代码(二进制),属性是RE(可读可执行)。
<3>数据区(静态存储区):主要包括静态全局区和常量区,如果要站在汇编角度细分的话还可以分为很多小的区。
全局区(静态区,static):全局变量和静态变量的存储是放在一块的,初始化的(全局变量和静态变量)在一块区域(.data,显示初始化为非零的全局变量),未初始化的
全局变量和未初始化的静态变量在相邻的另一块区域(.bss,显式初始化为0或者并未显式初始化)。 程序结束后有系统释放。属性是RW(可读可写)
常量区 :常量字符串就是放在这里的。(常量、函数名、关键字、字符串等) 程序结束后由系统释放。属性是R(只读)
<4>栈区(stack):内存的分配和释放都是自动进行 ,存放函数的参数值,局部变量的值等。栈内存分配运算内置于处理器的指令集中,效率高,
但容量有限,局部变量生命周期短。(linux中查看栈大小,ulimit -s,本机8M)属性是RW(可读可写)
<5>堆区(heap):有些操作对象只有在程序运行时才能确定,这样编译器在编译时无法为他们预先分配内存空间,只有在程序运行时分配,所以称为动态内存,malloc/free等。
属性是RW(可读可写)
前面三天凭空消失了吗 可以的,第四天就能发这么长的贴子 支持 !!
页:
[1]