С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 08.05.2013
Сообщений: 23

Вывод результата вычислений на экран - запутался совсем

08.05.2013, 10:41. Показов 1352. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа запрашивает 2 числа, затем какую операцию нужно сделать (+, -, : или *), затем в центре экрана выводит выражение с результатом. Например, если выбрать 1 число - "3", 2-е - "2" и операцию "+", то в центре экрана должно вывести: "3 + 2 = 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
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
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
ssg segment para stack 'stack'  
dw 32 dup(?)                        
ssg ends           
                    
 
datasg segment para 'data'          
Strg1 db 'Введите первое число:','$'
Strg2 db 'Введите второе число:','$'
menu db '1: операция +',13,10
     db '2: операция -',13,10
     db '3: операция *',13,10
     db '4: операция /',13,10,'$'
Tmp1 dw ?
Tmp2 dw ?
Tmp3 dw ? 
Out1 dw 20 dup (' ')
Out2 dw 20 dup (' ')
Pl db ' + '
R db ' = '
res dw 20 dup (' ')
ends                                
 
 
codesg segment para 'code'          
begin proc far                      
;-------------------------------------------------------------------------
assume cs:codesg,ds:datasg,ss:ssg
push ds                               
sub ax,ax                           
push ax                              
mov ax,datasg                     
mov ds,ax                           
;-------------------------------------------------------------------------
;clr scr
mov ax,0600h
mov bh,70h
mov cx,0000
mov dx,184fh
int 10h
;clr scr  2
mov ax,0600h
mov bh,2eh
mov cx,094fh
mov dx,0000
int 10h 
 
;loc white
mov ah,02
mov bh,00
mov dh,07
mov dl,00
int 10h
;white
mov ah,09
mov al,'w'
mov bh,00
mov bl,77h
mov cx,80
int 10h
;loc blue
mov ah,02
mov bh,00
mov dh,08
mov dl,00
int 10h
;blue
mov ah,09
mov al,'b'
mov bh,00
mov bl,11h
mov cx,340
int 10h
;loc blue - 2
mov ah,02
mov bh,00
mov dh,12
mov dl,60
int 10h
;blue - 2
mov ah,09
mov al,'b'
mov bh,00
mov bl,11h
mov cx,267
int 10h 
;loc red
mov ah,02
mov bh,00
mov dh,16
mov dl,00
int 10h
;red
mov ah,09
mov al,'r'
mov bh,00
mov bl,44h
mov cx,640
int 10h
;figure loc
mov ah,02
mov bh,00
mov dh,10
mov dl,20
int 10h
;figure
mov ah,09
mov al,'f'
mov bh,00
mov bl,22h
mov cx,40
int 10h
;figure loc - 2
mov ah,02
mov bh,00
mov dh,11
mov dl,20
int 10h
;figure - 2
mov ah,09
mov al,'f'
mov bh,00
mov bl,22h
mov cx,40
int 10h
;figure loc - 3
mov ah,02
mov bh,00
mov dh,12
mov dl,20
int 10h
;figure - 3
mov ah,09
mov al,'f'
mov bh,00
mov bl,22h
mov cx,1
int 10h
;figure loc - 3-2
mov ah,02
mov bh,00
mov dh,12
mov dl,59
int 10h
;figure - 3-2
mov ah,09
mov al,'f'
mov bh,00
mov bl,22h
mov cx,01
int 10h
;figure loc - 4
mov ah,02
mov bh,00
mov dh,13
mov dl,20
int 10h
;figure - 4
mov ah,09
mov al,'f'
mov bh,00
mov bl,22h
mov cx,40
int 10h
 
;1 operand
 
;loc strg1
Mov ah,02
Mov bh,00
Mov dh,00
Mov dl,00
Int 10h
;message
Mov ah,09
Lea dx,strg1
Int 21h
;vvod
Mov ah,3fh
Mov bx,00
Mov cx,20
Lea dx,out1
Int 21h
Mov tmp1,ax
                   ;loc string
                   ;mov ah,02
                   ;mov bh,00
                   ;mov dh,12
                   ;mov dl,al
                   ;int 10h
                 ;string
                 ;Mov ah,40h
                 ;Mov bx,00
                 ;Mov cx,38
                 ;Lea dx,outstr
                 ;Int 21h
 
 
