Voici le code que Mr Dor a mis sur l'ecole virtuelle :
(a revoir pour l'examen)
.model small
CR equ 13
LF equ 10
BEL equ 07
.stack 100h
.data
buffer db 32,0,32 DUP('0')
bin1 db 32 DUP('0')
bin2 db 32 dup('0')
result db 32 dup('0')
mesres db LF,LF,'AND : ',CR,LF,LF
reshex db 8 DUP('0'),'$'
mess1 db LF,'Entrez la premiŠre chaine binaire (max 32 bits)',CR,LF,'$'
mess2 db LF,'Entrez la seconde chaine binaire (max 32 bits)',CR,LF,'$'
erreur db LF,BEL,'Attention, la chaine entr‚e contiend des codes non valides',CR,LF,LF,'$'
hex db '0123456789ABCDEF'
.code
affich MACRO chaine
mov ah,09h
mov dx,offset chaine
int 21h
ENDM
lclav MACRO buf,bin,erre
local veri,ok
mov ah,0Ah
mov dx,offset buf
int 21h
mov cl,buf+1
mov ch,0
mov di,offset bin
add di,31
mov si,dx
inc si
add si,cx
veri: mov al,[si]
cmp al,'0'
je ok
cmp al,'1'
je ok
affich erreur
jmp erre
ok: mov [di],al
dec si
dec di
loop veri
ENDM
start: mov ax,@data
mov ds,ax
rmes1: affich mess1
lclav buffer,bin1,rmes1
rmes2: affich mess2
lclav buffer,bin2,rmes2
mov ax,offset bin1
push ax
mov ax,offset bin2
push ax
mov ax,offset result
push ax
call proand
mov ax,offset result
push ax
mov ax,offset reshex
push ax
mov ax,offset hex
push ax
call convhex
affich mesres
fin: mov ah,4ch
int 21h
proand PROC near
push bp
mov bp,sp
mov si,[bp+8]
mov bx,[bp+6]
mov di,[bp+4]
mov cx,32
suite: mov al,[si]
and al,[bx]
mov [di],al
inc si
inc bx
inc di
loop suite
pop bp
ret 6
ENDP
convhex PROC near
push bp
mov bp,sp
mov si,[bp+8]
mov di,[bp+6]
mov bx,[bp+4]
add si,31
add di,7
mov cx,8
boucl2: push cx
mov cx,4
mov al,0
boucl1: cmp byte ptr [si],'0'
je rotal
add al,1
rotal: ror al,1
dec si
loop boucl1
REPT 4
rol al,1
ENDM
xlat
mov [di],al
pop cx
dec di
loop boucl2
pop bp
ret 4
ENDP
END start