ECE 353 Introduction to Microprocessor Systems Michael G. Morrow, P.E. Week 3
Jan 13, 2016
ECE 353Introduction to Microprocessor Systems
Michael G. Morrow, P.E.
Week 3
Objectives80C188EB Organization (continued) Segmentation Reset Processing Programmer’s Model
80C188EB Machine Language80C188EB Assembly Language and Assemblers80C188EB Debuggers
80C188EBArchitecture
Segmented Memory Architecture
Memory Segmentation Logical vs. Physical Addresses Segment Organization
Topologies Disjoint Overlapping Identical
Physical Address GenerationAdvantagesDisadvantages
80C188EBImplementation
80C188EB Programmer’s Model
Accumulator AH AL
BH BL
CH CL
DH DL
SP
BP
SI
DI
CS
DS
ES
SS
F
IP
Data Registers Segment Registers
P ointer & Index Registers Instruction Pointer
Flags Registers
Base
Count
Data
Flags
Stack Pointer
Base Pointer
Source Index
Destination Index
Code
Data
Extra
Stack
BIUEU
Data
Point
er &
Inde
x
Gene
ral p
urpo
se re
giste
rs
AX
BX
CX
DX
ProgrammingProgramming Languages HLL Assembly Language Machine Language
Machine Language Instructions 1 – 6 bytes in length Encoding
Assembler PrimerAssembler Types Native Assembler Cross Assembler
General Instruction SyntaxInstruction ExamplesAssembler Functions Syntax checking Offset calculation Encoding to machine code
ExampleProgram Hardware
Source Code File
.186 ;use 80186 instructions
SWITCHES equ 1234h ;define symbolsLEDS equ 5678h
assume cs:code ;establish CS addressability
code segment ;start of code segment
main: mov dx, SWITCHES ;load switch port addressin al, dx ;read switchesnot al ;switch off turns LED onmov dx, LEDS ;load LED port addressout dx, al ;write to LED portjmp main ;and repeat indefinitely
code ends ;end of code segment
end main ;code entry point is at main
Assembler Listing File (page 1)
Turbo Assembler Version 4.1 09/12/01 08:49:11 Page 1 week3.ASM
1 .186 ;use 80186 instructions 2 3 =1234 SWITCHES equ 1234h ;define symbols 4 =5678 LEDS equ 5678h 5 6 assume cs:code ;establish CS addressability 7 8 0000 code segment ;start of code segment 9 10 0000 BA 1234 main: mov dx, SWITCHES ;load switch port address 11 0003 EC in al, dx ;read switches 12 0004 F6 D0 not al ;SW=1 --> LED on 13 0006 BA 5678 mov dx, LEDS ;load LED port address 14 0009 EE out dx, al ;write to LED port 15 000A EB F4 jmp main ;and repeat indefinitely 16 17 000C code ends ;end of code segment 18 19 end main ;code entry point is at main
Assembler Listing File (page 2)
Turbo Assembler Version 4.1 09/12/01 08:49:11 Page 2Symbol Table
Symbol Name Type Value
??DATE Text "09/12/01"??FILENAME Text "week3 "??TIME Text "08:49:11"??VERSION Number 040A@CPU Text 0103H@CURSEG Text CODE@FILENAME Text WEEK3@WORDSIZE Text 2LEDS Number 5678MAIN Near CODE:0000SWITCHES Number 1234
Groups & Segments Bit Size Align Combine Class
CODE 16 000C Para none
Code Generation Process
EDITOR
ASSEMBLER
LINKER
LOCATOR
OBJECT/HEX
source file (*.asm)
relocatable object file (*.obj)
relocatable linked object file (*.obj)
absolute object file (*.axe)
HEX-ASCII object file (*.hex)
DEVICEPROGRAMMER
list file (*.lst)
linker map file (*.map)
locator map file (*.map)
Programmed EPROM
Blank EPROM
Other OBJ filesfrom assembly
or HLL compilers
Intel Hex Record Format:020000021000EC:0C000000BA3412ECF6D0BA7856EEEBF4ED:00000001FF
Record Mark
Record Length
Load Address or 0000
Record Type
Data Checksum Record Description
: 02 0000 02 1000 EC Extended address record
: 0C 0000 00 BA3412ECF6D0BA7856EEEBF4
ED Data record
: 02 0000 01 FF End-of-file record
BA3412(mov dx, 1234h)EC(in al, dx)F6D0(not al) BA7856(mov dx, 5678h)EE(out dx, al)EBF4(jmp –12)
Disassembling the data record payload.
Borland Development Tools
EDITOR
ASSEMBLERTASM
LINKERTLINK
filename.ASM
filename.OBJ
filename.LST
filename.MAP
Other OBJ filesfrom assembly
DEBUGGERTD filename.EXE
Debugger PrimerSo, why is it called a bug, anyway?TerminologyTypical Debugger OperationDebugging Tools Software Hardware
Comparison of Debugging Tools
Paradigm C++ Demonstration
Paradigm C++ (PCPP) is used in ECE 315PCPP is an integrated development environment (IDE) Code generation Debugging
Code Development Tips Use structured programming methods / no spaghetti
code. Use descriptive symbols and names. Write comments as you go. When fixing assembler errors, fix only the top one or
two and re-assemble – a lot of the later errors may be due to the first few.
When debugging, verify what the registers are loaded with as compared to what you think they should be loaded with.
Instruction Decoding Exercise
The following memory dump was obtained from an 80C188EB-based systemCS:0013 is a valid instructionDecode the memory data to determine the instructions that were assembled to produce it.
CS:0013 B0 12 BA 34 12 FE C7 EB F7
Instruction Decoding Solution
16 000A B0 12 Target: mov al, 12h17 000C BA 1234 mov dx, 1234h18 000F FE C7 inc bh19 0011 EB F7 jmp Target
Wrapping UpHomework #2 due Friday 9/28
80C188EB Instruction Encoding
Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6
LOW DISP/DATA
HIGH DISP/DATA
LOW DATA HIGH DATA
OPCODE D W MOD REG R/M
Register operand/registers to use in EA calculation
Register operand/extension of opcode
Register mode/memory mode with displacement length
Word/byte operation
Direction is to register/direction is from register
Operation (instruction) code [opcode]
JMP Instruction Encoding
INC Instruction Encoding
Debugging Tools
Disjoint Segments00000h
FFFFFh
CS
DS
SS
Overlapping Segments
CS
DS
SS
00000h
FFFFFh
Identical Segments
CS
DS
SS
00000h
FFFFFh