public override void Build(X86Assembler m) { m.i86(); // A straight-forward factorial function + a driver program to ensure the return value // is USE'd. m.Mov(cx, 0x100); m.Push(cx); m.Call("factorial"); m.Add(Registers.sp, 2); m.Mov(m.WordPtr(0x0100), ax); m.Ret(); m.Proc("factorial"); m.Push(bp); m.Mov(bp, sp); m.Mov(ax, m.WordPtr(bp, 4)); m.Dec(ax); m.Jz("base_case"); m.Push(ax); m.Call("factorial"); m.Inc(sp); m.Inc(sp); m.Mov(dx, m.WordPtr(bp, 4)); m.Imul(dx); m.Jmp("done"); m.Label("base_case"); m.Mov(ax, 1); m.Label("done"); m.Pop(bp); m.Ret(); m.Endp("factorial"); }