Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
ggod
2 / 2 / 2
Регистрация: 03.03.2010
Сообщений: 139
1

Линейное программирование с использованием команд сдвига???

04.12.2010, 09:54. Просмотров 2459. Ответов 8
Метки нет (Все метки)

вычислить y с использованием сдвигов
y=((c*3)/2)+((c+d)/4)
c,d вводиться с клавиатуры,результат вывести на экран
вычислить величину
p=10+((I^2-I^3)/I*I*(K-1))
K,I,J-вводиться с клавиатуры результат на экран

как сделать?
начал делать он даже ассемблировать не хотел((((
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2010, 09:54
Ответы с готовыми решениями:

Программа с использованием команд обработки строк
вобщем нужно напсать програмку, но я зашел в тупик задание: Задано 8 слов по 6 символов. В...

Разработка программ с использованием цепочечных команд
добрый вечер, может у кого завалялись какие нибудь простенькие программки по следующим темам ***...

Разработка программ с использованием цепочечных команд
помогите, пожалуйста, в написании программы: Ввести строку из произвольного числа символов и...

Программа с использованием команд обработки строк
Снова нужна ваша помощь с лабораторной:) Есть массив из символов (mas1 db 'aaad ad qqwert rt a...

Программа умножения двух целых чисел с использованием команд сложения, вычитания, сдвига
Программа умножения двух целых чисел с использованием команд сложения, вычитания, сдвига. (TASM) ...

8
murderer
3933 / 1498 / 141
Регистрация: 06.10.2010
Сообщений: 3,294
04.12.2010, 14:25 2
Какой компилятор?
1
ggod
2 / 2 / 2
Регистрация: 03.03.2010
Сообщений: 139
04.12.2010, 14:33  [ТС] 3
Цитата Сообщение от murderer Посмотреть сообщение
Какой компилятор?
...
TASM
в итоге нужну запустить через .COM фаил
0
murderer
3933 / 1498 / 141
Регистрация: 06.10.2010
Сообщений: 3,294
04.12.2010, 17:34 4
Вот шаблон
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
.model tiny
.code
.486
org 100h
begin:
 
;тут идёт код программы
 
ret 
 
;тут можно объявить переменные
 
end begin
Компилируется так
Код
tasm.exe 1.asm
tlink.exe /t 1.obj
1
ggod
2 / 2 / 2
Регистрация: 03.03.2010
Сообщений: 139
07.12.2010, 20:21  [ТС] 5
Цитата Сообщение от murderer Посмотреть сообщение
Вот шаблон
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
.model tiny
.code
.486
org 100h
begin:
 
;тут идёт код программы
 
ret 
 
;тут можно объявить переменные
 
end begin
Компилируется так
Код
tasm.exe 1.asm
tlink.exe /t 1.obj

НЕТ там что то вроде этого

ПРИЛОЖЕНИЕ 1


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
title lab6
sgstek  segment para    stack   'stack'
    dw  64 dup(?)
sgstek  ends
sgcode  segment para    'code'
begin   proc
    assume cs:sgcode,ds:sgdata,ss:sgstek,es:noth
 
;--display--;
    mov ah,00
    mov al,03
    int 10h
    
;zadanie
 
    mov dh,03
    mov dl,05
    call setcur
    mov ah,09
    lea dx,in_zad
    int 21h
    
;input a
    mov dh,05
    mov dl,05
    call setcur
    mov ah,09
    lea dx,inp_a
    int 21h
    
    mov dh,05
    mov dl,17
    call setcur
    call cl_r
    call inp
    call v_bin
    mov ax,binv
    mov a,ax
    
;input b
    mov dh,07
    mov dl,05
    call setcur
    mov ah,09
    lea dx,inp_b
    int 21h
    
    mov dh,07
    mov dl,17
    call setcur
    call cl_r
    call inp
    call v_bin
    mov ax,binv
    mov b,ax
 
;making
    
;(a-4)
    call cl_r
    mov ax,a
    sub ax,4
    mov pro,ax
    
;(a-4)*9
    mov cl,3 
    sal ax,cl
    add pro,ax
    
;((a-4)*9)+b/2
    mov cl,1
    mov ax,b
    sar ax,cl
    add pro,ax  
    
 
;(((a-4)*9)+(b/2))/8
    mov cl,3
    sar pro,cl
    
    
;output
    mov ax,pro
    mov binv,ax
    mov dh,10
    mov dl,5
    call setcur
    mov ah,09
    lea dx,otv
    int 21h
    
    mov dh,10
    mov dl,9
    call setcur
    call v_ascii
    mov ah,09
    lea dx,ascii
    int 21h
    
;readln
    mov ah,00
    int 16h
    int 20h
    ret
begin   endp
    
;setcur proc
    setcur  proc
    mov ah,02
    mov bh,00
    int 10h
    ret
    setcur  endp
 
cl_r proc
    xor ax,ax
    xor bx,bx
    xor cx,cx
    xor dx,dx
    ret
cl_r endp
 
simvol  proc
    mov ah,09
    mov bh,00
    mov bl,02
    mov cx,01
    int 10h
    ret
simvol  endp
 
inp proc
    mov ah,0ah
    lea dx,perem
    int 21h
    ret
inp endp
 
v_ascii proc
    mov ascii,' '
    mov ascii+1,' '
    mov ascii+2,' '
    xor bx,bx
    mov cx,0010
    lea si,ascii-1
    mov bl,3
    mov ax,binv
c20:    cmp ax,0010
    jb c30
        xor dx,dx
    div cx
    or dl,30h
    mov [si+bx],dl
    dec bx
    jmp c20
c30:    or al,30h
    mov [si+bx],al
    ret
v_ascii endp
 
v_bin   proc
    mov binv,00
    mov mul10,1
    mov cx,0010
    lea si,numb-1
    xor bx,bx
    mov bl,read
b20:    mov al,[si+bx]
    and ax,000Fh
    mul mul10
    add binv,ax
    mov ax,mul10
    mul cx
    mov mul10,ax
    dec bx
    jnz b20
    ret
v_bin   endp
 
mul10   dw  1
binv    dw  0
a   dw  ?
b   dw  ?
pro dw  ?
 
in_zad  db  'Y = ((a-4)*9+b/2)/8$'
inp_a   db  'Vvedite A:$'
inp_b   db  'Vvedite B:$'
otv db  'Y =$'
ascii   db  3 dup(' '),'$'
 
perem   label   byte
maxln   db  3
read    db  ?
numb    db  3 dup('$')
 
sgcode  ends
    end begin_
0
murderer
3933 / 1498 / 141
Регистрация: 06.10.2010
Сообщений: 3,294
07.12.2010, 20:35 6
У тебя объявлено 2 сегмента, а в com может быть только 1.

Добавлено через 3 минуты
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
.model tiny
.code
.486
org 100h
begin:
 
;--display--;
mov ah,00
mov al,03
int 10h
 
;zadanie
 
mov dh,03
mov dl,05
call setcur
mov ah,09
lea dx,in_zad
int 21h
 
;input a
mov dh,05
mov dl,05
call setcur
mov ah,09
lea dx,inp_a
int 21h
 
mov dh,05
mov dl,17
call setcur
call cl_r
call inp
call v_bin
mov ax,binv
mov a,ax
 
;input b
mov dh,07
mov dl,05
call setcur
mov ah,09
lea dx,inp_b
int 21h
 
mov dh,07
mov dl,17
call setcur
call cl_r
call inp
call v_bin
mov ax,binv
mov b,ax
 
;making
 
;(a-4)
call cl_r
mov ax,a
sub ax,4
mov pro,ax
 
;(a-4)*9
mov cl,3 
sal ax,cl
add pro,ax
 
;((a-4)*9)+b/2
mov cl,1
mov ax,b
sar ax,cl
add pro,ax 
 
 
;(((a-4)*9)+(b/2))/8
mov cl,3
sar pro,cl
 
 
;output
mov ax,pro
mov binv,ax
mov dh,10
mov dl,5
call setcur
mov ah,09
lea dx,otv
int 21h
 
mov dh,10
mov dl,9
call setcur
call v_ascii
mov ah,09
lea dx,ascii
int 21h
 
;readln
mov ah,00
int 16h
int 20h
ret
 
;setcur proc
setcur proc
mov ah,02
mov bh,00
int 10h
ret
setcur endp
 
cl_r proc
xor ax,ax
xor bx,bx
xor cx,cx
xor dx,dx
ret
cl_r endp
 
simvol proc
mov ah,09
mov bh,00
mov bl,02
mov cx,01
int 10h
ret
simvol endp
 
inp proc
mov ah,0ah
lea dx,perem
int 21h
ret
inp endp
 
v_ascii proc
mov ascii,' '
mov ascii+1,' '
mov ascii+2,' '
xor bx,bx
mov cx,0010
lea si,ascii-1
mov bl,3
mov ax,binv
c20: cmp ax,0010
jb c30
xor dx,dx
div cx
or dl,30h
mov [si+bx],dl
dec bx
jmp c20
c30: or al,30h
mov [si+bx],al
ret
v_ascii endp
 
v_bin proc
mov binv,00
mov mul10,1
mov cx,0010
lea si,numb-1
xor bx,bx
mov bl,read
b20: mov al,[si+bx]
and ax,000Fh
mul mul10
add binv,ax
mov ax,mul10
mul cx
mov mul10,ax
dec bx
jnz b20
ret
v_bin endp
 
mul10 dw 1
binv dw 0
a dw ?
b dw ?
pro dw ?
 
in_zad db 'Y = ((a-4)*9+b/2)/8$'
inp_a db 'Vvedite A:$'
inp_b db 'Vvedite B:$'
otv db 'Y =$'
ascii db 3 dup(' '),'$'
 
perem label byte
maxln db 3
read db ?
numb db 3 dup('$')
 
end begin
1
ggod
2 / 2 / 2
Регистрация: 03.03.2010
Сообщений: 139
07.12.2010, 21:00  [ТС] 7
Цитата Сообщение от murderer Посмотреть сообщение
У тебя объявлено 2 сегмента, а в com может быть только 1.

Добавлено через 3 минуты
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
.model tiny
.code
.486
org 100h
begin:
 
;--display--;
mov ah,00
mov al,03
int 10h
 
;zadanie
 
mov dh,03
mov dl,05
call setcur
mov ah,09
lea dx,in_zad
int 21h
 
;input a
mov dh,05
mov dl,05
call setcur
mov ah,09
lea dx,inp_a
int 21h
 
mov dh,05
mov dl,17
call setcur
call cl_r
call inp
call v_bin
mov ax,binv
mov a,ax
 
;input b
mov dh,07
mov dl,05
call setcur
mov ah,09
lea dx,inp_b
int 21h
 
mov dh,07
mov dl,17
call setcur
call cl_r
call inp
call v_bin
mov ax,binv
mov b,ax
 
;making
 
;(a-4)
call cl_r
mov ax,a
sub ax,4
mov pro,ax
 
;(a-4)*9
mov cl,3 
sal ax,cl
add pro,ax
 
;((a-4)*9)+b/2
mov cl,1
mov ax,b
sar ax,cl
add pro,ax 
 
 
;(((a-4)*9)+(b/2))/8
mov cl,3
sar pro,cl
 
 
;output
mov ax,pro
mov binv,ax
mov dh,10
mov dl,5
call setcur
mov ah,09
lea dx,otv
int 21h
 
mov dh,10
mov dl,9
call setcur
call v_ascii
mov ah,09
lea dx,ascii
int 21h
 
;readln
mov ah,00
int 16h
int 20h
ret
 
;setcur proc
setcur proc
mov ah,02
mov bh,00
int 10h
ret
setcur endp
 
cl_r proc
xor ax,ax
xor bx,bx
xor cx,cx
xor dx,dx
ret
cl_r endp
 
simvol proc
mov ah,09
mov bh,00
mov bl,02
mov cx,01
int 10h
ret
simvol endp
 
inp proc
mov ah,0ah
lea dx,perem
int 21h
ret
inp endp
 
v_ascii proc
mov ascii,' '
mov ascii+1,' '
mov ascii+2,' '
xor bx,bx
mov cx,0010
lea si,ascii-1
mov bl,3
mov ax,binv
c20: cmp ax,0010
jb c30
xor dx,dx
div cx
or dl,30h
mov [si+bx],dl
dec bx
jmp c20
c30: or al,30h
mov [si+bx],al
ret
v_ascii endp
 
v_bin proc
mov binv,00
mov mul10,1
mov cx,0010
lea si,numb-1
xor bx,bx
mov bl,read
b20: mov al,[si+bx]
and ax,000Fh
mul mul10
add binv,ax
mov ax,mul10
mul cx
mov mul10,ax
dec bx
jnz b20
ret
v_bin endp
 
mul10 dw 1
binv dw 0
a dw ?
b dw ?
pro dw ?
 
in_zad db 'Y = ((a-4)*9+b/2)/8$'
inp_a db 'Vvedite A:$'
inp_b db 'Vvedite B:$'
otv db 'Y =$'
ascii db 3 dup(' '),'$'
 
perem label byte
maxln db 3
read db ?
numb db 3 dup('$')
 
end begin
а можешь подставить вот эти задачи в одну?
вычислить y с использованием сдвигов
y=((c*3)/2)+((c+d)/4)
c,d вводиться с клавиатуры,результат вывести на экран
вычислить величину
p=10+((I^2-I^3)/I*I*(K-1))
K,I,J-вводиться с клавиатуры результат на экран

а то у меня с арифметическим сдвигом проблемы 5 ошибку всегда выдаёт
0
murderer
3933 / 1498 / 141
Регистрация: 06.10.2010
Сообщений: 3,294
08.12.2010, 07:56 8
Если используется вещественная арифметика, то второе выражение можно упростить
p=10+((I^2-I^3)/I*I*(K-1))=10+((I^2-I^3)*(K-1))

Добавлено через 7 минут
Первое можно вычислить так
Assembler
1
2
3
4
5
6
7
8
9
mov dx,[c] ;dx=c
mov ax,dx  ;ax=C
add ax,dx  ;ax=C*2
add ax,dx  ;ax=c*3
shr ax,1   ;ax=(C*3)/2
add dx,[d] ;dx=c+d
shr dx,2   ;dx=(c+d)/4
add ax,dx  ;ax=(C*3)/2+(c+d)/4
mov [y],ax
1
ggod
2 / 2 / 2
Регистрация: 03.03.2010
Сообщений: 139
24.12.2010, 13:57  [ТС] 9
Цитата Сообщение от murderer Посмотреть сообщение
Если используется вещественная арифметика, то второе выражение можно упростить
p=10+((I^2-I^3)/I*I*(K-1))=10+((I^2-I^3)*(K-1))

Добавлено через 7 минут
Первое можно вычислить так
Assembler
1
2
3
4
5
6
7
8
9
mov dx,[c] ;dx=c
mov ax,dx  ;ax=C
add ax,dx  ;ax=C*2
add ax,dx  ;ax=c*3
shr ax,1   ;ax=(C*3)/2
add dx,[d] ;dx=c+d
shr dx,2   ;dx=(c+d)/4
add ax,dx  ;ax=(C*3)/2+(c+d)/4
mov [y],ax

Млжешь плиз написать эти 2 задачи вместе а то после
Assembler
1
shr dx,2
он всё время выдаёт 5 ошибку
и выводит всё время 0

вычислить y с использованием сдвигов
y=((c*3)/2)+((c+d)/4)
c,d вводиться с клавиатуры,результат вывести на экран
вычислить величину
p=10+((I^2-I^3)/(I*I*(K-1)))
K,I,J-вводиться с клавиатуры результат на экран
0
24.12.2010, 13:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2010, 13:57

Пример какой-нибудь программы на ассемблере с применением логических команд и команд сдвига.
Разработка программ на ассемблере при реализации логических команд и команд сдвига. Очень нужна...

Разработка программ с использованием арифметических команд на языке ассемблер
По возможности напишите программу по ассемблеру в Turbo Assembler; Задание: Разработать...

Умножение двух целых десятичных чисел с использованием команд сопроцессора
Составить прграмму умножения двух целых десятичных чисел, вводимых с клавиатуры. Умножение чисел...


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

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

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