Программа-калькулятор: сложение и вычитание шестнадцатеричных чисел
Оглавление


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