;2 operand
 
;loc strg2
Mov ah,02
Mov bh,00
Mov dh,01
Mov dl,00
Int 10h
;message
Mov ah,09
Lea dx,strg2
Int 21h
;vvod
Mov ah,3fh
Mov bx,00
Mov cx,20
Lea dx,out2
Int 21h
Mov tmp2,ax
 
;operator
 
;loc strg3
Mov ah,02
Mov bh,00
Mov dh,02
Mov dl,00
Int 10h
;message
Mov ah,09
Lea dx,menu
Int 21h
;vvod
mov ah,00
int 16h
 
;uslovniy perehod
 
Cmp al,'1'
Je plus
Cmp al,'2'
Je minus
Cmp al,'3'
Je X
Cmp al,'4'
Je del
 
Plus:
;slojenie
Mov dx,out1
add dx,out2
Mov res,dx
;v al koordinata stolba
Mov ax,40
Mov dx,tmp1
Add dx,tmp2
Sub ax,dx
 
;loc string
mov ah,02
mov bh,00
mov dh,12
mov dl,al
int 10h
 
Lea dx,out1
call out_strg
Lea dx,pl
call out_strg
Lea dx,out2
call out_strg
lea dx,r
call out_strg
lea dx,res
call out_strg
int 20h
 
out_strg proc
    Mov ah,09h
    Mov bx,00
    Mov cx,20 
    Int 21h
   ret
out_strg endp
 
Minus:
Del:
X:
 
 
 
;-------------------------------------------------------------------------
ret             
begin endp      
codesg ends     
end begin
Тут в конце я попробовал в виде процедуры строку вывести, но ничего толком не вышло
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.05.2013, 10:41
Ответы с готовыми решениями:

Вывод результата вычислений в одном textbox'e
Как можно в текст боксе посчитать например выражение : X+Y+5 ?

Ввод и вывод результата вычислений в файл
Проблема в том, что надо найти K для двух об'єктов, а когда находиться K2, оно очищает файлы input и output и заносит результат только для...

Вывод результата вычислений в одном textbox'e
Калькулятор который находится у каждого из вас в Windows меня озадачил тем, что я так и не понял, как сделать вывод данных в той же форме. ...

1
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
08.05.2013, 13:20
Код дикий какой-то. Лень было разбираться. Вот накатал свой вариант на FASM'е:
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
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
use16
org 100h
main:
    mov ax,03h
    int 10h
 
    mov ah,9
    mov dx,msg2
    int 21h
 
    ;ввод первого числа
    call InputInt
    mov [number1],ax
    ;ввод второго числа
    call InputInt
    mov [number2],ax
    ;ввод операции
    @@:
    mov ah,0ah
    xor di,di
    mov dx,main.buff
    int 21h
    ;проверка ввода
    mov al,[main.buff+2]
 
    cmp al,'-'
    je OpSub
 
    cmp al,'+'
    je OpAdd
 
    cmp al,'*'
    je OpMul
 
    cmp al,'/'
    je OpDiv
 
    jmp @b
    ;Вычисление результата
    OpSub:
    mov ax,[number1]
    sub ax,[number2]
    jmp Output
    OpAdd:
    mov ax,[number1]
    add ax,[number2]
    jmp Output
    OpMul:
    mov ax,[number1]
    imul ax,[number2]
    jmp Output
    OpDiv:
    mov ax,[number1]
    mov dx,0
    test ax,8000h
    jz @f
       mov dx,0FFFFh
    @@:
    idiv [number2]
    ;Вывод выражения
    Output:
    push ax
    mov ax,[number1]
    call OutInt
 
    mov ah,02h
    mov dl,' '
    int 21h
    mov dl,[main.buff+2]
    int 21h
    mov dl,' '
    int 21h
 
    mov ax,[number2]
    call OutInt
 
    mov ah,02h
    mov dl,' '
    int 21h
    mov dl,'='
    int 21h
    mov dl,' '
    int 21h
 
    pop ax
    call OutInt
 
    mov ah,9
    mov dx,msg1
    int 21h
 
    mov ah,0ah
    xor di,di
    mov dx,main.buff
    int 21h
 
    cmp [main.buff+2],'y'
    je main
 
    int 20h
 
