; Файл asm _
; (2 * d - 96 / a) / (34 / b - a + 1)
.MODEL Large,C
.data
Extrn Si_A:WORD, Si_B:WORD, Si_D:WORD, SiNumerator:DWORD, SiDenominator:WORD, SiResult:DWORD
Extrn Ui_A:WORD, Ui_B:WORD, Ui_D:WORD, UiNumerator:DWORD, UiDenominator:WORD, UiResult:DWORD
Extrn Sc_A:BYTE, Sc_B:BYTE, Sc_D:BYTE, ScNumerator:WORD, ScDenominator:BYTE, ScResult:WORD
Extrn Uc_A:BYTE, Uc_B:BYTE, Uc_D:BYTE, UcNumerator:WORD, UcDenominator:BYTE, UcResult:WORD
.code
Public LabSi
LabSi proc far
; ------- Числитель -------
mov ax, Si_D ; <AX> = D
mov bx, 2 ; <BX> = 2
imul bx ; <DX:AX> = D * 2
mov cx, dx ; SAVE TO CX
mov bx, ax ; SAVE TO BX
mov ax, 96 ; <AX> = 96
cwd ; <DX:AX> = 96
idiv WORD PTR Si_A ; <AX> = 96 / A
cwd ; <DX:AX> — Result
sub bx, ax
sbb cx, 0
sub cx, dx ; <CX:BX> = D * 2 - 96 / A
mov WORD PTR SiNumerator, bx
mov WORD PTR SiNumerator + 2, cx
; ------- Знаменатель -------
mov ax, 34 ; <AX> = 34
cwd ; <DX:AX> = 34
idiv WORD PTR Si_B ; <AX> = 34 / B
sub ax, Si_A ; <AX> = 34 / B - A
inc ax ; <AX> = 34 / B - A + 1
mov SiDenominator, ax
; ------- Числитель/Знаменатель -------
mov ax, WORD PTR SiNumerator
mov dx, WORD PTR SiNumerator + 2
mov bx, SiDenominator
idiv bx ; <AX> = Numerator / Denominator
cwd ; <DX:AX> = Numerator / Denominator
mov WORD PTR SiResult, ax
mov WORD PTR SiResult + 2, dx
ret
LabSi endp
Public LabUi
LabUi proc far
; ------- Числитель -------
mov ax, Ui_D ; <AX> = D
mov bx, 2 ; <BX> = 2
mul bx ; <DX:AX> = D * 2
mov cx, dx ; SAVE TO CX
mov bx, ax ; SAVE TO BX
mov ax, 96 ; <AX> = 96
xor dx, dx ; <DX:AX> = 96
div WORD PTR Ui_A ; <AX> = 96 / A
xor dx, dx ; <DX:AX> = 96 / A
sub bx, ax
sbb cx, 0
sub cx, dx ; <CX:BX> = D * 2 - 96 / A
mov WORD PTR UiNumerator, bx
mov WORD PTR UiNumerator + 2, cx
; ------- Знаменатель -------
mov ax, 34 ; <AX> = 34
xor dx, dx ; <DX:AX> = 34
div WORD PTR Ui_B ; <AX> = 34 / B
sub ax, Ui_A ; <AX> = 34 / B - A
inc ax ; <AX> = 34 / B - A + 1
mov UiDenominator, ax
; ------- Числитель/Знаменатель -------
mov ax, WORD PTR UiNumerator
mov dx, WORD PTR UiNumerator + 2
mov bx, UiDenominator
idiv bx ; <AX> = Numerator / Denominator1
xor dx, dx ; <DX:AX> = Numerator / Denominator
mov WORD PTR UiResult, ax
mov WORD PTR UiResult + 2, dx
ret
LabUi endp
Public LabSc
LabSc proc far
; ------- Числитель -------
mov al, Sc_D ; <AL> = D
mov bl, 2 ; <BL> = 2
imul bl ; <AX> = D * 2
mov bx, ax ; SAVE TO BX
mov ax, 96 ; <AX> = 96
idiv Sc_A ; <AL> = 96 / A
cbw ; <AX> = 96 / A
sub bx, ax ; <BX> = D * 2 - 96 / A
mov ScNumerator, bx
; ------- Знаменатель -------
mov ax, 34 ; <AX> = 34
idiv Sc_B ; <AL> = 34 / B
sub al, Sc_A ; <AL> = 34 / B - A
sbb ah, 0 ; <AX> = 34 / B - A
inc ax ; <AX> = 34 / B - A + 1
mov ScDenominator, al
; ------- Числитель/Знаменатель -------
mov al, ScDenominator ; <AL> = Denominator
cbw ; <AX> = Denominator
mov bx, ax ; <BX> = Denominator
mov ax, ScNumerator ; <AX> = Numerator
cwd ; <DX:AX> = Numerator
idiv bx ; <AX> = Numerator / Denominator
mov ScResult, ax
ret
LabSc endp
Public LabUc
LabUc proc far
; ------- Числитель -------
mov al, Uc_D ; <AL> = D
mov bl, 2 ; <BL> = 2
mul bl ; <AX> = D * 2
mov bx, ax ; SAVE TO BX
mov ax, 96 ; <AX> = 96
xor dx, dx ; <DX:AX> = 96
mov cl, Uc_A ; <CL> = A
xor ch, ch ; <CX> = A
div cx ; <AX> = 96 / A
sub bx, ax ; <BX> = D * 2 - 96 / A
mov UcNumerator, bx
; ------- Знаменатель -------
mov ax, 34 ; <AX> = 34
div Uc_B ; <AL> = 34 / B
sub al, Uc_A ; <AL> = 34 / B - A
sbb ah, 0 ; <AX> = 34 / B - A
inc ax ; <AX> = 34 / B - A + 1
mov UcDenominator, al
; ------- Числитель/Знаменатель -------
mov bl, UcDenominator
xor bh, bh
mov ax, UcNumerator
xor dx, dx
idiv bx ; <AX> = Numerator / Denominator2
mov UcResult, ax
ret
LabUc endp
end