Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
criscros
0 / 0 / 0
Регистрация: 08.04.2016
Сообщений: 2
1

Калькулятор выполняющий действия + – / (в неупакованном BCD-формате)

11.05.2016, 22:33. Просмотров 309. Ответов 0
Метки нет (Все метки)

Помогите пожалуйста с задачей.

Напишите программу – калькулятор выполняющую действия + – /, внутреннее представление чисел – неупакованный BCD-формат.



Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
model  SMALL
        stack  100h
 
        dataseg
InpM1    db 0Ah,0Dh,'Введите первое слагаемое (не более 10 цифр):$'
InpM2    db 0Ah,0Dh,'Введите второе слагаемое (не более 10 цифр):$'
InpCh   db 0Ah, 0Dh, 'Input 1 - summ or 2 - sub or 3- div', '$'
Buf1    db 11
Len1    db ?
Opnd1   db 12 dup(?)
Buf2    db 11
Len2    db ?
Opnd2   db 12 dup(?)
Opnd3   db 12 dup(?)
ResM    db 0Ah, 0dh, 'RESULT:', '$'
Res     db 12 dup(?), '$'
AskM    db 0Ah, 0dh
        db '"ESC" for end'
        db '$'
        codeseg
        startupcode
BEGIN:
;Ввод первого слагаемого
B1:     lea     DX, InpM1
        mov     AH, 09h
        int     21h
        lea     DX, Buf1
        mov     AH, 0Ah
        int     21h
        cmp     Len1, 0
        je      B1
 
;проверка 0-9 и очистка старш.тетрады
        lea     BX, Opnd1
        xor     CX, CX
        mov     CL, Len1
        xor     SI, SI
T1:     mov     AL, [BX][SI]
        cmp     AL, '0'
        jb      B1            ; ошибка
        cmp     AL, '9'
        ja      B1            ; ошибка
        and     AL, 0Fh
        mov     [BX][SI], AL
        inc     SI
        loop    T1
 
;прижать к правому краю
        mov     CL, Len1
        cmp     CL, 10
        je      E1
        mov     DI, 9
        mov     SI, CX
        dec     SI
P1:     mov     AL, [BX][SI]
        mov     [BX][DI], AL
        dec     DI
        dec     SI
        loop    P1
        
;обнулить лишнее
        xor     DI, DI
        mov     CL, 10
        sub     CL, Len1
N1:     mov     byte ptr [BX][DI], 0
        inc     DI
        loop    N1
E1:     
;Ввод второго слагаемого
B2:     lea     DX, InpM2
        mov     AH, 09h
        int     21h
        lea     DX, Buf2
        mov     AH, 0Ah
        int     21h
        cmp     Len2, 0
        je      B2
 
;проверка 0-9 и очистка старш.тетрады
        lea     BX, Opnd2
        xor     CX, CX
        mov     CL, Len2
        xor     SI, SI
T2:     mov     AL, [BX][SI]
        cmp     AL, '0'
        jb      B2         ; ошибка
        cmp     AL, '9'
        ja      B2         ; ошибка
        and     AL, 0Fh
        mov     [BX][SI], AL
        inc     SI
        loop    T2
 
;прижать к правому краю
        mov     CL, Len2
        cmp     CL, 10
        je      E2  
        mov     DI, 9
        mov     SI, CX
        dec     SI
P2:     mov     AL, [BX][SI]
        mov     [BX][DI], AL
        dec     DI
        dec     SI
        loop    P2
        
;обнулить лишнее
        xor     DI, DI
        mov     CL, 10
        sub     CL, Len2
N2:     mov     byte ptr [BX][DI], 0
        inc     DI
        loop    N2
        
E2:
 
ChSum:
cmp al, '1'
jne ChSub
 
SUM:    
;Сложение
        mov     CX, 10
        clc
        lea     SI, Opnd1+9
        lea     DI, Opnd2+9
        lea     BX, Res+10
A1:     mov     AL, [SI]
        adc     AL, [DI]
        aaa
        mov     [BX], AL
        dec     SI
        dec     DI
        dec     BX
        loop    A1
        mov     AL, 0
        adc     AL, 0
        mov     [BX], AL
 
ChSub:  
    cmp al, '2'; 2
    jne ChDiv
SUB_:
    mov AH, [SI];
    sub AH, 30h;
    shl AH, 4;
    add AH, [SI+1];
    sub AH, 30h;
    
    sub byte ptr [DI], 30h;
    shl byte ptr [DI], 4;
    sub byte ptr [DI+1], 30h;
    sub AH, [DI];
    sub AH, [DI+1];
    mov AL, AH;
    das
    mov AH, AL;
    shr AL, 4;
    mov [BX], AL;
    inc SI;
    inc DI;
    inc BX;
    loop SUB_
 
    and AH, 1111b;
    mov [BX], AH;
 
ChDiv:  
    cmp al, '2'; 2
    jne EXIT  ; Сделать выход
 
;Деление
 
 
;Преобразование результата в ASCII
        mov     CX, 11
A2:     or      byte ptr [BX], 30h
        inc     BX
        loop    A2
;Вывод результата
        lea     DX, ResM
        mov     AH, 09h
        int     21h
        
EXIT:
;Запрос на продолжение работы
        lea     DX, AskM
        mov     AH, 09h
        int     21h
        mov     AH, 08h
        int     21h
        cmp     AL, 27  ;ESC
        je      QUIT
        jmp     BEGIN
 
;Конец работы
QUIT:   exitcode  0
        end
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2016, 22:33
Ответы с готовыми решениями:

Калькулятор, выполняющий действия + – (в упакованном BCD-формате)
Напишите программу – калькулятор выполняющую действия + –, внутреннее представление чисел –...

masm32. сложить величины 394 и 12, представленные в неупакованном формате.
возникла проблема со сложением чисел в неупакованном формате... сложить величины 394 и 12,...

Вычитание чисел в формате BCD
Введите два десятичных числа разрядностью не более 10 цифр, выполните преобразование в...

Определение данных разрядностью 8, 32 бит в формате bcd
Как в программе будет выглядеть определение данных разрядностью 8, 32 бит в формате bcd?

Действия с BCD числами (ввод, деление, вывод)
Всем здрасти! Помогите с составлением программы. Вот текст задачи: задать с клавиатуры два BCD...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2016, 22:33

BCD числа в упакованном и неупакованном формате
Здравствуйте! Помогите разобраться с BCD числами. Пусть дано число 123456h в упакованном BCD...

Создать калькулятор, выполняющий все арифметические действия
Создать калькулятор, выполняющий все арифметические действия. Добавить кнопки для вычисления...

Реализовать калькулятор, выполняющий все арифметические действия и вычисляющий основные элементарные функции
Задание: Сделать Калькулятор, выполняющий все арифметические действия и вычисляющий основные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru