CPU 386
GLOBAL decode
EXTERN afficherInt32
SECTION .text
decode:
PUSH EBP
MOV EBP, ESP
PUSH EBX
PUSH ECX
PUSH EDX
PUSH ESI
PUSH EDI
MOV EBX, [EBP+8] ; t[]
MOV EDX, [EBP+12] ; s[]
MOVZX ECX, WORD[EBP+16] ; n
MOV ESI, 1
MOV EDI, 0
run:
SHL ESI,1
CMP ESI, ECX
JGE end
PUSH ESI
CALL run
POP ESI
INC ESI
CMP ESI, ECX
JGE end1
PUSH ESI
CALL run
POP ESI
end1:
DEC ESI
end:
SHR ESI,1
PUSH ESI
CALL treat
POP ESI
RET
POP EDI
POP ESI
POP EDX
POP ECX
POP EBX
POP EBP
RET
treat:
PUSH EBP
MOV EBP, ESP
MOV ESI, [EBP+8]
PUSH EAX
MOVZX EAX, WORD[EBX+ESI*2-2]
XOR EAX, EDI
MOV [EDX+EDI], AL
INC EDI
PUSHA
PUSH EDI
CALL afficherInt32
POP EDI
POPA
POP EAX
POP EBP
RET