il s'agit d'un programme qui lit un nombre tappé au clavier et qui stocke le résultat dans une variable N1 (la lecture s'arrete qd le caractere tappé n'est pas un chiffre)

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
 
assume CS:Code, DS:Data
Data Segment
	N1 db ?
Data Ends
 
Code segment
main:	mov AX,Data
	Mov DS,AX
	Mov N1,0
lecture: mov AH,1 	; saisie
	int 21h 	; le caractere lu arrive dans AL
	Cmp AL, "0"
	JB fin
	Cmp AL,"9"
	JA fin
	Sub AL,"0" 	; sinon le chiffre= code ASCII-ASCII(0)
	SHL N1,1 	; et N1 <- 10*N1 + AL
	Mov BL,N1
	SHL BL,1
	SHL BL,1
	Add N1,BL
	Add N1,AL
	jmp lecture
fin: 	mov ah,4Ch
	int 21h
Code Ends
End main
j'ai tout compris à part cette portion là

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
                SHL N1,1 	; et N1 <- 10*N1 + AL
	Mov BL,N1
	SHL BL,1
	SHL BL,1
	Add N1,BL
	Add N1,AL
Pourquoi on a eu recours à BL ? je ne vois pas l'utilité de stocker N1 dans BL ensuite décaller ses bits deux fois vers la gauche... moi j'aurais programmé N1<-10*N1+AL comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
SHL N1
MOV N1,AL
ADD N1,AL
je sais que c'est faux mais je n'arrive pas à comprendre pourquoi

Help please !