Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 12.08.2016
Сообщений: 10
1
TASM

Вычислить выражение по формуле

22.04.2020, 15:57. Показов 472. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
;X=K-B2/C1+D3+E2*F2
DOSSEG
.MODEL SMALL
;-------------------------------------------;
MY_MUL   MACRO   X,Y,Z  ;MACRO for multiply 3 numbers
         mov z,0
         mov z+2,0  
                 MOV    AX,X  
                 MUL    Y     
                 MOV    Z,AX   
                 MOV    Z+2,DX 
                 MOV    AX,X+2
                 MUL    Y     
                 ADD    Z+2,AX 
         mov ax,Z
                 mov dx,Z+2
                  
ENDM  
;-------------------------------------------;
.STACK 100h
.DATA
 F dw 0000h
 B dw 0000h
 C db 00h
 D dw 0000h, 0000h
 E dw 0000h
 ;74569024 in 10 = 47113540 in 16
 K EQU 0516h
 
 
 Temp1 db 00 ; B/C | 2 bytes / 1 byte = 1 bytes (1 bytes)
 Temp2 dw 0000h, 0000h ; E*F | 2 bytes * 2 byte = 4 bytes
 Temp3 dw 0000h, 0000h ; K-Temp1 | 4 bytes - 1 bytes = 4 bytes
 Temp4 dw 0000h, 0000h, 0000h,0000h ; Temp3 + D4 | 4 bytes + 4 bytes = 8 bytes
 X    dw  0000h, 0000h, 0000h, 0000h, 0000h, 0000h ; Temp4 + Temp2 | 8 bytes + 4 bytes = 12 bytes
;-------------------------------------------;
X_Str   db   10 dup (0)
TempStr db   10 dup (0)
TempBin dw   0,0
MaxLen  dw   0
X_div2  dw   0,0
Y_div2  dw   0
;-------------------------------------------;
MESSG_X  DB     13,10,'X= K - B / C + D + E * F     K = 74569024','$'
MESSG_F  DB     13,10,'F = ','$'
MESSG_B  DB     13,10,'B = ','$'
MESSG_C  DB     13,10,'C = ','$'
MESSG_D  DB     13,10,'D = ','$'
MESSG_E  DB     13,10,'E = ','$'
;-------------------------------------------;
MESSG_X_Res DB  13,10, 'X = ','$'
erStr_CZ    db  13,10, 'C = 0 --> divide by zero ',13,10,'$'
erStr1      db  13,10, 'Data not input_variable',13,10,'$'
erStr2      db  13,10, 'Incorrectly data ',13,10,'$'
erStr3      db  13,10, 'Data is too long ',13,10,'$'
 
Mult10      dw 1,0
my_z        dw 0,0
;-------------------------------------------;
;MAIN PROGRAM
.CODE   
 Start:        
    mov ax,@data        
    mov ds,ax
 
    call input
    call calculation
    call output
 
    mov ah,01
    int 21h        
 
    mov ah,4Ch
    int 21h
;-------------------------------------------;
input proc
        ;Display X= K - B / C + D + E * F
        LEA     DX,MESSG_X    
        MOV     AH,09
        INT     21H 
 
        ;Display F = (enter the value)
        LEA     DX,MESSG_F    
        MOV     AH,09
        INT     21H 
        mov di,offset F
        mov MaxLen,5
        mov cx,MaxLen
        call input_variable
 
        ;Display B = (enter the value)
        LEA     DX,MESSG_B    
        MOV     AH,09
        INT     21H 
        mov di,offset B
        mov MaxLen,5
        mov cx,MaxLen
        call input_variable 
 
        ;Display C = (enter the value)
        LEA     DX,MESSG_C    
        MOV     AH,09
        INT     21H 
        mov di,offset C
        mov MaxLen,3
        mov cx,MaxLen
        call input_variable
 
        ;Display D = (enter the value)
        LEA     DX,MESSG_D    
        MOV     AH,09
        INT     21H 
        mov di,offset D
        mov MaxLen,9
        mov cx,MaxLen
        call input_variable
 
        ;Display E = (enter the value)
        LEA     DX,MESSG_E    
        MOV     AH,09
        INT     21H 
        mov di,offset E
        mov MaxLen,5
        mov cx,MaxLen
        call input_variable
        cmp C,0
        jne dali ;if C != 0 go to dali, else - show error
        mov ah,09
        mov dx, offset erStr_CZ
        int 21h
        mov ah,4Ch
        int 21h
 
    dali:   
        ret ;continue
input endp
;-------------------------------------------;
calculation proc
xor ax,ax
xor bx,bx
xor cx,cx
xor dx,dx
;D/C
mov ax,B
mov bl,C
div bl
mov Temp1,al
 
 
 
 
 
 
;E*F  
mov     ax, [E]                 
mul     [F]
mov     [Temp2], ax
mov     [Temp2 + 2], dx
 
     
                                                        
 
;K-Temp1
mov dx,K
mov bl,Temp1
sub ax,bx
sbb dx,0
mov Temp3,ax
mov Temp3+2,dx
 
 
 
 
;Temp4+D
mov ax, [Temp3]
mov dx, [Temp3+2]
mov bx, [D]
add ax, bx
mov [Temp4], ax
mov [Temp4 + 2], dx
 
 
 
 
;Temp4+Temp2
mov ax, Temp4
mov dx,Temp4+2   
add Temp2,ax          
mov [X],ax
mov [X+2],dx
 
 
 
 
 
 
ret 
calculation endp
;-------------------------------------------;
output proc
        mov di,0
        mov Y_div2,10
        mov cx,X
        mov bx,X+2
    O_1:    
        mov X_div2,cx
        mov X_div2+2,bx
        call my_div2    
        add dl,30h
        mov X_Str[di],dl
        inc di
        cmp bx,0
        ja O_1
        cmp cx,10
        jae O_1
        add cl,30h
        mov X_Str[di],cl
        mov dx,offset MESSG_X_Res
        mov ah,09
        int 21h        
    O_2:    
        mov dl,X_Str[di]        
        mov ah,02h
        int 21h
        dec di
        jge O_2
        ret
