Форум   Статьи   Новости   Файлы   Bugtraq   Сниффер   Друзья   О Клубе
  , 16:19   #1
Новичок
 
Регистрация: 23.05.2008
Сообщений: 1

Репутация: 0 / 0
По умолчанию Калькулятор

Задали написать программу калькулятор для обработки 32 битных целых знаковых чисел. Операции только + - и *. Числа вводятся с клавиатуры.
Я не могу сделать перевод чисел в BCD формат из ASCII кода и полученный результат из BCD в ASCII. Помогите пожалуйста.
Я вот начала делать и запуталась:
TITLE CALC
PAGE 60,132

DATASG SEGMENT PARA 'Data'
NAMEPAR LABEL WORD
MAXLEN DB 20
ACTLEN DB ?
NAMEFLD DW 20 DUP (' ')
OUTSTR DB 'Out', '$'

WORD1A DW ?
WORD1B DW ?
WORD1 DD ?
WORD2A DW ?
WORD2B DW ?
WORD2 DD ?
REZ1A DW ?
REZ1B DW ?
OPER DB ?
DATASG ENDS

STACKSG SEGMENT PARA 'Stack'
DB 8 DUP(?)
STACKSG ENDS

CODESG SEGMENT PARA 'Code'
BEGIN PROC FAR
ASSUME CS:CODESG, DSATASG, SS:STACKSG
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATASG
MOV DS,AX

CALL CLR
CALL VVOD
CALL PEREVOD

CMP OPER,2BH
JE A10
JMP CON

A10: CALL SUMMA
JMP A20

A20: CALL PEREVOD
CALL OBRPEREVOD
CALL VYVOD

CON: RET
BEGIN ENDP

PEREVOD PROC NEAR ;????????????????? Перевод введеных чисел в BCD формат
SUB AX,AX
MOV AX,NAMEFLD
XOR AX,3030H
SHL AL,04H
SHR AX,04H
PEREVOD ENDP

OBRPEREVOD PROC NEAR ;??????????????????? Перевод результата в ASCII код


SUMMA PROC NEAR
MOV AX,WORD1B
ADD AX,WORD2B
DAA
MOV REZ1B,AX
MOV AX,WORD1A
ADC AX,WORD2A
DAA
MOV REZ1A,AX
RET
SUMMA ENDP

CLR PROC NEAR
MOV AX,0600H ;Function prokrutki screen
MOV BH,07H ;Color (for ch/b)
MOV CX,0000H ;Ot 00,00
MOV DX,184FH o 24,79
INT 10H ;Vyzov BIOS
CLR ENDP

CURS PROC NEAR
MOV AH,02H ;Function ustanovki cursora
MOV BH,00H
MOV DH,01H
MOV DL,01H
INT 10H

CURS ENDP

VVOD PROC NEAR
MOV AH,0AH
LEA DX,NAMEPAR
INT 21H
RET
VVOD ENDP

VYVOD PROC NEAR
MOV AH,09
LEA DX,OUTSTR
INT 21H
RET
VYVOD ENDP

CODESG ENDS
END BEGIN
 
Пользователь вне форума    
Наши Спонсоры
  , 15:30   #2
Новичок
 
Регистрация: 14.12.2017
Сообщений: 16

Репутация: 0 / 0
По умолчанию

#include<iostream>
int main() {
setlocale( LC_ALL, "Rus");
double da, db, dc; char op;
std::cout << "Введите а: ";
std::cin >> da;
std::cout << "Введите операцию (-;+;*;/): ";
std::cin >> op;
std::cout << "Введите b: ";
std::cin >> db;
switch ( op)
{
case '-': dc = da - db; break;
case '+': dc = da + db; break;
case '*': dc = da * db; break;
case '/': dc = da / db; break;
default: std::cout << "Неизвестная операция: " << op; return 0;
}
std::cout << "Результат: " << da << op << db << " = " << dc << std::endl;
return 0;
}
 
Пользователь вне форума    
 

 

Часовой пояс GMT +2
Powered by vBulletin® 3.x.x Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.

Copyright © 2008 - 2013 «HPC» Реклама на сайте Правила Форума Пользовательское соглашение Работа на сайте
При копировании материалов ставьте ссылку на источник
Все материалы представлены только в ознакомительных целях, администрация за их использование ответственности не несет.