public override void AssembleNew(Assembler.Assembler aAssembler, object aMethodInfo) { XS.ClearDirectionFlag(); XS.Set(XSRegisters.EDI, XSRegisters.EBP, sourceDisplacement: 0xC); //address XS.Set(XSRegisters.ECX, XSRegisters.EBP, sourceDisplacement: 0x8); //length // set EAX to value of fill (zero) XS.Xor(XSRegisters.EAX, XSRegisters.EAX); XS.ShiftRight(XSRegisters.ECX, 1); XS.Jump(Assembler.x86.ConditionalTestEnum.NotBelow, ".step2"); XS.StoreByteInString(); XS.Label(".step2"); XS.ShiftRight(XSRegisters.ECX, 1); XS.Jump(Assembler.x86.ConditionalTestEnum.NotBelow, ".step3"); XS.StoreWordInString(); XS.Label(".step3"); new Assembler.x86.Stos { Size = 32, Prefixes = Assembler.x86.InstructionPrefixes.Repeat }; }
public override void AssembleNew(Assembler aAssembler, object aMethodInfo) { XS.ClearDirectionFlag(); XS.Set(EDI, EBP, sourceDisplacement: 0xC); //address XS.Set(ECX, EBP, sourceDisplacement: 0x8); //length //XS.Set(EAX, 0x1000); //XS.Compare(EAX, ECX); //XS.Jump(x86.ConditionalTestEnum.GreaterThan, ".AfterSizeCheck"); //XS.Exchange(BX, BX); //XS.Label(".AfterSizeCheck"); // set EAX to value of fill (zero) XS.Xor(EAX, EAX); XS.ShiftRight(ECX, 1); XS.Jump(x86.ConditionalTestEnum.NotBelow, ".step2"); XS.StoreByteInString(); XS.Label(".step2"); XS.ShiftRight(ECX, 1); XS.Jump(x86.ConditionalTestEnum.NotBelow, ".step3"); XS.StoreWordInString(); XS.Label(".step3"); new x86.Stos { Size = 32, Prefixes = x86.InstructionPrefixes.Repeat }; }