CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San...
-
date post
19-Dec-2015 -
Category
Documents
-
view
218 -
download
0
Transcript of CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San...
![Page 1: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/1.jpg)
CS 630: Advanced Microcomputer Programming
Fall 2006
Professor Allan B. Cruse
University of San Francisco
![Page 2: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/2.jpg)
Course Synopsis
• We study the IA32 processor architecture
• It’s implemented in our Pentium 4 CPUs
• Also implemented in some earlier CPUs
• Not only Intel, but also by its competitors (e.g., present as ‘legacy mode’ in AMD64)
• IA32 architecture adopted by newer Macs
• IA32 architecture continues in Core 2 Duo
![Page 3: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/3.jpg)
Point-of-View
• For study purposes we can pretend we’re studying a ‘bare machine’ (i.e., it just has standard PC hardware for doing I/O, and ROM-BIOS firmware supplied by vendor, but lacks any operating system software).
• So we get to ‘build our own’ miniature OS
• Doing this will bring us face-to-face with the CPU’s most fundamental capabilities
![Page 4: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/4.jpg)
Methodology
• Our interactive computer classroom lets us take a ‘hands on’ approach to our studies (i.e., we combine ‘theory’ with ‘practice’)
• Typically we’ll devote first part each class to a ‘lecture’ about aspects of IA32 theory
• Then we’ll take time in the second part of class for ‘laboratory exercises’ that put the newly learned ideas into ‘working code’
![Page 5: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/5.jpg)
Course prerequisites
• Experience with C / C++ programming
• Familiarity with use of Linux / UNIX OS
• Acquaintance with x86 assembly language– Knowledge of the x86 general registers– Awareness of the x86’s instruction-set
• Understand the CPU’s fetch-execute cycle
• Recall the ways memory is addressed
![Page 6: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/6.jpg)
Review of System Components
CentralProcessing
Unit
MainMemory
I/Odevice
I/Odevice
I/Odevice
I/Odevice
system bus
![Page 7: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/7.jpg)
Review of the x86 API
EAX
EBX
ECX
EDX
ESI
EDI
EBP
ESP
General Registers (32-bits)
CS
DS
ES
FS
GS
SS
Segment Registers (16-bits)
EIP
EFLAGS
Program Control and Status Registers (32 bits)
![Page 8: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/8.jpg)
Review of Instruction-Set
• Data-transfer instructions (mov, xchg, …)
• Control-transfer instructions (jmp, call, …)
• Arithmetic/Logic instructions (add, or, …)
• Shift/Rotate instructions (shr, rol, …)
• String-manipulation instructions (movs, …)
• Processor-control instructions (cli, hlt, …)
• Floating-point instructions (fldpi, fmul, …)
![Page 9: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/9.jpg)
Review “Fetch-Execute” Cycle
ESP
EIPProgram
Instructions(TEXT)
ProgramVariables(DATA)
TemporaryStorage(STACK)
main memory
central processor
EAXEAXEAXEAX
the system bus
![Page 10: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/10.jpg)
Steps in ‘Fetch-Execute Cycle’
INTR?
Fetch next instruction
Advance instruction-pointer
Decode fetched instruction
Execute decoded instruction
noInterruptServiceRoutine
yes
![Page 11: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/11.jpg)
Review of operand addressing
• Implicit addressing (e.g. pushf, cbw, scasb, cli, xlat, …)
• Direct addressing(e.g., incl salary, movw $0, counter,
…)
• Indirect addressing(e.g., add %dx, 0x14(%ebx, %esi, 2) )
![Page 12: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/12.jpg)
Course Textbook
• Tom Shanley, Protected Mode Software Architecture, Addison-Wesley (1996)
Initial reading assignment:
Week 1: Read Part One (Chapters 1-3)
Week 2: Read Part Two (Chapters 4-5)
![Page 13: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/13.jpg)
Instructor Contact Information
• Office: Harney Science Center – 212
• Hours: Mon-Wed-Fri 12:30pm-1:15pm and Tues-Thurs 6:15pm-7:15pm
• Phone: (415) 422-6562
• Email: [email protected]
• Webpage: <http://cs.usfca.edu/~cruse>
![Page 14: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/14.jpg)
CPU Execution Modes
REALMODE
PROTECTEDMODE
VIRTUAL8086
MODE
SYSTEMMANAGEMENT
MODE
POWER-ON / RESET
![Page 15: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/15.jpg)
Early Intel Processors
• 1971: 4004 (first 4-bit processor)
• 1972: 8008 (first 8-bit processor)
• 1974: 8080 (widely used by CP/M)
• 1978: 8086/8088 (first 16-bit processor)
• 1982: 80286: (introduced protected mode)
• 1985: 80386: (first 32-bit processor)
• 1989: 80486: (integrated floating-point)
![Page 16: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/16.jpg)
Later Intel Processors
• 1993: Pentium processor (dual CPUs)• 1995: Pentium Pro (for high-end servers)• 1996: Pentium II (single-edge connector)• 1998: Pentium II Xeon (multiple CPUs)• 1999: Celeron (stripped down Pentium II)• 1999: Pentium III (1GHz, 512K L2 cache) • 1999: Pentium III Xeon (high-end servers)• 2001: Pentium 4 (new SIMD instructions)
![Page 17: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/17.jpg)
Even newer Intel Processors
• 2003: Pentium-M (‘mobile’ -- for laptops)
• 2005: Pentium-D (‘dual core’ -- for ‘smp’)
• 2006: Core 2 Duo (released this summer)
• Newest CPUs support ‘EM64T’ and ‘VT’– EM64T: Extended Memory 64-bit Technology– VT: Intel’s ‘Virtualization Technology’
![Page 18: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/18.jpg)
Backward Compatibility
• From its first commercial success onward, “backward compatibility” (i.e., support for the software legacy) has been viewed by Intel as an engineering design imperative
• So the first 16-bit processors (8086/8088), used in IBM-PCs, were designed in a way that would let them run the vast number of CP/M programs written for 8-bit 8080 CPU
![Page 19: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/19.jpg)
Real Mode
• 8086/8088 had only one execution mode
• It used “segmented” memory-addressing
• Physical memory on 8086 was subdivided into overlapping “segments” of fixed-size
• The length of any “segment” was 64KB, to match the size of an 8080s address-space
• This scheme supported CP/M applications
• (Our Pentium CPUs continue that support)
![Page 20: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/20.jpg)
64KB Memory-Segments
• Fixed-size segments partially overlap
• Segments start on paragraph boundaries
• Segment-registers serve as “selectors”
code
data
stack
CS
DS
SS
![Page 21: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/21.jpg)
Real-Mode Address-Translation
0x1234 0x6789Logical address:
16-bit segment-address 16-bit offset-address
x 16 +
0x18AC9
20-bit bus-address
Physical address:
0x12340+ 0x06789
---------------- 0x18AC9
![Page 22: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/22.jpg)
Protected Mode
• Any Pentium CPU starts up in ‘Real Mode’ • While in real mode, its behavior is like an 8086
(i.e., any program can do anything it wants, as the CPU’s protection mechanisms are disabled)
• But software can enter ‘protected mode’ (on a 80286 or higher) using a special instruction to modify a bit within a processor control-register
• Once in protected mode, the segment-sizes can be adjusted, accesses to physical memory (or to peripheral devices) can be restricted, and tasks can be isolated from interfering with one another
![Page 23: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/23.jpg)
Enabling Protection
NE
ET
TS
EM
MP
PE
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
80286 Machine Status Word
PE (Protection Enabled) 0=no, 1=yes
smsw %axor $1, %axlmsw %ax
Code-fragment that enables protection
![Page 24: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/24.jpg)
Protected-Mode Segments
• Segments can have varying lengths
• Segments may, or may not, overlap
• Segments are assigned ‘access-attributes’
code
data
stack
operating system
CS
DS
SS
GS
![Page 25: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/25.jpg)
Our ‘bare machine’
• If we want to do a “hands on” study of our CPU, without any operating system getting in our way, we have to begin by exploring ‘Real Mode’ (it’s the CPU’s startup state)
• We will need to devise a mechanism by which our program-code can get loaded into memory (since we won’t have an OS)
• This means we must write a ‘boot loader’
![Page 26: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/26.jpg)
What’s a ‘boot loader’
• A ‘boot loader’ is a small program that is resident in the starting sector of a disk (or tape or other non-volatile storage medium)
• After testing and initializing the machine’s essential hardware devices, the startup program in the ROM-BIOS firmware will read the ‘boot loader’ into memory, at an assigned location, and then jump there
![Page 27: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/27.jpg)
PC ROM-BIOS BOOT_LOCN
BOOT_LOCN0x00007C00
0x00007E00512 bytes
ROM-BIOS
VRAM
IVT and BDA
8086 memory-map
RAM
Vendor’s Firmware
Video Display MemoryNo installed memory
Volatile Program Memory 1-MB
![Page 28: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/28.jpg)
Some Requirements
• A ‘boot loader’ has to be 512 bytes in size (because it has to fit within a disk sector)
• Must begin with executable machine-code• Must end with a special ‘boot signature’• Depending on the type of storage medium,
it may need to share its limited space with certain other data-structures (such as the ‘partition table’ on a hard disk, or the Bios Parameter Block’ on a MS-DOS diskette)
![Page 29: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/29.jpg)
Writing a ‘boot loader’
• Not practical to use a high-level language
• We need to use 8086 assembly language (our classroom/lab systems provides ‘as’)
• This assembler’s syntax differ’s from the standard set by Intel and Microsoft, but it follows a tradition, established in 1970s at AT&T, for its original versions of UNIX
• That ‘as’ syntax is documented online
![Page 30: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/30.jpg)
Using ROM-BIOS functions
• Our system firmware provides many basic service-functions that real mode programs can invoke (this includes ‘boot-loaders’):– Video display functions– Keyboard input functions– Disk access functions – System query functions– A machine ‘re-boot’ function
![Page 31: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/31.jpg)
Example: Write_String function
• Setup parameters in designated registers– AH = function ID-number (e.g. 0x13)– AL = cursor handling method (e.g. 0x01)– BH = display page-number (e.g., 0x00)– BL = color attributes (e.g., 0x0A) – CX = length of the character-string – DH, DL = row-number, column-number– ES:BP = string’s starting-address (seg:off)
• Call BIOS via software interrupt (int-0x10)
![Page 32: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/32.jpg)
Downloading a class demo
• You can ‘download’ a program source-file from our CS 630 course-website to your own ‘present working directory’ by using the Linux file-copy command, like this:
$ cp /home/web/cruse/cs630/bootmsw.s .
(Here the final period-character (‘.’) is the Linux shell’s symbol for your ‘current directory’).
![Page 33: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/33.jpg)
Compiling and Installing
• Compiling our ‘boot loader’ using ‘as’ is a two-step operation (and requires use of a linker-script, named ‘ldscript’):
$ as bootload.s –o bootload.o$ ld bootload.o –T ldscript –o
bootload.b
• Installing our bootloader into the starting sector of a floppy diskette is very simple:
$ dd if=bootload.b of=/dev/fd0
![Page 34: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/34.jpg)
No floppy drive!
• Our workstations no longer have diskette-drives, but we have devised alternatives:– Copy the bootloader to a hard disk partition– Install the bootloader on a diskette-image file
• Tonight we can use the first alternative: $ dd if=bootloader.b of=/dev/sda4
• The ‘grub’ menu includes an option that will let you ‘boot’ from this ‘cs630 partition’
![Page 35: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/35.jpg)
Executing a ‘boot-loader’
• You need to perform a system ‘reboot’
• Our classroom machines will load GRUB (the Linux GRand Unified Boot-loader)
• GRUB will display a menu of Boot Options
• You can choose ‘boot from a disk-partition’
• Or you can boot from a diskette-image file
![Page 36: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/36.jpg)
In-class Exercise #1
• Look at our CS 630 class website: <http://cs.usfca.edu/~cruse/cs630>
• Download, assemble, and install our demo‘bootmsw.s’
• Copy the ‘binary-executable’ (i.e., bootmsw.b’) to the first sector of the hard-disk’s partition #4:
$ dd if=bootmsw.b of=/dev/sda4
• Reboot machine and use GRUB’s menu to boot our demo-program from the ‘cs630 partition’
![Page 37: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/37.jpg)
In-class Exercise #2
• Now modify our demo so it will permit a user to ‘reboot’ just by pressing any key
• This exercise will require you to edit your copy of our demo-program’s source-file (adding a few lines that invoke two further ROM-BIOS service-functions), and then reassemble, relink, and reinstall your work
![Page 38: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/38.jpg)
A valuable Online Reference
• Professor Ralf Brown’s Interrupt List(see webpage link under
‘Resources’)
• It tells how to make BIOS system-calls, to perform numerous low-level services from within Real-Mode 8086 applications (such as ‘boot loader’ programs)
![Page 39: CS 630: Advanced Microcomputer Programming Fall 2006 Professor Allan B. Cruse University of San Francisco.](https://reader036.fdocuments.in/reader036/viewer/2022062320/56649d275503460f949fdcea/html5/thumbnails/39.jpg)
Programming Details
• It’s easy to include ‘await keypress’:mov $0, %ah ; function-IDint $0x16 ; BIOS keyboard
service
• It’s easy to include ‘reboot system’:int $0x19 ; BIOS reboot service