CPU 386
GLOBAL decode
SECTION .text
treat:
PUSH EAX
DEC ESI
MOVZX EAX, WORD[EBX+ESI*2]
XOR EAX, ESI
MOV [EDX+ESI], AL
INC ESI
POP EAX
RET
decode:
PUSH EBP
MOV EBP, ESP
PUSH EBX
PUSH ECX
PUSH EDX
PUSH ESI
MOV EBX, [EBP+8] ; t[]
MOV EDX, [EBP+12] ; s[]
MOVZX ECX, WORD[EBP+16] ; n
MOV ESI, 1
PUSH ESI
run:
POP ESI
SAL ESI,1
CMP ESI, ECX
JGE end
PUSH ESI
CALL run
POP ESI
INC ESI
CMP ESI, ECX
JGE end
PUSH ESI
CALL run
POP ESI
end:
DEC ESI
SAR ESI,1
PUSH ESI
CALL treat
POP ESI
RET
POP ESI
POP EDX
POP ECX
POP EBX
POP EBP
RET