Конвертация температуры из Fahrenheit в Celsius и обратно - Assembler/TASM
Формулировка задачи:
Когда делаю компиляцию говорит, что есть одна ошибка. Можете помочь найти эту ошибку?
Вот код :
DATA SEGMENT T DB ? RES DB 10 DUP ('$') MSG1 DB "ENTER TEMPERATURE in CELCIUS OR IN FAHRENHEIT (ONLY IN 2 DIGITS) : $" MSG2 DB 10,13,"CHOOSE F OR C : $" MSG3 DB 10,13,"CONVERTED IS (TEMPERATURE) : $" DATA ENDS CODE SEGMENT ASSUME DS: DATA,CS: CODE START: MOV AX,DATA MOV DS,AX LEA DX,MSG1 MOV AH,9 INT 21H MOV AH,1 INT 21H SUB AL,30H MOV AH,0 MOV BL,10 MUL BL ; AL*10 BX*AX В AX РЕЗУЛЬТАТ MOV BL,AL ; РЕЗУЛЬТАТ В BL MOV AH,1 INT 21H SUB AL,30H MOV AH,0 ADD AL,BL LEA DX,MSG2 MOV AH,9 ; MESAJ2: CHOOSE F OR C: INT 21H MOV AH,1 INT 21H CMP AL,F JE FAHRENHEIT CMP AL,C JE CELSIUS FAHRENHEINT: MOV T,AL ; В AX ЕСТЬ TEMPERATURA IN CELCIUS MOV DL,9 ; F=(C*9/5)+32 MUL DL ; DL*AX В AX TEMPERATURA IN CELSIUS REZULTA (C*9) MOV BL,5 DIV BL ; (C*9/5) MOV AH,0 ADD AL,32 ; F=(C*9/5)+32 LEA SI,RES CALL HEX2DEC LEA DX,MSG3 ; CONVERTED FAHRENHEIT TEMPERATURE MOV AH,9 INT 21H LEA DX,RES MOV AH,9 ; РЕЗУЛЬТАТ INT 21H MOV AH,4CH INT 21H CODE ENDS CELSIUS: MOV T,AL ; В AX ЕСТЬ TEMPERATURA IN FAHRENHEIT MOV AH,0 ADD AL,32 MOV DL,5 MUL DL MOV BL,9 DIV BL ; C =((F+32)*5)/9 LEA SI,RES CALL HEX2DEC LEA DX,MSG3 MOV AH,9 INT 21H LEA DX,RES MOV AH,9 ; REZULTATUL CONVERTIRI INT 21H MOV AH,4CH INT 21H CODE ENDS HEX2DEC PROC NEAR MOV CX,0 MOV BX,10 LOOP1: MOV DX,0 DIV BX ADD DL,30H PUSH DX INC CX ; CX=CX+1; CMP AX,9 JG LOOP1 ; IF AX>9 LOOP1 ADD AL,30H MOV [SI],AL ; RES IN AL LOOP2: POP AX INC SI ; SI=SI+1 MOV [SI],AL LOOP LOOP2 RET HEX2DEC ENDP END START
Решение задачи: «Конвертация температуры из Fahrenheit в Celsius и обратно»
textual
Листинг программы
DATA SEGMENT T DB ? RES DB 10 DUP ('$') MSG1 DB "ENTER TEMPERATURE in CELCIUS OR IN FAHRENHEIT (ONLY IN 2 DIGITS) : $" MSG2 DB 10,13,"CHOOSE F OR C : $" MSG3 DB 10,13,"CONVERTED IS (TEMPERATURE) : $" DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX LEA DX,MSG1 MOV AH,9 ;MESAJ1:ENTER TEMPERATURE (ONLY IN 2 DIGITS) INT 21H MOV AH,1 ;читаем из клавиатуры INT 21H SUB AL,30H ; вводимые числа в ASCII надо делать вычитание из 30h(0) чтобы возвращать начальное значение вводимого ; числа например 5 мы видим это так 35H и когда вычитаем 30H получим 5 MOV AH,0 ; очищаем регистр AH MOV BL,10 MUL BL ; AL*10 BX*AX в AX будет результат MOV BL,AL ; результат в BL MOV AH,1 ; читаем из клавиатуры INT 21H SUB AL,30H ; возвращаем в начальное значения MOV AH,0 ADD AL,BL LEA DX,MSG2 MOV AH,9 ; MESAJ2:CHOOSE F OR C: INT 21H MOV AH,1 ; читаем из клавиатуры INT 21H CMP AL,'F' JE FAHRENHEIT ; IF F go to fahrenheit CMP AL,'C' JE CELSIUS ; IF С go to CELSIUS FAHRENHEIT: MOV T,AL ; в AX у нас температура в CELSIUS MOV DL,9 ; F=(C*9/5)+32 MUL DL ; DL*AX в AX у нас температура в CELSIUS (C*9) MOV BL,5 ; в BL есть 5 DIV BL ; ax(c*9)/bl MOV AH,0 ; (C*9)/5) ADD AL,32 ; + 32 LEA SI,RES ; для инициализации res в si CALL HEX2DEC ;вызываем HEX2DEC LEA DX,MSG3 ;CONVERTED FAHRENHEIT TEMPERATURE MOV AH,9 ; display result INT 21H LEA DX,RES MOV AH,9 ;display RES INT 21H MOV AH,4CH INT 21H CELSIUS: MOV T,AL ;в AX у нас температура в FAHRENHEIT MOV AH,0 ADD AL,32 MOV DL,5 MUL DL MOV BL,9 DIV BL ;C=((F+32)*5)/9 LEA SI,RES CALL HEX2DEC LEA DX,MSG3 MOV AH,9 INT 21H LEA DX,RES MOV AH,9 ;RESULT INT 21H MOV AH,4CH INT 21H HEX2DEC PROC NEAR MOV CX,0 MOV BX,10 LOOP1: MOV DX,0 DIV BX ADD DL,30H PUSH DX INC CX ;CX=CX+1; CMP AX,9 JG LOOP1 ;IF AX>9 LOOP1 ADD AL,30H MOV [SI],AL ;VARIABILA RES IN AL LOOP2: POP AX INC SI ;SI=SI+1 MOV [SI],AL LOOP LOOP2 RET HEX2DEC ENDP END START CODE ENDS
Объяснение кода листинга программы
- Ввод температуры в градусах Цельсия или Фаренгейта с клавиатуры.
- Преобразование введенного числа из ASCII в десятичное число.
- Преобразование температуры из градусов Цельсия в градусы Фаренгейта (для этого используется формула F=(C*9/5)+32).
- Преобразование температуры из градусов Фаренгейта в градусы Цельсия (для этого используется формула C=((F+32)*5)/9).
- Вывод результата на экран.
- Завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д