| Код |
.MODEL small .STACK 100h
IntNo = 4h
; ----- Data-------------------------------------------------
.DATA hex DB "0123456789ABCDEF" msg1 DB ":" cmdAddr DB "0000 : $" firstBytes DB "0000",0Dh,0Ah,"$" Counter DB 5 ClockCnt DB 0 Msg DB "Int!",0Dh,0Ah,"$"
; ----- Kod -----------------------------------------------------------------
.CODE
OrigISRSeg DW ? OrigISROfs DW ?
Strt: mov ax,@data mov ds,ax
; --- es <- 0 mov ax, 0 mov es, ax
mov ax,es:[IntNo*4] mov cs:[OrigISROfs],ax mov ax,es:[IntNo*4 + 2] mov cs:[OrigISRSeg],ax
pushf cli mov word ptr es:[IntNo*4],offset ISRProcedure mov word ptr es:[IntNo*4 + 2],seg ISRProcedure popf int 4h xor ax,ax
int 4h int 4h int 4h push ds mov ax,cs:[OrigISRSeg] mov ds,ax mov dx,cs:[OrigISROfs] mov ah,25h mov al,IntNo int 21h pop ds
mov ax,04C00h int 21h
;-------------------------------------------------------------------------- ISRProcedure PROC push bp mov bp,sp push ax push bx push dx push ds
mov ax,@data mov ds,ax mov ax,[bp+2] mov dx,OFFSET cmdAddr call IntToHex call PrintStr push ds mov ds,[bp + 4] mov bx,[bp + 2] mov ax,[bx] pop ds
xchg al,ah mov dx,OFFSET firstBytes call IntToHex call PrintStr pop ds pop dx pop bx pop ax pop bp push cs:[OrigISRSeg] push cs:[OrigISROfs] retf ISRProcedure ENDP
;-------------------------------------------------------------------------- ; PrintStr$ - prints string to STDOUT ; IN ; ds:dx - string ;-------------------------------------------------------------------------- PrintStr PROC push ax
mov ah,9h int 21h
pop ax ret PrintStr ENDP
IntToHex PROC push ax push bx push cx push di push dx
mov di,dx mov cx,4
@@lopppp: rol ax,4 mov bx,ax and bx,0Fh mov bl,[bx + hex] mov [di],bl inc di loop @@lopppp
pop dx pop di pop cx pop bx pop ax ret IntToHex ENDP
END Strt
|
Да програма должна когда встречаэт INT 4h запускать интерапт и печятат адрес где оне нашлас и код свой в HЕХ
коешто сам набросил но вот както адрес ниправилна показываэт, показываэт код и адрес на один в период. Может кто поможыт исправит.
Спасиба  |