Öåëü: îçíàêîìèòüñÿ ñ êîìàíäàìè àðèôìåòè÷åñêèõ îïåðàöèé, ââîäîì äàííûõ ñ êëàâèàòóðû è âûâîäîì äàííûõ íà ýêðàí.
Çàäàíèå: íàïèñàòü ïðîãðàììó ââîäà ñ êëàâèàòóðû äâóõ ÷èñåë â 9-ðè÷íîé ñèñòåìå ñ÷èñëåíèÿ ðàçìåðîì ñ ñëîâî, âûïîëíåíèÿ íàä íèìè äåëåíèÿ è âûâîäà ðåçóëüòàòà â èñõîäíîé ñèñòåìå ñ÷èñëåíèÿ. Ïðîãðàììà äîëæíà ïðåäóñìàòðèâàòü êîíòðîëü ââîäèìîé èíôîðìàöèè, êîíòðîëü äèàïàçîíà ÷èñåë è ðåçóëüòàòà îïåðàöèè (ïåðåïîëíåíèå, íåâîçìîæíîñòü äåëåíèÿ).
Ïðîãðàììà:
;-----------ËÀÁÎÐÀÒÎÐÍÀß ÐÀÁÎÒÀ ¹3
.MODEL SMALL
.STACK 100H
.186
.DATA
S1 DB 'ÂÂÅÄÈÒÅ ÄÅËÈÌÎÅ Â ÄÅÂßÒÈÐÈ×ÍÎÉ ÑÈÑÒÅÌÅ'
DB ' Ñ×ÈÑËÅÍÈß (ÎÒ -48848 ÄÎ 1Î8806): ',10,13,'$'
S2 DB 'ÂÂÅÄÈÒÅ ÄÅËÈÒÅËÜ Â ÄÅÂßÒÈÐÈ×ÍÎÉ ÑÈÑÒÅÌÅ'
DB ' Ñ×ÈÑËÅÍÈß (ÎÒ -48848 ÄÎ 1Î8806): ',10,13,'$'
S3 DB 'ÍÅÂÅÐÍÀß ÇÀÏÈÑÜ ×ÈÑËÀ  ÄÅÂßÒÈÐÈ×ÍÎÉ'
DB ' ÑÈÑÒÅÌÅ Ñ×ÈÑËÅÍÈß ÈÇ ÇÀÄÀÍÍÎÃÎ ÄÈÀÏÀÇÎÍÀ.','$'
S4 DB 'ÄÅËÅÍÈÅ ÍÅÂÎÇÌÎÆÍÎ: ÄÅËÈÒÅËÜ ÐÀÂÅÍ ÍÓËÞ.','$'
S5 DB 'ÄÅËÅÍÈÅ ÍÅÂÎÇÌÎÆÍÎ: ÄÅËÈÒÅËÜ ÁÎËÜØÅ ÄÅËÈÌÎÃÎ.','$'
S6 DB 'ÎÑÒÀÒÎÊ: ',10,13,'$'
S7 DB '×ÀÑÒÍÎÅ: ',10,13,'$'
L DB '48848' ;ÌÈÍÈÌÀËÜÍÎÅ ×ÈÑËÎ
H DB '108806' ;ÌÀÊÑÈÌÀËÜÍÎÅ ×ÈÑËÎ
SX DB 12 DUP('x') ;ÄÅËÈÌÎÅ
SY DB 12 DUP('y') ;ÄÅËÈÒÅËÜ
SZ DB 8 DUP('0'),'$' ;×ÀÑÒÍÎÅ
.CODE
BEGIN: MOV AX, @DATA
MOV DS, AX
;-----------Î×ÈÑÒÊÀ ÁÓÔÅÐÀ ÊËÀÂÈÀÒÓÐÛ
START: CLI ;ÇÀÏÐÅÒ ÏÐÅÐÛÂÀÍÈÉ
SUB AX, AX
MOV ES, AX
MOV AL, ES:[41AH]
MOV ES:[41CH], AL
STI ;ÐÀÇÐÅØÅÍÈÅ ÏÐÅÐÛÂÀÍÈÉ
;-----------Î×ÈÑÒÊÀ ÝÊÐÀÍÀ
CLD
MOV AX, 0B800H
MOV ES, AX
MOV DI, 0
MOV AL, 32
MOV AH, 7
MOV CX, 2000
REP STOSW
;-----------ÓÑÒÀÍÎÂÊÀ ÊÓÐÑÎÐÀ Â ËÅÂÛÉ ÂÅÐÕÍÈÉ ÓÃÎË ÝÊÐÀÍÀ
MOV AH, 2 ;ÍÎÌÅÐ ÔÓÍÊÖÈÈ
MOV BH, 0 ;ÍÎÌÅÐ ÑÒÐÀÍÈÖÛ
MOV DH, 0 ;ÑÒÐÎÊÀ
MOV DL, 0 ;ÑÒÎËÁÅÖ
INT 10H ;ÏÎÇÈÖÈÎÍÈÐÎÂÀÍÈÅ ÊÓÐÑÎÐÀ
;-----------ÂÛÂÎÄ ÏÐÈÃËÀØÅÍÈß ÂÂÎÄÀ ÄÅËÈÌÎÃÎ
LEA DX, S1
MOV AH, 9
INT 21H
;-----------ÂÂÎÄ ÄÅËÈÌÎÃÎ
LEA DX, SX
MOV BX, DX
MOV [BX], BYTE PTR 9 ;ÏÐÅÄÏÎËÀÃÀÅÌÀß ÄËÈÍÀ ÑÒÐÎÊÈ
MOV AH, 0AH
INT 21H
;-----------ÓÑÒÀÍÎÂÊÀ ÊÓÐÑÎÐÀ
MOV AH, 2 ;ÍÎÌÅÐ ÔÓÍÊÖÈÈ
MOV BH, 0 ;ÍÎÌÅÐ ÑÒÐÀÍÈÖÛ
MOV DH, 2 ;ÑÒÐÎÊÀ
MOV DL, 0 ;ÑÒÎËÁÅÖ
INT 10H ;ÏÎÇÈÖÈÎÍÈÐÎÂÀÍÈÅ ÊÓÐÑÎÐÀ
;-----------ÏÐÎÂÅÐÊÀ ÏÐÀÂÈËÜÍÎÑÒÈ ÂÂÎÄÀ ÄÅËÈÌÎÃÎ
LEA DX, SX
MOV BX, DX
CALL CONTROL ;ÏÐÎÂÅÐÊÀ ÏÐÀÂÈËÜÍÎÑÒÈ ÂÂÎÄÀ
MOV AL, [BX]
CMP AL, '0'
JE ZERO1 ;×ÈÑËÎ ÂÂÅÄÅÍÎ ÍÅÂÅÐÍÎ
JMP NEAR PTR DELITEL
ZERO1: LEA DX, S3
MOV AH, 9
INT 21H
;===========ÎÆÈÄÀÍÈÅ ÍÀÆÀÒÈß ÊËÀÂÈØÈ
MOV AH, 7
INT 21H
JMP NEAR PTR START
;-----------ÂÛÂÎÄ ÏÐÈÃËÀØÅÍÈß ÂÂÎÄÀ ÄÅËÈÒÅËß
DELITEL: LEA DX, S2
MOV AH, 9
INT 21H
;-----------ÂÂÎÄ ÄÅËÈÒÅËß
INPUT: LEA DX, SY
MOV BX, DX
MOV [BX], BYTE PTR 9 ;ÏÐÅÄÏÎËÀÃÀÅÌÀß ÄËÈÍÀ ÑÒÐÎÊÈ
MOV AH, 0AH
INT 21H
;-----------ÓÑÒÀÍÎÂÊÀ ÊÓÐÑÎÐÀ
MOV AH, 2 ;ÍÎÌÅÐ ÔÓÍÊÖÈÈ
MOV BH, 0 ;ÍÎÌÅÐ ÑÒÐÀÍÈÖÛ
MOV DH, 4 ;ÑÒÐÎÊÀ
MOV DL, 0 ;ÑÒÎËÁÅÖ
INT 10H ;ÏÎÇÈÖÈÎÍÈÐÎÂÀÍÈÅ ÊÓÐÑÎÐÀ
;-----------ÏÐÎÂÅÐÊÀ ÏÐÀÂÈËÜÍÎÑÒÈ ÂÂÎÄÀ ÄÅËÈÒÅËß
LEA DX, SY
MOV BX, DX
CALL CONTROL ;ÏÐÎÂÅÐÊÀ ÏÐÀÂÈËÜÍÎÑÒÈ ÂÂÎÄÀ
CMP [BX], BYTE PTR '0'
JE ZERO2 ;×ÈÑËÎ ÂÂÅÄÅÍÎ ÍÅÂÅÐÍÎ
JMP NEAR PTR OK
ZERO2: LEA DX, S3
MOV AH, 9
INT 21H
;===========ÎÆÈÄÀÍÈÅ ÍÀÆÀÒÈß ÊËÀÂÈØÈ
MOV AH, 7
INT 21H
;-----------Î×ÈÑÒÊÀ ÁÓÔÅÐÀ ÊËÀÂÈÀÒÓÐÛ
CLI
SUB AX, AX
MOV ES, AX
MOV AL, ES:[41AH]
MOV ES:[41CH], AL
STI
;-----------Î×ÈÑÒÊÀ ÝÊÐÀÍÀ
CLD
MOV AX, 0B800H
MOV ES, AX
MOV DI, 480
MOV AL, 32
MOV AH, 7
MOV CX, 480
REP STOSW
;-----------ÓÑÒÀÍÎÂÊÀ ÊÓÐÑÎÐÀ
MOV AH, 2 ;ÍÎÌÅÐ ÔÓÍÊÖÈÈ
MOV BH, 0 ;ÍÎÌÅÐ ÑÒÐÀÍÈÖÛ
MOV DH, 3 ;ÑÒÐÎÊÀ
MOV DL, 0 ;ÑÒÎËÁÅÖ
INT 10H ;ÏÎÇÈÖÈÎÍÈÐÎÂÀÍÈÅ ÊÓÐÑÎÐÀ
JMP NEAR PTR INPUT
;-----------ÓÑÒÀÍÎÂÊÀ ÊÓÐÑÎÐÀ
OK: MOV AH, 2 ;ÍÎÌÅÐ ÔÓÍÊÖÈÈ
MOV BH, 0 ;ÍÎÌÅÐ ÑÒÐÀÍÈÖÛ
MOV DH, 4 ;ÑÒÐÎÊÀ
MOV DL, 0 ;ÑÒÎËÁÅÖ
INT 10H ;ÏÎÇÈÖÈÎÍÈÐÎÂÀÍÈÅ ÊÓÐÑÎÐÀ
;-----------ÏÐÎÂÅÐÊÀ ÂÎÇÌÎÆÍÎÑÒÈ ÄÅËÅÍÈß
LEA BX, SX
CALL CTRL0
MOV AH, [BX]
LEA BX, SY
CALL CTRL0
MOV AL, [BX]
CMP AL, '0'
JE NULL
JMP N_NULL
;-----------ÄÅËÈÒÅËÜ ÐÀÂÅÍ ÍÓËÞ
NULL: LEA DX, S4
MOV AH, 9
INT 21H
JMP NEAR PTR ENDPROG
;-----------ÄÅËÈÒÅËÜ ÍÅ ÐÀÂÅÍ ÍÓËÞ
N_NULL: CMP AH, '0'
JNE DELENIE
;-----------ÄÅËÈÌÎÅ ÐÀÂÍÎ ÍÓËÞ
LEA DX, S7
MOV AH, 9
INT 21H
LEA BX, SZ
MOV [BX], BYTE PTR '0'
INC BX
MOV [BX], BYTE PTR 10
INC BX
MOV [BX], BYTE PTR 13
INC BX
MOV [BX], BYTE PTR '$'
LEA DX, SZ
MOV AH, 9
INT 21H
LEA DX, S6
MOV AH, 9
INT 21H
LEA DX, SZ
MOV AH, 9
INT 21H
JMP NEAR PTR ENDPROG
;-----------ÄÅËÈÌÎÅ È ÄÅËÈÒÅËÜ ÍÅ ÐÀÂÍÛ ÍÓËÞ
DELENIE: LEA SI, SX
LEA DI, SY
CALL COMPARE
CMP [SI], BYTE PTR 1
JE POSSIBLE
;-----------ÄÅËÈÒÅËÜ ÁÎËÜØÅ ÄÅËÈÌÎÃÎ
LEA DX, S5
MOV AH, 9
INT 21H
JMP NEAR PTR ENDPROG
;-----------ÍÀ×ÈÍÀÅÒÑß ÄÅËÅÍÈÅ
POSSIBLE: MOV BX, 7 ;BX - ÈÍÄÅÊÑ ÄËß ×ÀÑÒÍÎÃÎ
;----------- ÑÕ - ×ÈÑËÎ ÐÀÇÐßÄΠÄÅËÈÒÅËß
AGAIN: MOV CL, SY[1] ;CX - ×ÈÑËÎ ÐÀÇÐÀÄΠÄÅËÈÒÅËß
MOV CH, 0
;-----------DI - ÍÀ ÌËÀÄØÈÉ ÐÀÇÐßÄ ÄÅËÈÒÅËß
MOV DI, CX ;DI - ÈÍÄÅÊÑ ÄËß ÄÅËÈÒÅËß
INC DI
;-----------ÓÄÀËÅÍÈÅ ÂÅÄÓÙÈÕ ÍÓËÅÉ ÄÅËÈÒÅËß
MOV SI, 2 ;SI - ÈÍÄÅÊÑ ÄËß ÄÅËÈÌÎÃÎ
MOV AL, SY[SI]
CMP AL, '-'
JNE BEFORE_C1
INC SI
DEC CX
BEFORE_C1: MOV AL, SY[SI]
CMP AL, '0'
JE SS1
JMP LBLL
SS1: INC SI
DEC CX
JMP BEFORE_C1
;-----------SI - ÍÀ ÌËÀÄØÈÉ ÐÀÇÐßÄ ÄÅËÈÌÎÃÎ
LBLL: MOV AL, SX[1]
CBW ;ÀÍ - ÄËß ÇÀÏÈÑÈ ÏÅÐÅÍÎÑÀ
MOV SI, AX
INC SI
;-----------ÍÀ×ÀËÎ ÖÈÊËÀ ÄÅËÅÍÈß
;===========ÑÐÀÂÍÅÍÈÅ ÖÈÔÐ ÐÀÇÐßÄÀ ÄÅËÈÌÎÃÎ È ÄÅËÈÒÅËß
C1: MOV AL, SX[SI]
CMP AL, SY[DI]
JAE NEXT
;===========ÖÈÔÐÀ ÄÅËÈÌÎÃÎ ÌÅÍÜØÅ ÖÈÔÐÛ ÄÅËÈÒÅËß
ADD AL, 9 ;ÇÀ¨Ì ÅÄÈÍÈÖÛ
SUB AL, SY[DI] ;ÂÛ×ÈÒÀÍÈÅ
ADD AL, '0' ;ÏÅÐÅÂÎÄ ÖÈÔÐÛ Â ÅÅ ÊÎÄ
SUB AL, AH ;ÂÛ×ÈÒÀÍÈÅ ÏÅÐÅÍÎÑÀ
MOV SX[SI], AL ;ÐÅÇÓËÜÒÀÒ - ÍÀ ÌÅÑÒÎ ÐÀÇÐßÄÀ ÄÅËÈÌÎÃÎ
MOV AH, 1 ;ÇÀÏÈÑÜ ÇÀ¨ÌÀ
JMP NEAR PTR DECREM ;ÍÀ ÊÎÍÅÖ ÖÈÊËÀ
;===========ÖÈÔÐÀ ÄÅËÈÌÎÃÎ ÁÎËÜØÅ ÖÈÔÐÛ ÄÅËÈÒÅËß
NEXT: SUB AL, SY[DI] ;ÂÛ×ÈÒÀÍÈÅ
SUB AL, AH ;ÂÛ×ÈÒÀÍÈÅ ÏÅÐÅÍÎÑÀ
MOV AH, 0 ;ÇÀ¨ÌÀ ÍÅÒ
ADD AL, '0' ;ÏÅÐÅÂÎÄ ÖÈÔÐÛ Â ÅÅ ÊÎÄ
MOV SX[SI], AL ;ÐÅÇÓËÜÒÀÒ - ÍÀ ÌÅÑÒÎ ÐÀÇÐßÄÀ ÄÅËÈÌÎÃÎ
;-----------SI, DI - ÍÀ ÁÎËÅÅ ÑÒÀÐØÈÉ ÐÀÇÐßÄ
DECREM: DEC SI
DEC DI
LOOP C1 ;ÍÀ ÍÀ×ÀËÎ ÖÈÊËÀ ÄÅËÅÍÈß
;-----------ÁÛË ËÈ ÇÀ¨Ì ÈËÈ ÍÅÒ
CMP AH, 1
JNE SRAVN
;-----------ÇÀ¨Ì ÁÛË
AGAIN1: CMP SX[SI], '0' ;ÑÐÀÂÍÅÍÈÅ ÖÈÔÐÛ ÐÀÇÐßÄÀ Ñ ÍÓ˨Ì
JE C2
DEC SX[SI]
JMP SRAVN
;-----------ÖÈÔÐÀ ÐÀÇÐßÄÀ ÄÅËÈÒÅËß ÐÀÂÍÀ ÍÓËÞ
C2: MOV SX[SI], '8'
DEC SI ;ÍÀ ÁÎËÅÅ ÑÒÀÐØÈÉ ÐÀÇÐßÄ
JMP AGAIN1 ;ÍÀ ÑÐÀÂÍÅÍÈÅ ÖÈÔÐÛ ÐÀÇÐßÄÀ Ñ ÍÓ˨Ì
;===========ÔÎÐÌÈÐÎÂÀÍÈÅ ×ÀÑÒÍÎÃÎ
;-----------ÅÑÒÜ ËÈ ÏÅÐÅÍÎÑ ÏÐÈ ÓÂÅËÈ×ÅÍÈÈ ×ÀÑÒÍÎÃÎ ÍÀ ÅÄÈÍÈÖÓ
SRAVN: CMP SZ[BX], '8'
JE PERENOS
;-----------ÏÅÐÅÍÎÑÀ ÍÅÒ
ADD SZ[BX], 1 ;ÓÂÅËÈ×ÅÍÈÅ ×ÀÑÒÍÎÃÎ ÍÀ ÅÄÈÍÈÖÓ
MOV BX, 7 ;ÂÕ - ÍÀ ÌËÀÄØÈÉ ÐÀÇÐßÄ
JMP DEL ;ÍÀ ÑÐÀÂÍÅÍÈÅ ÄÅËÈÌÎÃÎ È ÄÅËÈÒÅËß
;-----------ÏÅÐÅÍÎÑ ÅÑÒÜ
PERENOS: MOV SZ[BX], '0' ; ÄÀÍÍÛÉ ÐÀÇÐßÄ - ÍÓËÜ
DEC BX ;ÓÂÅËÈ×ÅÍÈÅ ÐÀÇÐßÄÀ
JMP SRAVN ;ÍÀ ÑÐÀÂÍÅÍÈÅ ÐÀÇÐßÄÀ Ñ "8"
;===========ÑÐÀÂÍÅÍÈÅ ÄÅËÈÌÎÃÎ È ÄÅËÈÒÅËß
DEL: LEA SI, SX
LEA DI, SY
CALL COMPARE
MOV AL, [SI]
CMP AL, 1
JNE QUIT ;ÄÅËÅÍÈÅ ÇÀÂÅÐØÅÍÎ
JMP NEAR PTR AGAIN ;ÄÅËÅÍÈÅ ÏÐÎÄÎËÆÀÅÒÑß
;-----------ÎÏÐÅÄÅËÅÍÈÅ ÇÍÀÊÀ ×ÀÑÒÍÎÃÎ
QUIT: MOV AH, SX[2]
MOV AL, SY[2]
;-----------ÂÛßÑÍÅÍÈÅ ÇÍÀÊÀ ÄÅËÈÌÎÃÎ
CMP AH, '-'
JE SX_
JMP N_SX_
;-----------ÄÅËÈÌÎÅ - ÎÒÐÈÖÀÒÅËÜÍÎÅ
SX_: CMP AH, AL ;ÑÐÀÂÍÅÍÈÅ ÇÍÀÊÀ ÄÅËÈÌÎÃÎ È ÄÅËÈÒÅß
JE OUTP ;ÍÀ ÂÛÂÎÄ ÎÑÒÀÒÊÀ
;-----------ÄÅËÈÒÅËÜ - ÏÎËÎÆÈÒÅËÜÍÛÉ
;===========ÓÄÀËÅÍÈÅ ÂÅÄÓÙÈÕ ÍÓËÅÉ Â ×ÀÑÒÍÎÌ
SY_: MOV BX, 0
SRCH: CMP SZ[BX], '0'
JE DALEE
JMP STOP
DALEE: INC BX
JMP SRCH
;-----------ÇÀÏÈÑÜ ÌÈÍÓÑÀ ÏÅÐÅÄ ÑÒÀÐØÈÌ ÐÀÇÐßÄÎÌ ×ÀÑÒÍÎÃÎ
STOP: DEC BX
MOV SZ[BX], '-'
JMP OUTP ;ÍÀ ÂÛÂÎÄ ÎÑÒÀÒÊÀ
;-----------ÄÅËÈÌÎÅ ÏÎËÎÆÈÒÅËÜÍÎÅ
N_SX_: CMP AL, '-' ;ÄÅËÈÒÅËÜ ÎÒÐÈÖÀÒÅËÜÍÛÉ?
JE SY_ ;×ÀÑÒÍÎÅ ÎÒÐÈÖÀÒÅËÜÍÎÅ
;-----------ÂÛÂÎÄ ×ÀÑÒÍÎÃÎ
;===========ÂÛÂÎÄ ÎÑÒÀÒÊÀ
;-----------ÂÛÂÎÄ ÑÒÐÎÊÈ "ÎÑÒÀÒÎÊ:"
OUTP: LEA DX, S6
MOV AH, 9
INT 21H
;ÇÀÏÈÑÜ Â ÊÎÍÅÖ ÎÑÒÀÒÊÀ ÑÈÌÂÎËÎÂ 10, 13 È "$"
MOV BH, 0
MOV BL, SX[1]
ADD BX, 2 ;ÂÕ - ÇÀ ÌËÀÄØÈÉ ÐÀÇÐßÄ
MOV SX[BX], 10
INC BX
MOV SX[BX], 13
INC BX
MOV SX[BX], '$'
;-----------ÓÄÀËÅÍÈÅ ÂÅÄÓÙÈÕ ÍÓËÅÉ ÎÑÒÀÒÊÀ
MOV AH, '0'
LEA BX, SX ;ÂÕ - ÓÊÀÇÛÂÀÅÒ ÍÀ ÎÑÒÀÒÎÊ
INC BX
INC BX
MOV AL, [BX]
CMP AL, '-'
JE MN
JMP N_MN
MN: MOV AH, '-'
INC BX
N_MN: MOV AL, [BX]
CMP AL, '0'
JE EQ1
JMP NEQ1
EQ1: INC BX
JMP N_MN
NEQ1: MOV AL, [BX]
DEC BX
CMP AL, 10
JE N_NUL
MOV [BX], AH
CMP AH, '-'
JE EQQ
JMP NEQQ
EQQ: MOV DX, BX
JMP LBL
NEQQ: INC BX
MOV AL, [BX]
CMP AL, 10
JE NUL
JMP N_NUL
NUL: DEC BX
N_NUL: MOV DX, BX
LBL: MOV AH, 9
INT 21H
;===========ÂÛÂÎÄ ×ÀÑÒÍÎÃÎ
LEA DX, S7
MOV AH, 9
INT 21H
LEA BX, SZ
Q: MOV AL, [BX]
CMP AL, '0'
JE SM3
JMP OUTPUT
SM3: INC BX
JMP Q
OUTPUT: MOV DX, BX
MOV AH, 9
INT 21H
;-----------ÂÛÕÎÄ ÈÇ ÏÐÎÃÐÀÌÌÛ
ENDPROG: MOV AH, 4CH
INT 21H
;===========ÏÐÎÖÅÄÓÐÀ CONTROL - ×ÈÑËÎ ÄÅÂßÒÈÐÈ×ÍÎÅ?
CONTROL PROC
PUSHA ;ÑÎÕÐÀÍÅÍÈÅ ÐÅÃÈÑÒÐÎÂ Â ÑÒÅÊÅ
MOV BX, DX
INC BX
MOV AL, [BX]
MOV AH, 0
MOV CX, AX
;-----------ßÂËßÅÒÑß ËÈ ÑÒÐÎÊÀ ÏÓÑÒÎÉ?
CMP AL, 0
JE ERR1 ;ßÂËßÅÒÑß
;-----------ÏÐÎÂÅÐÊÀ ÄËÈÍÛ ÑÒÐÎÊÈ
CMP AL, 6
JA ERR1 ;×ÈÑËÎ ÂÂÅÄÅÍÎ ÍÅÂÅÐÍÎ
INC BX
MOV AH, [BX]
CMP AH, '-'
JE MINUS
JMP NEAR PTR FOR1
MINUS: INC BX ;×ÈÑËÎ ÎÒÐÈÖÀÒÅËÜÍÎÅ
DEC CX
;-----------ÂÂÅÄÅÍÍÎÅ ×ÈÑËÎ ÄÅÂßÒÈÐÈ×ÍÎÅ?
FOR1: MOV AH, [BX]
CMP AH, '9'
JB N1
ERR1: JMP NEAR PTR ERROR ;×ÈÑËÎ ÂÂÅÄÅÍÎ ÍÅÂÅÐÍÎ
N1: CMP AH, '0'
JB ERR1 ;×ÈÑËÎ ÂÂÅÄÅÍÎ ÍÅÂÅÐÍÎ
INC BX
LOOP FOR1
MOV [BX], BYTE PTR '$' ;ÄËß ÂÛÂÎÄÀ ÑÒÐÎÊÈ
CMP AL, 6
JNE RETURN ;ÅÑËÈ ÄËÈÍÀ ×ÈÑËÀ ÌÅÍÜØÅ 6
MOV BX, DX
INC BX
MOV AH, 0
MOV CX, AX
INC BX
MOV AH, [BX]
CMP AH, '-'
JE M1 ;×ÈÑËÎ ÎÒÐÈÖÀÒÅËÜÍÎÅ
LEA DI, H ;×ÈÑËÎ ÏÎËÎÆÈÒÅËÜÍÎÅ
JMP FOR2
M1: INC BX
DEC CX
LEA DI, L
;ÂÕÎÄÈÒ ËÈ ×ÈÑËÎ Â ÇÀÄÀÍÍÛÉ ÄÈÀÏÀÇÎÍ?
FOR2: MOV AH, [BX]
CMP AH, [DI]
JA ERROR ;×ÈÑËÎ ÂÂÅÄÅÍÎ ÍÅÂÅÐÍÎ
JB RETURN ;×ÈÑËÎ ÂÂÅÄÅÍÎ ÏÐÀÂÈËÜÍÎ
INC BX
INC DI
LOOP FOR2
JMP RETURN
ERROR: MOV BX, DX
MOV [BX], BYTE PTR '0'
RETURN: POPA ;ÂÎÑÑÒÀÍÎÂËÅÍÈÅ ÐÅÃÈÑÒÐÎÂ
RET
CONTROL ENDP
;===========ÏÐÎÖÅÄÓÐÀ CTRL0 - ÝÒÎ ÍÓËÜ?
CTRL0 PROC
PUSHA
MOV SI, 1
MOV CL, [BX+SI]
MOV CH, 0
INC SI
MOV AL, [BX+SI]
CMP AL, '-'
JE MIN
JMP CYCLE
MIN: INC SI
DEC CX
CYCLE: MOV AL, [BX+SI]
CMP AL, '0'
JNE FINISH
INC SI
LOOP CYCLE
MOV SI, 0
MOV AL, '0'
MOV [BX+SI], AL
FINISH: POPA
RET
CTRL0 ENDP
;===========ÏÐÎÖÅÄÓÐÀ COMPARE - ÑÐÀÂÍÅÍÈÅ ÄÂÓÕ ×ÈÑÅË
COMPARE PROC
PUSHA
INC SI
INC DI
MOV AH, [SI]
MOV AL, [DI]
INC SI
INC DI
CMP BYTE PTR [SI], '-'
JE NEGAT1
JMP POZIT1
NEGAT1: DEC AH
INC SI
POZIT1: CMP BYTE PTR [DI], '-'
JE NEGAT2
JMP POZIT2
NEGAT2: DEC AL
INC DI
POZIT2: MOV BL, [SI]
CMP BL, '0'
JE SM
JMP DI0
SM: INC SI
DEC AH
JMP POZIT2
DI0: MOV BL, [DI]
CMP BL, '0'
JE SM1
JMP SRAV1
SM1: INC DI
DEC AL
JMP DI0
SRAV1: CMP AH, AL
JA ABOVE
JB BELOW
JMP EQUAL
ABOVE: LEA SI, SX
MOV [SI], BYTE PTR 1
JMP NEAR PTR END1
BELOW: LEA SI, SX
MOV [SI], BYTE PTR -1
JMP NEAR PTR END1
EQUAL: MOV CL, AL
MOV CH, 0
FOR3: MOV AH, [SI]
CMP AH, [DI]
JA ABOVE
JB BELOW
INC SI
INC DI
LOOP FOR3
JMP ABOVE
END1: POPA
RET
COMPARE ENDP
END BEGIN
18