var
a, b, c, f, w: Smallint;
z: Smallint;
N: Smallint;
begin
N := 0;
z := 0;
a := StrToInt(lbed_A.Text);
b := StrToInt(lbed_B.Text);
c := StrToInt(lbed_C.Text);
f := StrToInt(lbed_F.Text);
w := StrToInt(lbed_W.Text);
asm
XOR DX, DX
MOV AX, w
IDIV c // w/c
SBB AX, b // w/c - b
MOV z, AX // z := w/c - b
CMP z, 0 // if z
JL @lbNOT
MOV AX, b
ADC AX, c // b+c
XOR DX, DX
IDIV w // (b+c)/w
MOV BX, AX
MOV AX, c
IMUL AX, w // c*w
ADC BX, AX // (b+c)/w+c*w
MOV AX, a
ADC AX, b // a+b
SBB AX, BX // (a+b) - (b+c)/w+c*w
MOV n, AX // N = (a+b) - (b+c)/w+c*w
JMP @EXIT
@lbNOT:
MOV AX, a
SBB AX, b // a-b
IMUL c // (a-b)*c
MOV BX, a
ADC BX, b // (a+b)
IDIV BX // (a-b)*c/(a+b)
ADC AX, f // f+(a-b)*c/(a+b)
ADC AX, a // f+(a-b)*c/(a+b)+a
MOV N, AX // N := f+(a-b)*c/(a+b)+a
@EXIT:
end;
edResultA.Text := IntToStr(N);
z := (w div c)-b;
if z < 0
then N := Round(f + (((a - b) * c) div (a + b)) + a)
else N := Round((a + b) - (b + c) div w + c * w);
edResultD.Text := IntToStr(N);
end;