-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinverser2.asm
86 lines (50 loc) · 1.99 KB
/
inverser2.asm
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
; l'idee de cet algorithme est d'inverser une chaine de caractere
;d'abord l'utiliseur entre un caractere et le mp le stocke dans la stack
;ensuite en connaissant l'adresse debut et fin de la chaine (si, di) situe dans le stack
;le mp prend caractere par caractere depuis l'adresse de di pour afficher la chaine inverse
; par lyamani diaeddine (dommage ca a l'air de petite taille )
name "inverser chaine"
org 100h ; debuter de l'adresse 100h
jmp start
retour db 0dh, 0ah, '$' ; declarer le retour a la ligne
start:
mov si, sp ; adresse de debut de la chaine
mov cx,0 ; compteur de caracteres
mov ax,0
lire:
cmp al,0dh ; si le caractere est retour ligne alors jump vers suiv
je suiv
mov ah, 1 ; lire caractere
int 21h
cmp al,8
je si_retour
mov ah,0
push ax ; stocker le caractere dans la pile
add cx,2 ; puisque on stock sur 16 bits , la difference entre 2 adresses sera 2
jmp lire
jmp suiv
si_retour: ; si l'utilisateur efface
pop ax ; passer a l'adresse precedente du stack
sub cx,2
mov ah, 02h ; pour afficher le caractere
mov dl, 20h ; remplacer le caractere par espace
int 21h
mov dl, 08h ; retour pour deplacer le curseur avant
int 21h
jmp lire
suiv: ;; determiner l'adresse de fin de la chaine dans la pile
mov di, si
sub cx,2
sub di, cx
mov ah, 9
mov dx, offset retour ;; pour afficher le retour a la ligne
int 21h
boucle:
mov bl,[di] ; le contenu de la case ou dl pointe sera dans bl
mov ah,2
mov dl, bl
int 21h ; afficher le caractere
add di,2 ; augmenter le pointeur de 2 , diminuer cpt de 2
sub cx,2
cmp cx,0
jne boucle