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
PUSH ESI
CALL run
POP ESI
POP EDI
POP ESI
POP EDX
POP ECX
POP EBX
MOV ESP, EBP
POP EBP
RET
run:
PUSH EBP
MOV EBP, ESP
MOV ESI, [EBP+8]
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
POP EBP
RET
treat:
PUSH EBP
MOV EBP, ESP
MOV ESI, [EBP+8]
PUSH EAX
MOVZX EAX, WORD[EBX+ESI*2]
XOR AX, DI
MOV [EDX+EDI], AL
INC EDI
POP EAX
MOV ESP, EBP
POP EBP
RET