[go: up one dir, main page]

0% found this document useful (0 votes)
39 views27 pages

6.828: PC Hardware and x86: Frans Kaashoek Kaashoek@mit - Edu

Download as pdf or txt
Download as pdf or txt
Download as pdf or txt
You are on page 1/ 27

6.

828: PC hardware and x86

Frans Kaashoek
kaashoek@mit.edu
A PC

how to make it to do something useful?


Outline

•  PC architecture
•  x86 instruction set
Illustrate a few
•  gcc calling big CS ideas
conventions
•  PC emulation
PC board
Abstract model

Central Main
Input/Output Processing Memory
Unit

•  I/O: communicating data to and from devices


•  CPU: digital logic for performing computation
•  Memory: N words of B bits
The stored program computer
Main memory
CPU instruction
instruction
for (;;) {
next instruction instruction
} data
data
data

•  Memory holds instructions and data


•  CPU interpreter of instructions
x86 implementation

instruction 232-1

instruction
instruction
data
data
data 0

•  EIP is incremented after each instruction


•  Instructions are different length
•  EIP modified by CALL, RET, JMP, and conditional JMP
Registers for work space

•  8, 16, and 32 bit versions


•  By convention some registers for special purposes
•  Example: ADD EAX, 10
•  Other instructions: SUB, AND, etc.
EFLAGS register

•  Test instructions: TEST EAX, 0


•  Conditional JMP instructions: JNZ address
Memory: more work space

•  Memory instructions: MOV, PUSH, POP, etc


•  Most instructions can take a memory address
Stack memory + operations

•  Stack grows down


•  Use to implement procedure calls
More memory
•  8086 16 registers and 20-bit bus addresses
•  The extra 4 bits come segment registers
–  CS: code segment, for EIP
–  SS: stack segment, for SP and BP
–  DS: data segment for load/store via other registers
–  ES: another data segment, destination for string ops
–  For example: CS=4096 to start executing at 65536
•  Makes life more complicated
–  Cannot use 16 bit address of stack variable as pointer
–  Pointer arithmetic and array indexing across segment
boundaries
–  For a far pointer programmer must include segment reg
And more memory
•  80386: 32 bit data and bus addresses
•  Now: the transition to 64 bit addresses
•  Backwards compatibility:
–  Boots in 16-bit mode, and boot.S switches to
protected mode with 32-bit addresses
–  Prefix 0x66 gets you 32-bit:
•  MOVW = 0x66 MOVW
–  .code32 in boot.S tells assembler to insert 0x66
•  80386 also added virtual memory addresses
–  Segment registers are indices into a table
–  Page table hardware
I/O space and instructions

•  8086: Only 1024 I/O addresses


Memory-mapped I/O
•  Use normal addresses
–  No need for special instructions
–  No 1024 limit
–  System controller routes to device
•  Works like magic memory
–  Addressed and accessed like memory
–  But does not behave like memory
–  Reads and writes have side effects
–  Read result can change due to external events
Physical memory layout
x86 instruction set
•  Instructions classes:
–  Data movement: MOV, PUSH, POP, …
–  Arithmetic: TEST, SHL, ADD, …
–  I/O: IN, OUT, …
–  Control: JMP, JZ, JNZ, CALL, RET
–  String: REP, MOVSB, …
–  System: IRET, INT, …
•  Intel architecture manual Volume 2
–  Intel syntax: op dst, src
–  AT&T (gcc/gas) syntax: op src, dst
Gcc calling conventions for JOS
Prologue:
pushl %ebp
movl %esp, %ebp

Epilogue:
movl %ebp, %esp
popl %ebp

•  Saved %ebp s form a chain, can walk stack


•  Arguments and locals at fixed offsets from EBP
gcc procedure calling conventions Caller saved

–  %eax contains return value, %ecx, %edx may be


trashed
–  %ebp, %ebx, %esi, %edi must be as before call

Callee saved
–  Note that %ebp isn’t strictly necessary, but we
compile JOS and xv6 this way for convenience of
walking up the stack.
Example
From C to running program
gcc gas
.c .asm .o
loader
memory
ld a.out
gcc gas
.c .asm .o

•  Compiler, assembler, linker, and loader


Development using PC emulator
•  QEMU PC emulator
–  does what a real PC
does JOS
–  Only implemented in
software! PC emulator

•  Runs like a normal Linux


program on host
operating system PC
Emulation of memory
Emulation of CPU
Emulation x86 memory
Emulating devices
•  Hard disk: using a file of the host
•  VGA display: draw in a host window
•  Keyboard: hosts s keyboard API
•  Clock chip: host s clock
•  Etc.
Summary
•  For lab: PC and x86
•  Illustrate several big ideas:
–  Stored program computer
–  Stack
–  Memory-mapped I/O
–  Software = hardware

You might also like