Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
 Аватар для Timoshka_
2 / 2 / 0
Регистрация: 30.10.2010
Сообщений: 84
TASM

Примитивный калькулятор (+,-,*,/)

07.12.2011, 15:42. Показов 4088. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пишу программу, которая бы могла решать примеры типа 2+4 и 8-5 числа ввожу с клавиатуры, и знак тоже, а выводит ноль всегда почему то, не подскажете в чем может быть моя ошибка?

исходник
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
title prog
page ,132
stk segment para stack 'stack'
db 64 dup('stack')
stk ends
 
data segment para public 'data'
sob db ' Vvedite primer dlya resheniya: $'
 
ch1 db 2 dup (0)
ch2 db 2 dup(0)
rex db 2 dup(0)
inbuf db 2,0,2 dup (?)
simb db 2 dup (?)
s db 2 dup (?)
data ends
 
code segment para public 'code'
main proc far
assume cs:code,ds:data,ss:stk
push ax
mov ax,data
mov ds,ax
 
lea dx,sob
mov ah,9
int 21h
 
; вводим и преобразуем 1 число
 
mov ax,0a00h 
mov dx,offset inbuf 
int 21h 
mov al,inbuf
sub al,30h
mov ch1,al
 
lea dx,s
mov ah,1
int 21h
 
cmp al,'+'
jne min; если + вводим число 2
 
mov ax,0a00h 
mov dx,offset inbuf 
int 21h 
mov al,inbuf
sub al,30h
mov ch2,al
 
mov al,ch1
add al,ch2
aaa
mov rex,al
 
lea dx,pr1
mov ah,9
int 21h
 
mov al,rex
add al,30h
int 29h
jmp exit
 
min:
 
mov ax,0a00h 
mov dx,offset inbuf 
int 21h 
mov al,inbuf
sub al,30h
mov ch2,al
 
mov al,ch1
sub al,ch2
;aas
mov rex,al
 
lea dx,pr1
mov ah,9
int 21h
 
mov al,rex
add al,30h
int 29h
jmp exit
 
exit:
pop ax
mov ax,0c07h ; ожидаем нажатие клавиши
int 21h 
mov ax,4c00h
int 21h
 