number1 dw 0
number2 dw 0
main.buff db 2,0,0,0
msg1 db 13,10,"Again?(y/n)$"
msg2 db "Enter 1st operand, 2nd operand and operation(+,-,*,/)",13,10,'$'
 
OutInt:
   pusha
; Проверяем число на знак.
   test    ax, ax
   jns     oi1
 
; Если оно отрицательное, выведем минус и оставим его модуль.
   mov  cx, ax
   mov     ah, 02h
   mov     dl, '-'
   int     21h
   mov  ax, cx
   neg     ax
; Количество цифр будем держать в CX.
oi1:
    xor     cx, cx
    mov     bx, 10 ; основание сс. 10 для десятеричной и т.п.
oi2:
    xor     dx,dx
    div     bx
; Делим число на основание сс. В остатке получается последняя цифра.
; Сразу выводить её нельзя, поэтому сохраним её в стэке.
    push    dx
    inc     cx
; А с частным повторяем то же самое, отделяя от него очередную
; цифру справа, пока не останется ноль, что значит, что дальше
; слева только нули.
    test    ax, ax
    jnz     oi2
; Теперь приступим к выводу.
    mov     ah, 02h
oi3:
    pop     dx
; Извлекаем очередную цифру, переводим её в символ и выводим.
;; раскоментировать если основание сс > 10, т.е. для вывода требуются буквы
;   cmp     dl,9
;   jbe     oi4
;   add     dl,7
;oi4:
    add     dl, '0'
    int     21h
; Повторим ровно столько раз, сколько цифр насчитали.
    loop    oi3
 
    popa
    ret
 
 
InputInt:
    push di
    push dx
    push si
    push cx
 
    mov ah,0ah
    xor di,di
    mov dx,buff ; аддрес буфера
    int 21h ; принимаем строку
    mov dl,0ah
    mov ah,02
    int 21h ; выводим перевода строки
    
; обрабатываем содержимое буфера
    mov si,buff+2 ; берем аддрес начала строки
    cmp byte [si],"-" ; если первый символ минус
    jnz ii1
    mov di,1  ; устанавливаем флаг
    inc si    ; и пропускаем его
ii1:
    xor ax,ax
    mov bx,10  ; основание сc
ii2:
    mov cl,[si] ; берем символ из буфера
    cmp cl,0dh  ; проверяем не последний ли он
    jz endin
    
; если символ не последний, то проверяем его на правильность
    cmp cl,'0'  ; если введен неверный символ <0
    jl er
    cmp cl,'9'  ; если введен неверный символ >9
    ja er
 
    sub cl,'0' ; делаем из символа число 
    mul bx     ; умножаем на 10
    add ax,cx  ; прибавляем к остальным
    inc si     ; указатель на следующий символ
    jmp ii2 ; повторяем
 
er:   ; если была ошибка, то выводим сообщение об этом и выходим
    mov dx,error
    mov ah,09
    int 21h
    int 20h
 
; все символы из буфера обработаны число находится в ax
endin:
    cmp di,1 ; если установлен флаг, то
    jnz ii3
    neg ax   ; делаем число отрицательным
ii3:
 
    pop cx
    pop si
    pop dx
    pop di
    ret
 
error db "incorrect number$"
buff    db 6,7 Dup(?)
P.S. Выводит не в центр экрана, ибо лень
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.05.2013, 13:20
Помогаю со студенческими работами здесь

Вывод результата нескольких вычислений в разные Label
button - кнопка, как там сделать так чтоб в одной кнопке он подсчитывал сразу несколько действий и выводил отеты в разные label я...

Разработать программу, осуществляющую ввод массива из 10 вещественных чисел и вывода результата вычислений над ними на экран!
Вывести на экран сумму четных по значению положительных элементов массива. Помогите, пожалуйста %-)

Совсем запутался
ТИЦ после 2 недели работы увеличился с 40 на 50. Регистрировал в каталогах, потом удалил все помойки, как только удалил прибавилось бэков...

совсем запутался..
Ребята, помогите пожалуйста. Я совсем запутался в вычислениях.. #include &lt;iostream&gt; #include &lt;cmath&gt; using...

совсем запутался с md5
смотрите вот так добавляю данные function quote($var) { return mysql_real_escape_string($var); } ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru