PowerPoint - Course Website Directory

advertisement
ECE291
Computer Engineering II
Lecture 13
Dr. Zbigniew Kalbarczyk
University of Illinois at Urbana- Champaign
Outline
• Material covered on Exam I
• Lookup tables
• Jump tables
• Interrupt vectors
– Interrupt functions examples
Z. Kalbarczyk
ECE291
Lookup Tables
• Lookup tables are often used to convert from one data form to
another
• A lookup table is formed in the memory as a list of data that is
referenced by a procedure to perform conversions
• XLAT instruction can often be used to lookup data in a table
– place the offset of the array in the BX and
– the desired index value in AL
– XLAT returns the byte element in AL
– AL cannot contain an index value greater than 255
– you can use XLAT with arrays containing more than 256 elements, simply
treat each 256-byte block of the array as a smaller sub-array, e.g.,
to retrieve the 260th element add 256 to BX and set AL =3 (260 -256 -1)
Z. Kalbarczyk
ECE291
Table-Lookup Functions
Example 1
•
Consider movement in an array by one
element
MBegin:
Array = Matrix of ROWSIZE x COLSIZE elements
CMP
DIR,UP
JE
MoveUP
CMP
DIR,RIGHT
JE
MoveRT
Pos = Position in array = Row * COLSIZE + Column
CMP DIR,DN
Dir = Direction (UP=0, RIGHT=1, DOWN=2,LEFT=3)
JE
MoveDOWN
CMP DIR,LEFT
JE
•
MoveDown
Slow and Tedious Original Code:
Compares each possible direction value
MoveUP:
SUB Pos,COLSIZE
JMP
MoveRT:
MDone
ADD Pos,1
JMP MDone
MoveDN:
ADD Pos,COLSIZE
JMP MDone
MoveLT:
SUB Pos,1
JMP MDone
MDone:
Z. Kalbarczyk
ECE291
Finished!
Table-Lookup Functions
Example 1 (cont.)
• Fast and Compact Table-lookup Code
• Eliminate conditional jumps by defining a table of movements
indexed by the Direction.
Movement
MBegin: MOV
dw -COLSIZE
; Movement[0] == Go UP
dw +1
; Movement[1] == Go RIGHT
dw +COLSIZE
; Movement[2] == Go DOWN
dw -1
; Movement[3] == Go LEFT
BX, DIR
; Direction = {0..3}
SHL
BX, 1
; Index words, not bytes
MOV
AX, Movement[BX]
ADD
Pos, AX
; Position += Movement
MDone: Finished!
Z. Kalbarczyk
ECE291
Table Lookup
Example 2
DAYS
INT
PROC FAR
POP DS
PUSH DX
PUSH
21h
POP SI
SI
POP DX
Converts numbers 0 to 6
to days of the week
The number is passed
in AL register
RET
MOV
SI, OFFSET DTAB
XOR
AH, AH
;clear AH
ADD
AX, AX
;double AX
ADD
SI, AX
;modify table address
MOV
DX, CS:[SI] ;get string address
MOV
AX, CS
PUSH
DS
MOV
DS, AX
MOV
AH, 09h
Z. Kalbarczyk
;change data segment
DTAB
DW
SUN, MON, TUE,
WED, THU, FRI, SAT
SUN
DB
‘Sunday $’
MON
DB
‘Monday $’
TUE
DB
‘Tuesday $’
WED
DB
‘Wednesday $’
THU
DB
‘Thursday $’
FRI
DB
‘Friday $’
SAT
DB
‘Saturday $’
DAYES
ENDP
ECE291
Jump Tables
•
Suppose table entries are pointers to functions
•
Suppose BX holds a command in the range of 0..N-1; let cmd index a
function
JFUNCTION PROC NEAR/FAR
; Input BX = Command
SHL BX,1
JMP Jtable[BX]
Jtable
dw offset
Funct0
dw offset
Funct1
..
dw offset
FunctN-1
Funct0:
do something ..
RET
Funct1:
do something else ..
RET
FunctN-1:
do something else ..
RET
JFUNCTION
ENDP
Z. Kalbarczyk
ECE291
; Words, not bytes
; Jump to function
Interrupt Vectors
• Jump Tables are the basis for interrupt vectors
• On 80x86, low 1024 bytes of memory hold vector table
• There are 256 pointers in the table
•
Each entry is a far (4 byte segment:offset) pointer
Memory address (hex)
Interrupt function pointer
003FC
INT 255
4*x
INT x
00008
INT 2
00004
INT 1
00000
INT 0
Z. Kalbarczyk
ECE291
Interrupt Vectors
• The term interrupt is used in three different contexts:
• Software interrupts (e.g., 21h)
– provide a mechanism whereby the programmer can use the int
instruction to access blocks of code that already exist and are
resident in machine memory
• Hardware interrupts
– triggered by hardware events external to the microprocessor, rather
than resulting from an int or any other instruction
– e.g., request for service by external devices such as disk drives
• Exceptions
– hardware origin within the microprocessor itself
– e.g., anomalous event within a program, such as an attempt to
divide by zero
Z. Kalbarczyk
ECE291
Interrupt Functions Examples
DOS Functions
• To execute of the many DOS functions, you can specify a subfunction by loading a value into AH just before calling INT 21
•
INT 21h, Subfunction:
AH=3Dh: Open File
AH=3Fh: Read File
AH=3Eh: Close File
AH=13h: Delete File (!)
AH=2Ah: Get system date
AH=2Ch: Get system time
AH=2Ch: Read DOS Version
AH=47h: Get Current Directory
AH=48h: Allocate Memory block (specified in paragraphs==16 bytes)
AH=49h: Free Memory block
AH=4Ch: Terminate program (and free resources)
Z. Kalbarczyk
ECE291
Interrupt Functions Examples
BIOS Functions
SYSTEM BIOS Functions
•
All PCs come with a BIOS ROM (or
EPROM).
•
The BIOS contains standard 80x86
opcodes to provide basic functions
such as bootstraping and primitive
I/O.
VIDEO BIOS Functions
•
Video cards come with 80x86
commands burned in a ROM. Video
BIOS is located at C0000-C7FFF
and holds routines for handling
basic functions.
•
To execute a function in video BIOS
ROM, call INT 10 with AX=subfunction.
•
INT 10h, Subfunction:
INT 19h: Reboot system
– AH=0,AL=2h: 80x25 Text
INT 11h: Get equipment configuration
– AH=0,AL=13h: 320x200, 256-color
graphic
INT 16h: Keyboard I/O
Z. Kalbarczyk
ECE291
Interrupt Functions Examples
MOUSE & Hardware Functions
HARDWARE Functions
MOUSE Functions : INT 33h
•
IRQ 0-7 FUNCTIONS : INT 8-Fh
Routines to read position and
status of mouse
System timer (IRQ 0 == INT 8h)
AX=0000h: Reset
Keyboard (IRQ 1 == INT 9h)
AX=0001h: Show Mouse
Bus/DMA (IRQ 2 == INT Ah)
AX=0003h: Get Position & Status
Serial Port (IRQ 3 == INT Bh)
SoundBlaster (IRQ 5 == INT Dh)
BX = Buttons Pressed:
bit[0]=left, bit[1]=right
INT = 8 + IRQ
CX = Column Position
IRQ 8-15 FUNCTIONS : INT 70h-77h
DX = Row Position
SCSI Request (IRQ 10d == INT 72h)
INT = 68h + IRQ
Z. Kalbarczyk
ECE291
Download