Программа-калькулятор
From AsIsWiki
Форум |
Сложение и вычитание шестнадцатеричных чисел
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
Форум |