Bonjour tout le monde je suis en train d'apprendre le langage assembleur et je suis fasse à un problème que je trouve assez bizarre!
Je vous explique mon programme :
  • Je crée une procédure qui sauvegarde l'adresse ip et cs de la routine de l’interruption 4
  • Je crée une routine qui affiche un message d'erreur s'il y a une erreur d'overflow
  • Je crée une procédure qui affiche un message
  • Je crée une procédure qui fait la somme
  • Je crée une procédure qui restaure l'état de la routine de l'int 4

Quand je lance le main (start) et en mettant x et y à FFFF pour provoquer un overflow en les sommant, le programme se bloque.
Voici le programme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Pile SEGMENT stack 
	dw 256 dup(?)
	jeton label word 
Pile ENDS 
 
Data SEGMENT 
	ancien_ip dw ?
	ancien_cs dw ?
	msg_1 db "LE PROCESSEUR SIGNAL UN ETAT D'OVERFLOW$"
	msg_2 db "OPERATION EFFECTUE SANS ERREUR D'OVERFLOW$"
	x dw 0FFFFh
	y dw 0FFFFh
Data ENDS 
 
Code SEGMENT
	assume cs:Code, ds:Data, ss:Pile
 
	ReadAdd proc near 
		mov ah, 35h
		mov al, 04h
		int 21h
		mov ancien_ip, bx
		mov ancien_cs, es
		ret
	ReadAdd ENDP 
 
	Routine:
	    mov ax, Data
		mov ds, ax
		lea dx, msg_1
        mov ah, 09h
        int 21h
		mov ah, 01h
		int 21h
		iret
 
	Deroute proc near
		mov ax, Data
		mov ds, ax
		lea dx, Routine
		mov al, 04h
		mov ah, 25h
	    int 21h
		ret
	Deroute ENDP
 
	PrintMsg2 proc near
		mov ax, Data
		mov ds, ax
		lea dx, msg_2
		mov ah, 09h
		int 21h
		ret
	PrintMsg2 ENDP
 
	Somme proc near
		mov ax, Data
		mov ds, ax
		mov ax, x
		mov bx, y
		add ax,bx
		ret
	Somme ENDP
 
	Restore proc near
		mov dx, ancien_ip
		mov bx, ancien_cs
		mov ds, bx
		mov al, 04h
		mov ah, 25h
		int 21h
		ret
	Restore ENDP
 
	debut :mov ax,Data
		mov ds,ax
		mov ax,Pile
		mov ss,ax
		mov sp,jeton
 
		call ReadAdd
		call Deroute
		call Somme
 
		int 04h  
		jo msg
		call PrintMsg2
	msg:call Restore
		mov ax, 4c00h ; exit to operating system.
		int 21h
 
ENDS	
END debut
Merci d'avance!