Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Interapt


Автор: xseroxas 4.12.2007, 18:12
Возникла проблема, надо написат прогу которая узнаёт команду Interrupt on Overflow(INTO), эсли встретила вывести на екран бце регицтры и 3 последних знаценй из стека. мозет кто мысл какую подкинет.

Спасиба за раниэ.

Автор: MAKCim 5.12.2007, 00:40
xseroxas, 
пишите нормальным русским языком
Цитата(xseroxas @  4.12.2007,  18:12 Найти цитируемый пост)
которая узнаёт команду Interrupt on Overflow(INTO)

что значит узнает?

Автор: dumb 5.12.2007, 17:13
Цитата(MAKCim @  5.12.2007,  00:40 Найти цитируемый пост)
что значит узнает?
типа обработчик int 4 нужно написать... smile

Автор: xseroxas 11.12.2007, 18:48
Код


    .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ЕХ

коешто сам набросил но вот както адрес ниправилна показываэт, показываэт код и адрес на один в период. Может кто поможыт исправит.

Спасиба smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)