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