output endp
;-------------------------------------------;
 
input_variable PROC 
        mov si,0                
    In_00:  mov ah,01
        int 21h 
        cmp al,0Dh
        je In_1
    In_0:   mov dl,al
        call CHECK_BYTE
        mov TempStr[si],dl
        inc si
        loop In_00
    In_1:   push si
        dec si
        cmp cx,MaxLen
        jne In_2
        call  Err1      
    In_2:   mov bh,0
                mov bl,TempStr[si]
        MY_MUL Mult10,bx,my_z
        add  TempBin,ax
                adc  TempBin+2,dx
        mov  bh,0
        mov bl,10
        MY_MUL Mult10,bx,my_z
        mov Mult10,ax
                mov Mult10+2,dx
        dec si
        cmp si,0
        jge In_2
        mov ax, TempBin
        mov dx,TempBin+2
        pop si
        cmp si,MaxLen
        jl In_3
            cmp MaxLen,10
        jl  In_2_1      
        js  In_Err
                cmp dx,0FFFFh
        ja In_Err
        jmp In_3
    In_2_1: cmp MaxLen,5
        jl  In_2_2
        cmp dx,00
        ja In_Err       
                cmp ah,0ffh
        ja In_Err
        jmp In_3
    In_2_2: cmp ax,00FFh
        jbe In_3
    In_Err: LEA     DX,erSTR3
                MOV     AH,09
                INT     21H
        mov ah,4Ch
        int 21h
        
    In_3:   mov [di],ax
        mov [di+2],dx
        mov TempBin,0
        mov TempBin+2,0
        mov Mult10,1        
        mov Mult10+2,0
                                            
        RET   
input_variable  ENDP
;-------------------------------------------;
Err1 PROC  
        PUBLIC Err1
        LEA     DX,erSTR1
        MOV     AH,09
        INT     21H
        mov ah,4Ch
        int 21h
        RET   
Err1  ENDP
;-------------------------------------------;
CHECK_BYTE  PROC
        PUBLIC CHECK_BYTE
        sub dl,30h
        cmp dl,00
        jl ErS
        cmp dl,0Ah
        jl GO
    ErS:
        LEA     DX,erSTR2
        MOV     AH,09
        INT     21H
        mov ah,4Ch
        int 21h
    GO: RET
CHECK_BYTE ENDP
;-------------------------------------------;
MY_DIV2 proc
    sub cx,cx
    sub bx,bx
    mov dx,X_div2+2
    mov ax,X_div2
  M2_D1:
    cmp dx,Y_div2
    jb M2_D3
    sub ax,Y_div2
    sbb dx,00
    add cx,01
    adc bx,0
    jmp M2_D1
  M2_D3:
    div Y_div2
    add cx,ax
    adc bx,00
    ret
MY_DIV2 ENDP
;-------------------------------------------;
end Start
помогите переписать код
Вычислить выражение по формуле
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2020, 15:57
Ответы с готовыми решениями:

Вычислить выражение по формуле
1.Помогите вычислить арифметическое выражениеa∗b+a∗(c+d)+d∗(−1). Переменныеa,b,c,dв начале...

Вычислить выражение по формуле
Действия, выполняемые программой, должны обеспечивать вычисления согласно формуле f= x2/y

Вычислить выражение по формуле
C=f(A,B) где A=операндI, B=операндII, C=AvB - 5h, найти функцию при A=08h, B=0Ch, где...

Вычислить выражение по формуле
выводит разные значения при вычислении в си и при проверке в ассемблере......

2
Модератор
2121 / 991 / 169
Регистрация: 23.07.2018
Сообщений: 3,329
Записей в блоге: 3
22.04.2020, 18:32 2
Zenuk18, а чем Вас не устраивает существующий код?
Картинку я Вашу разглядеть не могу.
0
0 / 0 / 0
Регистрация: 12.08.2016
Сообщений: 10
22.04.2020, 18:41  [ТС] 3
politoto, результат неверный по сколько константа К не та и я не знаю как сделать сумму 8 бит + 4 где коментарий Temp4+Temp2
0
22.04.2020, 18:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2020, 18:41
Помогаю со студенческими работами здесь

Вычислить выражение по формуле
Написал на с++, макрос __asm, пишет в строке div недопустимое число операндов, срочно помогите,...

Вычислить выражение по формуле
Cделать 2 программы одна - для без знаковых, другая - знаковых. Y=(8A^2-4A*C)/B

Вычислить выражение по формуле
Прошу помощи,так как еще только начинаю изучать данный язык,используя текстовый редактор, создать и...

Вычислить выражение по формуле
Помогите, пожалуйста, вычислить выражение по формуле на ассемблере L = (A - 1)2 (1 + J) 2 / (1 - J)...

Вычислить выражение по формуле
Всем привет. Помогите пожалуйста с вычислением простой формулы в Assembler, желательно с...

Вычислить выражение по формуле
include "win32ax.inc" .data A db 14 X db 18,3,42,27,16 Y dd 0 .code start: mov ecx, 5...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru