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:
CMP EDI, ECX
JGE exit
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
JMP run
exit:
POP EDI
POP ESI
POP EDX
POP ECX
POP EBX
MOV ESP, EBP
POP EBP
RET
treat:
PUSH EBP
MOV EBP, ESP
MOV ESI, [EBP+8]
PUSH EAX
MOVZX EAX, WORD[EBX+ESI*2-2]
;PUSHA
;PUSH EDI
;CALL afficherInt32
;POP EDI
;POPA
XOR EAX, EDI
MOV [EDX+EDI], AL
INC EDI
POP EAX
MOV ESP, EBP
POP EBP
RET