硬件
与门有两个PNP晶体管串联实现
或门有两个PNP晶体管并联实现
非门使用一个NPN晶体管
ALU(算数逻辑单元)=计算单元+逻辑单元
1. 概念知识
cpu:里面也就是几十亿个开关(三极管)组成
三极管:NPN(用b-e的电流控制c-e的电流),PNP(用e-b的电流控制e-c的电流)
2. 门电路
2.1 与或非
与门由两个PNP晶体管串联实现
或门由两个PNP晶体管并联实现
非门由一个NPN晶体管实现,反转当前输入
2.2与非、或非、异或门
3. 加法器
3.1 半加器
半加器有两个输入X,Y,两个输出S和C(本位和、进位),它能产生进位但不能处理进位。
3.2 全加器(可以处理产生的进位)
ALU(算数逻辑单元)=计算单元+逻辑单元
4. 存储
4.1 SRAM
静态随机访问存储器(只要数据保存进去,就一直存在)
4.2 DRAM
动态随机访问存储器(要保存住数据就需要动态不断刷新,使电容一直保持带电)
4.3 假设我们有四个存储单元,我们该如何访问呢
即可以用一个二四译码电路来进行四个存储单元的访问
当有8个寄存器时就需要用3-8译码器来进行选择这8个寄存器单元了
计算机启动
- CPU收到RST信号,IP强制定位到ROM,从ROM中开始读取并执行指令。
- BIOS程序执行过程中会产生中断向量表,RAM中开头就存放中断向量表及BIOS数据。
- BIOS执行完POST之后,开始到硬盘等设备的MBR分区寻找BootLoader。BIOS程序会从硬盘0面0道一扇区来寻找MBR(主引导记录)
- 将BootLoader加载到内存中,Bootloader运行完成后操作系统被拉起,BootLoader所占内存会被释放,所以它不会被分配到紧邻终端向量表的位置,而是将其放在内存最末端,以便用完释放。Bootloader在内存中将占存储空间为1024字节,其中MBR扇区占512字节,栈/数据占512字节。
机械硬盘
通过盘面的旋转和磁头的前后运动就可以访问所有的存储空间
磁面(0、1面),磁道(最边缘为0号磁道),扇区(一般一个磁道可以划分为63个扇区,每个扇区512字节)
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后边三个同理。
指令
- MOV:目的操作数,源操作数 (MOV指令的目的和源的位宽必须保持一致)
- reg 8/16:8或16位寄存器
- mem 8/16:8或16位存储单元
- imm 8/16:8或16位的立即数
- 栈的走向跟数据段和代码段不太一样,数据段和代码段是从内存的低处到高处存放,一般都从
0x7c00
开始,下一个指令可能会在0x7c02
地址是增加的;但对于栈来说,push操作会使SP减小,pop操作会使sp增大,通常将SS寄存器的值设置为0x0000,在经过push操作后,sp会减小,但0x0000再不能减小了呀,不用慌,通过push操作之后,sp会指向0xfffe,因为ax为两个字节,SP = 0x0000-2,结果是个负值,最高位的负号被抛弃,所以SP = 0xfffe,即SS:SP = 0x0000:0xfffe 。 - push操作使栈内存减小,pop操作使在内存增大
汇编调试
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进制
如果标志位是小写的,就说明它为0,为大写的,则为1。
乘法:
除法:
堆栈 SS:SP
Loading Comments...