Download presentation
Presentation is loading. Please wait.
Published byLorraine Wilkerson Modified over 9 years ago
1
Flow Diagram: Push flags, CS, IP Pop IP,CS,flags Push AX,BX,CX,DX,ES,DS,SI,DI,BP POP BP,DI,SI,DS,ES,DX,CX,BX,AX
2
Typical Reentrant Routine: ---- ---- ---- ---- ---- Int ---- ---- ---- ---- ---- Push AX, Push BX, Push CX, Push DX, Push ES, Push DS, Push SI, Push DI, Push BP ---------- Pop BP, Pop DI, Pop SI, Pop DS, Pop ES, Pop DX, Pop CX, Pop BX, Pop AX, IRET
3
Animation: Flags CS IP AX BX ES DX DS CX SI DI BP
4
void main () { x = sum(4, 5); printf (“%d”, x); a = 10; b = 20; x = sum(a, b); printf (“%d”, x); } int sum (int i, int j) { return i+j; } Example: SP RP 5 4 SP RP b a
5
void interrupt newint ( unsigned int BP, unsigned int DI, unsigned int SI, unsigned int DS, unsigned int ES, unsigned int DX, unsigned int CX, unsigned int BX, unsigned int AX, unsigned int CS, unsigned int IP, unsigned int flags) { a = AX; b = BX; d = ES; } Accessing Stack Example:
6
void main ( ) { setvect(0x65,newint); _AX = 0x1234; Geninterrupt (0x65); a = _AX; Printf (“%x”, a); } Example: void interrupt newint( unsigned int BP, unsigned int DI, unsigned int SI, unsigned int DS, unsigned int ES, unsigned int DX, unsigned int CX, unsigned int BX, unsigned int AX, unsigned int CS, unsigned int IP, unsigned int flags) { AX = 0xF00F; }
7
On Entry AH = Service # = 03 AL = No of Blocks to write BX = Offset Address of Data CH = Track No., CL = Sector DH = Head # DL = Drive # (Starts from 0x80 for fixed disk & 0 for removable disks) ES = Segment Address of data buffer. On Exit AH = return Code Carry flag = 0 ( No Error AH = 0) Carry flag = 1 ( Error AH = Error Code) Disk Interrupt ( int# 13H Service# 3)
8
Addressing of Block Specified: Head, Sec, Track #pragma inline #include void interrupt (*oldtsr) ( ); void interrupt newtsr (unsigned int BP, …, flags); void main ( ) { oldtsr = getvect (0x13); setvect = (0x13, newtsr); keep (0, 1000); }
9
void interrupt newtsr(unsigned int BP, unsigned int DI, unsigned int SI, unsigned int DS, unsigned int ES, unsigned int DX, unsigned int CX, unsigned int BX, unsigned int AX, unsigned int CS, unsigned int IP, unsigned int flags) { _ES = ES; _DX = DX; if ( _AH = = 0x03) _CX = CX;_BX = BX; if (( _DH= =1 && _CH= =0 _AX = AX; && _CL= =1)&& _DL>=0x80) *oldtsr; { asm pushf; asm clc; asm pop flags; asm pushf; AX = _AX; BX = _BX; asm pop flags; CX = _CX; DX = _DX; return; ES = _ES; }
10
Key Pressed Move Scan Code from 60H port to AL Convert to ASCII & place it in keyboard buffer Int 15H Service 4FH Keyboard Interrupt Hook (int# 15H Service# 4FH)
11
Example: #include void interrupt (*oldint15) ( ); void interrupt newint15( unsigned int BP, …, flags); void main ( ) { oldint15 = getvect (0x15); setvect (0x15, newint15); keep (0, 1000); }
12
void interrupt newint15(unsigned int BP, unsigned int DI, unsigned int SI, unsigned int DS, unsigned int ES, unsigned int DX, unsigned int CX, unsigned int BX, unsigned int AX, unsigned int CS, unsigned int IP, unsigned int flags) { if (*(((char*)&AX) + 1) = = 0x4F ) { if (*((char*)&AX) = = 0x2C) *(((char*)&AX)) = 0x1E; else if (*((char*)&AX) = = 0x1E) *((char*)&AX) = = 0x2C; }
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.