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 RET