Adresses gestionnaires d'interruptions 16 bits

Soyez le premier à donner votre avis sur cette source.

Snippet vu 1 936 fois - Téléchargée 15 fois

Contenu du snippet

Bonjour,

ce prog lit simplement les adresses des gestionnaires d'interruptions situés dans l'IVT
(segment 0:offset (n°int*4) et les affiche en RAM vga texte (B800:....)
Num définit le n° de l'int voulue,le prog affiche l'adresse du gestionnaire et celle
des 15 int suivantes

assemblé sous NASM en .com

    

org 256

; affiche l'adresse du gestionnaire de l'interruption Num
; et celles des 15 int suivantes

%define Num 10 ;n° de l'int rechercher
%define NbreInt 16 ;nbre d'int à afficher au total
%define SegIvt 0 ;segment ou se trouve IVT en 16bits
%define total Num+NbreInt

%macro M160 1
;multiplie %1 par 160
;modifie ax et cx
;sortie: ax=1*160

mov ax,%1
shl ax,4
shl ax,1
mov cx,ax
add ax,cx
add ax,cx
add ax,cx
add ax,cx
%endmacro

%macro affiche 4
;affiche en ram vga texte 80*25
;x=%1 y=%2 Lptext=%3 couleur=%4
mov si,%3
mov bx,%1
mov di,%2
mov ah,%4
call VGA3
%endmacro

section .data

Buff db '0000',0
inter db 'INT ',0
ptv db ':',0
Y resw 1
Y160 resw 1
NumINT resw 1

section .text

push word SegIvt
pop es
push 0B800h
pop fs

mov ax,03h
int 10h

mov ax,3
mov [Y],ax

mov ax,Num
mov [NumINT],ax

boucle:

M160 word [Y]
mov [Y160],ax
mov bx,[NumINT]
mov di,Buff
call AFFval

affiche 2,word[Y160],inter,100b
affiche 7,word[Y160],Buff,100b

mov si,[NumINT]
shl si,2
mov ax,[es:si]

xchg bx,ax
mov di,Buff
call AFFval

affiche 38,WORD[Y160],ptv,110b
affiche 39,word[Y160],Buff,110b

mov si,[NumINT]
shl si,2
mov ax,[es:si+2]

xchg bx,ax
mov di,Buff
call AFFval

affiche 34,word[Y160],Buff,110b

inc word[Y]
inc word[NumINT]

mov ax,[NumINT]
xor ax,total
jnz boucle

mov ah,0
int 16h

ret

VGA3:

pushad
shl bx,1

VGA3_debut:

lodsb
cmp al,0
jz VGA3_fin

mov [fs:di+bx],ax
inc bx
inc bx
jmp VGA3_debut

VGA3_fin:
popad
ret

AFFval: ;transforme [bx] en caracteres ascii

pushad

;bits 15 à 12

push bx
shr bh,4 ;on ejecte les 4 bits faibles
call cherche
pop bx

;bits 11 à 8

push bx
and bh,00001111b ;mise à zéro des 4 bits forts
call cherche
pop bx

;bits 7 à 4

push bx
xor bh,bh
shr bl,4
xchg bh,bl
call cherche
pop bx

;bit 3 à 0

and bl,00001111b
xchg bh,bl
call cherche

popad
ret

cherche:

mov si,table
shr bx,8
mov al,[si+bx]
mov [di],al
inc di
ret

table db '0123456789ABCDEF',0

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.