Код:
;****************************************************
;ђҐиЁвм бЁб⥬г га ў*Ґ*Ё©
; / A+(B-C)*D, Ґб«Ё 0<=C<2
;Y =|
; A+B/C
; C ¬Ґ*пҐвбп ®в Cn ¤® Ck c и Ј®¬ DELC
;****************************************************
DSEG SEGMENT
; Ёб室*лҐ ¤ **лҐ - * з «®
TVA db '‚ўҐ¤ЁвҐ Ђ:$'
TVB db '‚ўҐ¤ЁвҐ B:$'
TVD db '‚ўҐ¤ЁвҐ D:$'
TVCn db '‚ўҐ¤ЁвҐ CN:$'
TVCk db '‚ўҐ¤ЁвҐ CK:$'
TVDELC db '‚ўҐ¤ЁвҐ и Ј ‘:$'
C dw ?
A dw ?
B dw ?
D dw ?
Cn dw ?
Ck dw ?
DELC dw ?
TPA db 'A=$'
TPB db 'B=$'
TPD db 'D=$'
TPCn db 'Cn=$'
TPCk db 'Ck=$'
TPDELC db 'и Ј=$'
TPY db 'Y=$'
TPC db 'C=$'
; Ёб室*лҐ ¤ **лҐ - Є®*Ґж
Y dw ?
User_String db 10,11 dup (?)
Text10 db '‘ва®Є б«ЁиЄ®¬ ¤«Ё** п',10,13,'$'
Text20 db '—Ёб«® ў*Ґ ¤®ЇгбвЁ¬®Ј® ¤Ё Ї §®* ',10,13,'$'
Text30 db 'ЌҐ¤®ЇгбвЁ¬л© бЁ¬ў®« - '
Symv db ' ',10,13,'$'
Text40 db 'Џ®ўв®аЁвҐ ўў®¤',10,13,'$'
New_Line db 10,13,'$'
Ish db '?б室*лҐ ¤ **лҐ: ',10,13,'$'
Buffer db 6 dup (?),'$'
Otw db 'ђҐ§г«мв в : ',10,13,'$'
Pr1 db ' $'
DSEG ENDS
Stacks segment
dw 100 dup (?)
Stacks ends
Codes segment
MAIN PROC far
Assume CS:codes, DS:dseg, SS:stacks
Mov AX,Dseg
Mov DS,AX
; Ё*¤ЁўЁ¤г «м* п з бвм Їа®Ја ¬¬л - * з «®
;============================================
LEA DX, TVA
CALL PRT
CALL VVOD
Mov A,AX
CALL NL; ЇҐаҐў®¤ бва®ЄЁ
;============================================
LEA DX, TVB
CALL PRT
CALL VVOD
Mov B,AX
CALL NL
;============================================
LEA DX, TVD
CALL PRT
CALL VVOD
Mov D,AX
CALL NL
;============================================
LEA DX, TVCn
CALL PRT
CALL VVOD
Mov Cn,AX
CALL NL
;===========================================
LEA DX, TVCk
CALL PRT
CALL VVOD
Mov Ck,AX
CALL NL
;==========================================
LEA DX, TVDELC
CALL PRT
CALL VVOD
Mov DELC,AX
CALL NL
;===========================================
LEA DX, Ish
CALL PRT
;+++++++++++++++++++++++++++++++++++++++++++
LEA DX, TPA
CALL PRT
Mov AX,A
CALL PRN
CALL NL
;+++++++++++++++++++++++++++++++++++++++++++
LEA DX, TPB
CALL PRT
Mov AX,B
CALL PRN
CALL NL
;+++++++++++++++++++++++++++++++++++++++++++
LEA DX, TPD
CALL PRT
Mov AX,D
CALL PRN
CALL NL
;++++++++++++++++++++++++++++++++++++++++++
LEA DX, TPCn
CALL PRT
Mov AX, Cn
CALL PRN
CALL NL
;++++++++++++++++++++++++++++++++++++++++++
LEA DX, TPCk
CALL PRT
Mov AX, Ck
CALL PRN
CALL NL
;+++++++++++++++++++++++++++++++++++++++++
LEA DX, TPDELC
CALL PRT
Mov AX, DELC
CALL PRN
CALL NL
;+++++++++++++++++++++++++++++++++++++++++
LEA DX, Otw
CALL PRT
Mov AX, Cn
Mov C, Ax; C:=CN
;=========================================
BL3:
CMP C,2
JG BL6
;=========================================
BL4:
CMP C,0
JGE BL7
JMP BL6
;=========================================
BL5:
MOV AX,B
SUB AX,C
IMUL D
MOV BX, A
SUB BX,AX
MOV Y,AX
;=========================================
BL6:
CWD
MOV AX,B
IDIV C
ADD AX,A
MOV Y,AX
;=========================================
BL7:
LEA DX,TPY
CALL PRT
MOV AX,Y
CALL PRN
CALL probel
LEA DX,TPC
CALL PRT
MOV AX,C
CALL PRN
CALL NL
;Є ‘ ¤®Ў ў«пҐ¬ и Ј
MOV AX,C
ADD AX,DELC
;Ў«®Є 9 - Їа®ўҐаЄ ‘<=CK
MOV C,AX
CMP AX,Ck
JG FIN
JMP BL3
FIN:
Mov AH,4CH
Mov DS,AX
; Ё*¤ЁўЁ¤г «м* п з бвм Їа®Ја ¬¬л - Є®*Ґж
MAIN ENDP
;********************************************
CONVBA PROC
push CX
push DX
push SI
push AX
Mov CX,6
C10:Mov byte PTR [BX],' '
Inc BX
Loop C10
Mov SI,10
OR AX,AX
JNS C20
NEG AX
C20:xor DX,DX
Div SI
Add DX,30h
Dec BX
Mov [BX],DL
OR AX,AX
JNZ C20
POP AX
OR AX,AX
JNS C30
Dec BX
Mov byte PTR [BX],'-'
C30:POP SI
POP DX
POP CX
RET
CONVBA endp
;********************************************
ReadKeys PROC
push AX
LEA DX,User_String
Mov AH,0AH
Int 21h
Sub CH,CH
Mov CL,User_String+1
Add DX,2
POP AX
RET
ReadKeys ENDP
;********************************************
VVOD PROC
Inp:CALL ReadKeys
Mov BX,DX
CALL ASCII_BIN
JNC Valid
CMP DI,00FFH
JNE Inv_Char
OR AX,AX
JNZ Range_Er
LEA DX,Text10
Mov AH,09h
Int 21h
JMP Povtor
Range_Er:LEA DX,Text20
Mov AH,09h
Int 21h
JMP Povtor
Inv_Char:LEA DX,Text30
Mov AL,[DI]
Mov Symv,AL
Mov AH,09h
Int 21h
Povtor:LEA DX,Text40
Mov AH,09h
Int 21h
JMP Inp
Valid:
RET
VVOD ENDP
;********************************************
ASCII_BIN PROC
push BX
push CX
Sub AX,AX
Sub DX,DX
Mov DI,00FFH
CMP CX,7
JG No_Good
Blanks:CMP byte PTR[BX],' '
JNE Chk_Neg
Inc BX
Loop Blanks
Chk_Neg:CMP byte PTR[BX],'-'
JNE Chk_Pos
Inc BX
Dec CX
CALL CONV_AB
JC Thru
CMP AX,32768
JA No_Good
Neg AX
JS Good
Chk_Pos:CMP byte PTR[BX],'+'
JNE Go_Conv
Inc BX
Dec CX
Go_Conv:CALL CONV_AB
JC Thru
CMP AX,32767
JA No_Good
Good:CLC
JNC Thru
No_Good:STC
Thru:POP CX
POP BX
RET
ASCII_BIN ENDP
;********************************************
CONV_AB PROC
push BP
push BX
push SI
Mov BP,BX
Sub BX,BX
Chk_Pt:CMP DX,0
JNZ Range
CMP byte PTR DS:[BP],'.'
JNE Range
Dec CX
Mov DX,CX
JZ End_Conv
Inc BP
Range:CMP byte PTR DS:[BP],'0'
JB Non_Dig
CMP byte PTR DS:[BP],'9'
JBE Digit
Non_Dig:Mov DI,BP
STC
JC End_Conv
Digit:Mov SI,10
push DX
MUL SI
POP DX
Mov BL,DS:[BP]
And BX,0FH
Add AX,BX
JC End_Conv
Inc BP
LOOP Chk_Pt
CLC
End_Conv:POP SI
POP BX
POP BP
RET
CONV_AB Endp
prt proc
; ў ॣЁбвॠdx еа *Ёвбп ¤аҐб * з « ⥪бв Є®в®ал© *г¦*® * ЇҐз в вм
push ax
mov ah,09h
int 21h
pop ax
ret
prt endp
prn proc
; ў ॣЁбвॠax еа *Ёвбп 楫®Ґ зЁб«® Є®в®а®Ґ *г¦*® * ЇҐз в вм
push bx
push dx
push ax
lea bx,buffer
call convba
mov dx,bx
mov ah,09h
int 21h
pop ax
pop dx
pop bx
ret
prn endp
NL proc
push dx
lea dx,NEW_LINE
CALL PRT
pop dx
ret
NL endp
PROBEL proc
push dx
lea dx,pr1
CALL PRT
pop dx
ret
PROBEL endp
CODES ENDS
END MAIN