Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 20

Another

#include<BIOS.H>
Example:

#include<DOS.H>
char st[80] ={"Hello World$"};
char st1[80] ={"Hello Students!$"};
void interrupt (*oldint65)( );
void interrupt newint65( );
void main()
{
oldint65 = getvect(0x65);
setvect(0x65, newint65);
keep(0, 1000);
}

Continued:
void interrupt newint65( )
{
if (( _AH ) = = 0)
{
_AH = 0x09;
_DX = (unsigned int) st;
geninterrupt (0x21);
}
else
{
if (( _AH ) = = 1)
{
_AH = 0x09;
_DX = (unsigned int) st1;
geninterrupt (0x21);
}
}
}

2nd Program:
#include<BIOS.H>
#include<DOS.H>
void main()
{
_AH = 1;

geninterrupt (0x65);
_AH = 0;
geninterrupt (0x65);
}

Interrupt
Interception
Hooks/Stealing

Execution Interrupted
ISR Perform I/O

Normal Execution of Interrupt

New Routine

Original Routine

Interrupt Interception

Original Routine

New Routine

Other form of Interrupt Interception

void Interrupt newint();


void Interrupt (*old)();
void main()
{
old=getvect(0x08);
Setvect(0x08,newint);
Keep(0,1000);
}
void interrupt newint ()
{
(*old)();
}

Timer Interrupt

Hardware Interrupts
Invoked by Means of
Hardware
Approximately occurs
18.2 times per second

BIOS Data Area


0040:0000

40:17H

Insert key

Right Shift key

Caps Lock Key

Left Shift Key

Num Lock key

Ctrl Key

Scroll lock key

Alt Key

Keyboard Status Word

#include <dos.h>
void Interrupt (*old)();
void Interrupt new();
Char far *scr=(char far* ) 0x00400017;
Void main()
{
old=getvect(0x08);
Setvect(0x08,new);
Keep(0,1000);
}
Void interrupt new (){
*scr=64;
(*old)();
}

New Routine

Original Routine

Interrupt Interception

Memory Mapped
Isolated I/O

Isolated I/O
IN
M

I/O

OUT

Memory Mapped I/O


MOV

MOV

I/O

Memory Mapped I/O ON Monitor


B8OO:0000
B8OO:0001

Low Byte = ASCII CODE


High Byte =Attribute Byte

B8OO:0002
B8OO:0003

Memory Mapped I/O ON Monitor

fore color

Blink

X X X X X X X X
Back Color

Low Byte = Ascii Code


High Byte = Attribute Byte

Bold

Color

000
100
010
001
111

Black
Red
Gree
n
Blue
Whit
e

unsigned int far *scr=0xb8000000;


void main()
{
(*scr)=0x0756;
(*(scr+1))=0x7055;
}

You might also like