Insist_2020 发表于 2021-5-18 22:43

滴水汇编第四天

本帖最后由 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(可读可写)

sam喵喵 发表于 2021-5-18 23:10

前面三天凭空消失了吗

a201025a 发表于 2021-5-18 23:46

可以的,第四天就能发这么长的贴子

tlf 发表于 2021-5-19 06:27

szx503 发表于 2022-5-8 15:03

支持 !!
页: [1]
查看完整版本: 滴水汇编第四天