0100 CALL 0171 запрос - фильтр первого числа
0103 MOV BH,AL копия первого числа в BH
0105 MOV AH,08
0107 INT 21
0109 CMP AL,2B запрос - фильтр знака операции: "+" или "-"
010B JZ 0111 2Bh - "+"
010D CMP AL,2D 2Dh - "-"
010F JNZ 0107
0111 MOV AH,02
0113 MOV DL,AL
0115 INT 21
0117 MOV DH,DL копия знака операции в DH
0119 CALL 0171 запрос - фильтр второго числа
011C MOV BL,AL копия второго числа в BL
011E MOV AH,08
0120 INT 21
0122 CMP AL,3D запрос - фильтр знака "=" (3Dh)
0124 JNZ 0120
0126 MOV DL,AL
0128 MOV AH,02
012A INT 21
012C CMP DH,2D проверка знака операции
012F JZ 013A если "-" переход на 13Ah
0131 ADD BL,BH сложение чисел
0133 CMP BL,0F проверка результата операции
0136 JLE 0157 если один разряд то 157h
0138 JA 014E если два разряда то 14Eh
013A CMP BH,BL проверка для вычитания
013C JB 0144 переход, если BH < BL
013E SUB BH,BL если BH > BL, то BH - BL
0140 MOV BL,BH
0142 JMP 0157 переход на печать
0144 SUB BL,BH
0146 MOV AH,02 если результат отрицательный,
0148 MOV DL,2D то добавить в строку знак "-"
014A INT 21
014C JMP 0157 переход на печать
014E MOV DL,BL
0150 MOV CL,04
0152 SHR DL,CL
0154 CALL 0161
0157 MOV DL,BL
0159 AND DL,0F
015C CALL 0161
015F INT 20
===========================
0161 ADD DL,30 Процедура: "вывод символа на экран"
0164 CMP DL,3A Код символа передается в регистре DL
0167 JL 016E
0169 ADD DL,07
016C MOV AH,02
016E INT 21
0170 RET
===========================
0171 PUSH DX Процедура: "ввод-фильтр hex-цифры"
0172 MOV AH,08 Введенное число возвращается в регистре AL
0174 INT 21
0176 CMP AL,30
0178 JB 0174
017A CMP AL,46
017C JA 0174
017E CMP AL,3A
0180 JB 0186
0182 CMP AL,41
0184 JB 0174
0186 MOV AH,02
0188 MOV DL,AL
018A INT 21
018C SUB AL,30
018E CMP AL,09
0190 JLE 0194
0192 SUB AL,07
0194 POP DX
0195 RET
|