adresses gestionnaires d'interruptions

Présentation
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
Téléchargement
0  0 
Téléchargé 10 fois Voir les 3 commentaires
Détails
Avatar de parki2013
Membre du Club
Voir tous les téléchargements de l'auteur
Licence : Freeware
Date de mise en ligne : 10 novembre 2013




Avatar de Forthman Forthman - Membre chevronné https://www.developpez.com
le 05/11/2013 à 23:17
Citation Envoyé par parki2013 Voir le message

Qu'en pensez-vous ?
Bonsoir,

Au niveau du code, je ne vois pas pourquoi tu créés une macro M160
avec 2 décalages (un de 4 + 1 plutôt que directement un décalage de 5)
Une optimisation de la sorte sur un 8086 passe encore (et je ne suis
pas sûr du gain réel résultat)
Mais comme tu utilises des registres 80386 (FS: entre autre) autant
faire un simple : mul ax,160
Je rajoute une couche mais dans un cas pareil, il vaut mieux optimisez
la taille du code plutôt que la performance puisque le résultat doit s'afficher
à l'écran pour être lu, et du coup même si l'affichage prend 1 seconde...

Et pour l'affichage des nombres hexa... pfffiou ! tu aimes te compliquer la vie
Histoire de te filer un coup de main :
J'imagine que AL contient un octet à afficher
l'affichage va commencer par le quartet de poids fort
donc décalage à droite (shr) de 4 bits (après avoir sauvé AL)
AL contient maintenant une valeur comprise entre 0 et 15
j'ajoute le code ASCII de "0" (48) à AL
si AL > que code ASCII de "9" (57) alors j'ajoute 7
( si AL = 58 alors AL=AL+7 = 65 qui est le code ASCII de "A"
affiche ce code ASCII sur ton écran texte
Tu récupère la valeur de départ de AL et avec un ET FFh tu gardes
le quartet de poids faible et tu recommence la conversion

à plus

François

0 à F = 1 quartet
1 octet = 2 quartets
pour afficher un quartet :
Avatar de parki2013 parki2013 - Membre du Club https://www.developpez.com
le 07/11/2013 à 19:48
Merci pour tes conseils Forthman,
je vais revoir tout ça.
Avatar de parki2013 parki2013 - Membre du Club https://www.developpez.com
le 07/11/2013 à 21:33
voici les modifs que j'ai réalisé sur tes conseils Forthman;
(j'ai gardé le principe du stockage de [bx] dans un buffer avant de l'afficher)

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
org 256

%define Num	10	
%define SegIvt      0
%define NbreInt	16	
%define total	Num+NbreInt

%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

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

section .text

push word SegIvt
pop es			;es pointe sur l'IVT 
push 0B800h
pop fs			;fs pointe sur ram vga texte

mov ax,03h
int 10h			;mode VGA texte 80*25 16 couleurs

mov ax,3
mov [Y],ax		;debut affichage en Y=3

mov ax,Num
mov [NumINT],ax

boucle:

mov ax,[Y]
mov bx,160
mul bx	
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	;zéro terminal ?
	jz VGA3_fin

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

VGA3_fin:
	popad
	ret


AFFval:
	pushad

	;bits 15 à 12
	push bx
	shr bh,4
	xchg bh,bl	
	call cherche
	pop bx
		
	;bits 11 à 8
	push bx
	and bh,00001111b
	xchg bh,bl
	call cherche
	pop bx

	;bits 7 à 4
	push bx
	shr bl,4
	call cherche
	pop bx

	;bit 3 à 0
	and bl,00001111b
	call cherche

	popad
	ret

cherche:
		add bl,48
		cmp bl,58
		jc stocke
		add bl,7
stocke:
		mov [di],bl
		inc di
		ret
vive l'asm !

 
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.