main endp
code ends
End main
Добавлено через 31 секунду
вроде бы элементарное вычитание и сложение а не получается(
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.12.2011, 15:42
Ответы с готовыми решениями:

Примитивный калькулятор (два операнда и операции сложения, вычитания, умножения и деления)
Здравствуйте. Вот пытался написать примитивный калькулятор, которые будет +, -, * и / два значения, введенные пользователём, только есть...

Написать примитивный целочисленный калькулятор
Написать примитивный целочисленный калькулятор ! Не работает , поэтому 0. Double x, y, z; z = 0; string...

учусь на курсах. надо сделать примитивный калькулятор. написала html, script. кнопка calculate не работает. как привязать скрипт? может, в нем ошибка?
<html> <head> <title>Calculator </title> <var x= parseInt(document.getElementById("inputA").z); var y=...

1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
07.12.2011, 20:36
Слеплено на коленке. Ногами не пинать.
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
.386c
.model small
.stack  256
 
_text_  segment para public use16
    assume  cs:_text_, ds:_data_, es:_data_
    
start:  
    mov ax, seg _data_
    mov ds, ax
    mov es, ax
again:
; Вывод на экран 
    mov     ah, 09h
    lea     dx, req
    int     21h
; ввод строки
    mov ah, 0Ah
    lea dx, inpbuf
    int 21h
;;
; prepare for convert
    mov si, dx
    lodsw
    mov di, si
    shr ax, 8
    test    al,al
    jz  error
    mov cx, ax
;   inc cx
    xor edx,edx
    mov di, offset ops
; cx - str length, DS:SI = ES:DI -> string buf
; edx = 
;-------------
_loop:  lodsb
    cmp al, 30h ; isdigit? "0" ?
    jb  no_dig
    cmp al, 39h ;  "9" ?
    ja  no_dig
        lea edx,[edx*4+edx]
        lea edx,[edx*2+eax-'0']
    jmp next
no_dig: 
    xor bx, bx
@@6:    cmp al, ops[bx]
    jz  @@7
    cmp ops[bx],0
    jz  error
    inc bx
    jmp @@6
@@7:    mov byte ptr sign+1,al
    shl bx,1
    mov bx, word ptr op_tabl[bx]    
    call    bx  ;word ptr op_tabl[bx]   
next:   loop    _loop
    call    output
    jmp again
op_tabl:dw  offset _ignore_
    dw  offset _plus_
    dw  offset _minus_
    dw  offset _div_
    dw  offset _mul_
_ignore_:           ; ничего не делаем, пропускаем символ(пробел)
    ret
; сложение
_plus_: mov [op1],dx
    mov [_do_what_], offset do_add
    xor edx,edx
    ret
; вычитание
_minus_: 
    mov [op1],dx
    mov [_do_what_], offset do_sub
    xor edx,edx
    ret
; деление
_div_:
    mov [op1],dx
    mov [_do_what_], offset do_div
    xor edx,edx
    ret
; умножение
_mul_:
    mov [op1],dx
    mov [_do_what_], offset do_mul
    xor edx,edx
    ret
error:
    mov dx, offset errmsg
    mov     ah, 09h
    int 21h
    call    reset
    jmp again
 
do_div:
    movzx   eax, [op1]
    xor edx, edx
    div [op2]
    ret
 
do_mul:
    movzx   eax, [op1]
    mul [op2]
    ret
 
do_add: 
    movzx   eax, [op1]
    add ax, [op2]
    ret
do_sub:
    movzx   eax, [op1]
    sub ax, [op2]
    ret
 
output: mov [op2], dx
    call    [_do_what_]
    mov [res], ax
 
; новая строка
    mov     ah, 09h
    lea     dx, crlf
    int     21h
; выводим первый операнд
    mov ax, [op1]
    call    out_dec
    cmp [_do_what_], offset _ignore_
    jz  @@8
; выводим действие
    mov     ah, 09h
    lea     dx, sign
    int     21h
; выводим второй операнд
    mov ax, [op2]
    call    out_dec
    mov     ah, 09h
    lea     dx, eql
    int     21h
; выводим результат
    mov ax, [res]
    call    out_dec
 
; Вывод на экран 
@@8:    mov     ah, 09h
    mov     dx, offset crlf
    int     21h
@@9:    call    reset
    ret
;   jmp again
; выход
    mov ah, 4Ch
    int 21h
 
reset:  mov [op1], 0
    mov [op2], 0
    mov [res], 0
    mov [_do_what_], offset _ignore_
    ret
;
out_dec:
        mov     bx, 10
        xor cx,cx
        std
@@out_dec:
        xor     dx, dx
        div     bx
        or  dx, 30h            ;остаток от деления
        push    dx
        inc     cx                ;считаем кол-во цифр
        or  ax, ax             ;пока не 0 - делим
        jnz     @@out_dec
@@3:    mov ah, 02
        pop dx
        int 21h
        loop    @@3
        cld
        ret
 
_text_  ends
_data_  segment para use16 
;.data
_do_what_   dw offset _ignore_
op1 dw  0
op2 dw  0
res dw  0
sign    db  ' _ $'
eql     db  ' = $'
errmsg  db  07h,'TYPO @input. Try arain.',0Dh,0Ah,0
crlf    db  0Dh,0Ah,'$'
req db  'Enter string:$'
ops db  ' +-/*',0
inpbuf  db  255         ; наибольшая длина строки
len db  ?                       ; сюда вернется настоящая длина
buf db  255 dup(?)              ; тут будет то, что ввели
_data_  ends
    end start
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.12.2011, 20:36
Помогаю со студенческими работами здесь

Примитивный запрос
Здравствуйте, товарищи форумчане! Уже 1 ночи, а я все пилю свою рабочую проблему. Собственно тема сабжа следующая. Есть простая база с...

Примитивный интерфейс к си++
Привет, парни. Поступило задание, сделать игрушку крестики нолики с примитивным интерфейсом. В консоли код более менее написал, работает, а...

Примитивный ГИС
Подскажите, как проще всего работать с простым ГИС-ом в несколько уровней под этим чудом - QT буду крайне благодарен за примеры

Примитивный расчёт ЗП
День добрый. Платформа 8.3. Занимаюсь по виде-урокам Евгения Гилёва. И у меня малюсенькая проблема с расчётом ЗП прогульщику. Прогулял он...

Примитивный аудио проигрователь
Доброго времени суток! Необходим маленький проигрователь на форме с кнопкой старт/пауза, перемотка (ползунком), визуально(шкала) место...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru