计算机硬件和逻辑电路
🏍️

计算机硬件和逻辑电路

Published
May 23, 2021
Description
Tags
汇编
硬件
C
Email
Author
Property

硬件

 
与门有两个PNP晶体管串联实现 或门有两个PNP晶体管并联实现 非门使用一个NPN晶体管 ALU(算数逻辑单元)=计算单元+逻辑单元
notion image

1. 概念知识

cpu:里面也就是几十亿个开关(三极管)组成
三极管:NPN(用b-e的电流控制c-e的电流),PNP(用e-b的电流控制e-c的电流)
notion image

2. 门电路

2.1 与或非

notion image
与门由两个PNP晶体管串联实现
notion image
或门由两个PNP晶体管并联实现
notion image
非门由一个NPN晶体管实现,反转当前输入

2.2与非、或非、异或门

notion image
notion image
notion image

3. 加法器

3.1 半加器

半加器有两个输入X,Y,两个输出S和C(本位和、进位),它能产生进位但不能处理进位。
notion image
 

3.2 全加器(可以处理产生的进位)

notion image
notion image
ALU(算数逻辑单元)=计算单元+逻辑单元
notion image

4. 存储

4.1 SRAM

静态随机访问存储器(只要数据保存进去,就一直存在)
notion image

4.2 DRAM

动态随机访问存储器(要保存住数据就需要动态不断刷新,使电容一直保持带电)
notion image

4.3 假设我们有四个存储单元,我们该如何访问呢

即可以用一个二四译码电路来进行四个存储单元的访问
notion image
当有8个寄存器时就需要用3-8译码器来进行选择这8个寄存器单元了
notion image
 
 

计算机启动

  1. CPU收到RST信号,IP强制定位到ROM,从ROM中开始读取并执行指令。
  1. BIOS程序执行过程中会产生中断向量表,RAM中开头就存放中断向量表及BIOS数据。
  1. BIOS执行完POST之后,开始到硬盘等设备的MBR分区寻找BootLoader。BIOS程序会从硬盘0面0道一扇区来寻找MBR(主引导记录)
  1. 将BootLoader加载到内存中,Bootloader运行完成后操作系统被拉起,BootLoader所占内存会被释放,所以它不会被分配到紧邻终端向量表的位置,而是将其放在内存最末端,以便用完释放。Bootloader在内存中将占存储空间为1024字节,其中MBR扇区占512字节,栈/数据占512字节。

机械硬盘

通过盘面的旋转和磁头的前后运动就可以访问所有的存储空间
磁面(0、1面),磁道(最边缘为0号磁道),扇区(一般一个磁道可以划分为63个扇区,每个扇区512字节)
notion image
 

8086处理器

硬件逻辑

  • 8086具有20根地址线可寻址1MB的地址空间,16根数据线,所以可以寻址范围为0x00000~0xFFFFF。
  • 8086数据总线为16根,因此段寄存器和IP寄存器都是16位,但地址总线却有二十根,如何给20根地址线赋给地址数据呢,解决方法是,在把逻辑地址转成物理地址前,先将将段寄存器数据左移4位,然后加上偏移地址,所以就有了20位地址了,可以访问全部地址空间了。
  • 每个内存单元在整个内存空间中必须具备唯一的地址——物理地址
  • 逻辑地址映射,基地址:在存储空间的那个区域,偏移地址:与段中第一个单元的距离。物理地址=段地址x16(左移4位)+偏移地址

寄存器

  • 8086的1MB寻址空间,最少可以分为16段,每段64KB,最多可以分为65536个段,每段16Byte(因为它的寄存器都是16位的)
  • 808h有8个16位通用寄存器,4个段寄存器(代码段CS、数据段DS,附加段ES,堆栈段SS),2个控制寄存器(IP,Flags)
  • 但计算机一般以字节为单位做处理,所以前四个16位数据寄存器又可以分为8个8位的寄存器:AX —>AH,AL后边三个同理。
notion image

指令

  1. MOV:目的操作数,源操作数 MOV指令的目的和源的位宽必须保持一致
    1. notion image
      汇编调试
      nasm -f bin start.asm -o start.bin ;将汇编代码编译成二进制文件 -f : 指定输出文件的格式 bin : 输出为二进制文件 start.asm : 要编译的源文件 -o : 指定输出文件名称 start.bin : 输出的文件名称为start.bin s : 单步调试 s 100 : 执行一百次 b 0x7c00 : 打断点 c : 继续 q : 退出 r : 查看通用寄存器 sreg : 查看段寄存器 xp /nuf addr : 查看物理内存,n 查看对少个单位,u 单位(可以是字节b,半字h,字w,双字g),f 是格式,可以是x,d,u,o,t,分别代表16进制、10进制、无符号10进制、8进制、2进制
      notion image
      如果标志位是小写的,就说明它为0,为大写的,则为1。

    2. reg 8/16:8或16位寄存器
    3. mem 8/16:8或16位存储单元
    4. imm 8/16:8或16位的立即数
    5.  
      乘法:
      notion image
       
      除法:
      notion image
       
      堆栈 SS:SP
      1. 栈的走向跟数据段和代码段不太一样,数据段和代码段是从内存的低处到高处存放,一般都从0x7c00 开始,下一个指令可能会在0x7c02 地址是增加的;但对于栈来说,push操作会使SP减小,pop操作会使sp增大,通常将SS寄存器的值设置为0x0000,在经过push操作后,sp会减小,但0x0000再不能减小了呀,不用慌,通过push操作之后,sp会指向0xfffe,因为ax为两个字节,SP = 0x0000-2,结果是个负值,最高位的负号被抛弃,所以SP = 0xfffe,即SS:SP = 0x0000:0xfffe 。
        1. notion image
      1. push操作使栈内存减小,pop操作使在内存增大
       
 

Loading Comments...