l2 x86和pc架构

1. PC架构

1.1 pc都有哪些东西:

x86 cpu 有寄存器、执行单元、内存管理
cpu芯片针,包括地址和数据信号
内存
硬盘
键盘
显示器
其他资源:BIOS ROM、clock

1.2 我们用一个16位的原生8086cpu开始

1.3 CPU执行指令

for(;;){
	run next instruction
}

1.4 需要工作空间:寄存器

4个16位的数据寄存器:AX BX CX DX
两个8位的 each in two 8-bit halves, e.g. AH and AL
非常的快,但是很小

1.5 更多的工作空间:内存

cpu通过地址总线发送地址(金属线、每个金属线一位)
数据通过数据总线回来
或者数据写到数据总线

1.6 增加地址寄存器:指针指向内存

SP - 栈指针
BP - 基址指针
SI - 资源索引
DI - 目标索引
SP - stack pointer
BP - frame base pointer
SI - source index
DI - destination index

1.7 指令也在内存中

IP - 指令指针
increment after running each instruction
可以被call、ret。jmp、条件jump更改

1.8 Want conditional jumps

1.9 Still not interesting - need I/O to interact with outside world

1.10 What if we want to use more than 2^16 bytes of memory?

1.11 8086的16位地址和数据依旧还是有点小

80386在1985年增加了支持32位的数据和地址
boots 16位模式,boot…S切换到了32位
寄存器改成了32位宽,从AX改成了EAX
操作数和地址从16位改成了32位,比如ADD是执行32位运算
prefixes 0x66/0x67 toggle between 16-bit and 32-bit operands and addresses: in 32-bit mode, MOVW is expressed as 0x66 MOVW
the .code32 in boot.S tells assembler to generate 0x66 for e.g. MOVW
80386 also changed segments and added paged memory…

1.12 指令编程的例子

	b8 cd ab		    16-bit CPU,  AX <- 0xabcd
	b8 34 12 cd ab		32-bit CPU, EAX <- 0xabcd1234
	66 b8 cd ab		    32-bit CPU,  AX <- 0xabcd

2. x86物理内存map

2.1 物理地址空间几乎可以看成普通的RAM

2.2 希望低位地址指向其他的东西

2.3 在屏幕上写vga内存

2.4 Reset or power-on jumps to ROM at 0xfffffff0 (so must be ROM at top…)

+------------------+  <- 0xFFFFFFFF (4GB)
|      32-bit      |
|  memory mapped   |
|     devices      |
|                  |
/\/\/\/\/\/\/\/\/\/\

/\/\/\/\/\/\/\/\/\/\
|                  |
|      Unused      |
|                  |
+------------------+  <- depends on amount of RAM
|                  |
|                  |
| Extended Memory  |
|                  |
|                  |
+------------------+  <- 0x00100000 (1MB)
|     BIOS ROM     |
+------------------+  <- 0x000F0000 (960KB)
|  16-bit devices, |
|  expansion ROMs  |
+------------------+  <- 0x000C0000 (768KB)
|   VGA Display    |
+------------------+  <- 0x000A0000 (640KB)
|                  |
|    Low Memory    |
|                  |
+------------------+  <- 0x00000000

3. x86指令集

4. gcc x86调用规则

5. pc仿真

5.1 博世仿真器

和真正的pc做一样的事情
只实现软件层面的东西

5.2 在host操作系统上跑一个正常的进程

5.3 用一个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值