一些概念

SRAM:静态随机访问存储。0或1一旦写入就会一直在那多用在寄存器,访问速度很快。cpu里也就百来个,kb级别
图片.png
enable开关闭合时write才能写入数据。

DRAM:动态随机访问存储。如果要保持1或0就要一直刷新
图片.png
开关闭合后会给电容充电,但会慢慢减少。(高中物理)
刷新:定期给电容充电,output会持续输出1

选择器:n根线组成的选择器能保存计算机组成原理 - 图3个地址
图片.png
寄存器组:8个寄存器单元+1个3线选择器。分为CS(代码寄存器)和DS(数据寄存器)
图片.png
解码器:一个可以判断一条机器语言(高低电平)的电路,例如这里输入0001则会输出1
图片.png

冯诺依曼架构

ABCD为寄存器,
V为ALU(加法器),接受2个输入,每个输入1个字节。
IC给指令计数的专用寄存器
IP用来存储指令地址的专用寄存器
图片.png

启动过程:BIOS执行POST(上电自检),在硬盘MBR分区寻找bootloader,找到就加载到内存0x07c00

汇编

语法

mov

mov 目的操作数, 源操作数

  • 目的和源可以是:通用寄存器、段寄存器、内存单元和立即数
  • 源操作数和目的操作数的位宽必须一致
    • byte、word、dword、qword:分别对应字节、单字、双字、四字(计算机组成原理 - 图8)
    • 从内存往寄存器mov会自动适应,但寄存器往寄存器mov就要注意位宽
    • mov涉及内存访问的都是逻辑地址,而非物理地址 | 👇源 | 👉目的 | 通用寄存器 | 段寄存器 | 内存单元 | 立即数 | | —- | —- | —- | —- | —- | | 通用寄存器 | 可以 | 可以 | 可以 | 不可以 | | 段寄存器 | 可以 | 不可以 | 可以 | 不可以 | | 内存单元 | 可以 | 可以 | 不可以 | 不可以 | | 立即数 | 可以 | 不可以 | 可以 | 不可以 |

图片.png在这里,cs存放代码段开始地址。ds存放数据段开始地址

源操作数 目的操作数 备注
立即数 内存单元 宽度对号与立即数一致

PS:intel 8086有8个寄存器:ax,bx,cx,dx,si,di,bp,sp,而前四个都可以拆开成两个8位寄存器来用,如AX=AH+AL

  1. ;在屏幕显示信息
  2. mov ax, 0b800h ;将ax里的内容存入0b800h
  3. mov ds, ax ;指定数据段基准地址
  4. ;以上两行就是说将数据段寄存器ds的值设置为0b800h
  5. mov byte [0x00],'2' ;byte指定传送数据大小为1字节,0x00是相对于ds的偏移地址
  6. jmp $ ;跳转到jmp所在位置,$指标定当前位置,目的是间接修改IP
  7. times 510-($-$$) db 0 ; MBR分区是512字节,从$0x55之间补满0512-2个字节(55aa)=510
  8. ;$$代表程序起始位置,$代表当前地址
  9. db 0x55,0xaa

BootLoader

MBR

图片.png
有严格的结构。在HDD里存储在0柱面0磁道1扇区,占用512字节。BIOS会从0面0道1扇区寻找MBR