CPU 386
GLOBAL decode
SECTION .text
treat:
PUSH EAX
MOV EAX, [EBX+ESI*2-2]
XOR AX, AX
MOV [EDX+ESI-1], AL
POP EAX
RET
decode:
PUSH EBP
MOV EBP, ESP
PUSH EBX
PUSH ECX
PUSH EDX
PUSH ESI
MOVZX EBX, WORD[EBP+8] ; t[]
MOVZX EDX, BYTE[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
end:
DEC ESI
SAR ESI,1
CALL treat
RET
POP ESI
POP EDX
POP ECX
POP EBX
POP EBP