0 / 0 / 0
Регистрация: 20.12.2019
Сообщений: 3
1

Сложение, вычитание и умножение 32-разрядных чисел в формате с плавающей точкой (float)

13.01.2020, 18:27. Показов 1930. Ответов 14

Добрый день.
Прошу помощи в решении задачи на Generic 8051

ЗАДАЧА:
Реализовать подпрограммы сложения, вычитания и умножения 32-
разрядных чисел в формате с плавающей точкой (float). Принимать и
возвращать аргументы, как и в предыдущей программе, в РОН.

p.s:Я ещё мал и глуп! Не видал больших кодов
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2020, 18:27
Ответы с готовыми решениями:

Вычитание чисел с плавающей точкой в прямом коде
Надо сделать вычитание чисел с плавающей запятой, действия над мантиссами производится в прямых...

Сложение и вычитание чисел с плавающей точкой
Доброго времени суток. Прошу помочь. Нужно где-то откопать програмку: "Сложение и вычитание чисел...

Сложение/умножение бинарных чисел с плавающей точкой
Нужна помощь в решении данных задач: 1. Умножение и деление бинарных чисел с плавающей точкой...

Представить число как двоичные с плавающей точкой в формате float и double

14
1961 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
14.01.2020, 10:02 2
Цитата Сообщение от KOhakohan Посмотреть сообщение
Не видал больших кодов
я Вас умоляю! )
Цитата Сообщение от KOhakohan Посмотреть сообщение
умножения 32-
разрядных чисел в формате с плавающей точкой (float)
Вот пример:

C
1
2
3
4
5
#include "math.h"
 
float mul(const float a, const float b) {
  return a * b;
}
PS: предполагая Ваш следущий ответ, скажу, что "чтобы задать вопрос правильно, нужно знать не менее половины ответа".
0
locm
14.01.2020, 13:03
  #3

Не по теме:

Цитата Сообщение от Voland_ Посмотреть сообщение
Вот пример
Решение нужно на асме. На это намекает метка assembler и упоминание РОН в сообщении.

0
3531 / 2189 / 401
Регистрация: 09.09.2017
Сообщений: 8,995
14.01.2020, 14:04 4
Цитата Сообщение от locm Посмотреть сообщение
Решение нужно на асме. На это намекает метка assembler и упоминание РОН в сообщении.
Метки нужны не для того, чтобы в них задание описывать, а чтобы потом искать схожие темы.
А через РОН аргументы и в Си передаются, хотя и неявно. Так что условиям задачи все соответствует.
.
Другое дело если ТСу нужно решение какой-то другой задачи, с какими-то другими ограничениями. Например, код должен быть на каком-то конкретном диалекте ассемблера (в первом посте про это ни слова), вход-выход через какие-то конкретные регистры, должна быть интеграция с каким-то другим кодом (в первом посте про это есть намек, но совершенно бесполезный в такой формулировке).
0
locm
14.01.2020, 14:12
  #5

Не по теме:

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А через РОН аргументы и в Си передаются, хотя и неявно.
Они обычно через стек передаются. А в коде во втором сообщении явно не задана передача через регистры. Так что условия не соответствуют!

0
1961 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
14.01.2020, 15:20 6
fyi, Google вообще не знает что такое "РОН": https://www.google.com/search?... e&ie=UTF-8
Цитата Сообщение от locm Посмотреть сообщение
Они обычно через стек передаются
это, я думаю, Вы сами знаете - очень широкая тема для обсуждений. На нашем этапе обсуждений давайте ограничимся тем, что я признаю, что передаю и возвращаю данные не так как описано изначально .

PS: показанный код можно неплохо скомпилить и дизасемблить , прямо средствами gcc (например).
0
3015 / 1520 / 190
Регистрация: 28.10.2011
Сообщений: 5,596
Записей в блоге: 6
14.01.2020, 15:36 7
Цитата Сообщение от Voland_ Посмотреть сообщение
Google вообще не знает что такое "РОН"
Вики знает. https://ru.wikipedia.org/wiki/Регистр_процессора
Существуют также так называемые регистры общего назначения (РОН), представляющие собой часть регистров процессора
0
3531 / 2189 / 401
Регистрация: 09.09.2017
Сообщений: 8,995
14.01.2020, 15:36 8
Цитата Сообщение от locm Посмотреть сообщение
Они обычно через стек передаются. А в коде во втором сообщении явно не задана передача через регистры. Так что условия не соответствуют!
Обычно - таки через регистры. Стек используется только когда регистров не хватает. Обычно 4 первых аргумента в регистрах (в зависимости от размера), остальное через указатель или стек.
Так что все нормально
0
1961 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
14.01.2020, 16:31 9
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Обычно - таки через регистры.

Не по теме:

подолью масла в огонь :) https://en.wikibooks.org/wiki/... onventions

0
Модератор
Эксперт по электронике
8276 / 4180 / 1595
Регистрация: 01.02.2015
Сообщений: 12,998
Записей в блоге: 3
14.01.2020, 22:15 10

Не по теме:

Соглашусь с locm по поводу ассемблера - тема перенесена из "Низкоуровневого программирования".
Но топикстартер молчит пока мы спорим. Значит в другом месте получил что-то.
Если не на ассемблере - задача теряет обучающие свойства.

Мне кажется, что какая-то библиотека работы с float на микроконтроллерах 8051 публиковалась в журнале Радио лет 15-20 назад, может быть даже на ftp журнала остались исходники. Заинтересованный топикстартер может попробовать найти.
0
3531 / 2189 / 401
Регистрация: 09.09.2017
Сообщений: 8,995
15.01.2020, 10:51 11
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Соглашусь с locm по поводу ассемблера - тема перенесена из "Низкоуровневого программирования".
Пф-ф. Да никто не спорит, что ТС скорее всего хотел получить готовое решение на том ассемблере, которому их учат под тот контроллер, которому их там учат и ту плату, на которой...
Но в первом посте об этом не сказано, на что Voland_ намекнул. И формально придраться не к чему: его решение удовлетворяет всем условиям первого поста.
0
0 / 0 / 0
Регистрация: 20.12.2019
Сообщений: 3
15.01.2020, 23:10  [ТС] 12
Спасибо тем всем тем кто откликнулся. Вот мое видение решения. С удовольствием почитаю вашу критику/комментарии
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
cseg at 0
 
jmp start
 
main segment code
 
_data segment data
 
rseg _data
 
first: ds 4
 
second: ds 4
 
result: ds 8
 
stack: ds 2
 
rseg main
 
_add:
 
mov a, r6
 
add a, r7
 
mov r7, a
 
mov a, r5
 
addc a, r6 // 2 + 2 + C
 
mov r6, a //R6 - 2
 
mov a, r4
 
addc a, r5 // 3 + 3 + C
 
clr a
 
mov r4, a
 
mov r5, a
 
mov r6, a
 
addc a, #0
 
mov r3, a
 
ret
 
_sub:
 
mov a, r4
 
subb a, r7
 
mov r7, a
 
mov a, r5
 
subb a, r6
 
mov r6, a
 
mov a, r6
 
subb a, r5
 
mov r5, a
 
clr a
 
mov r4, a
 
mov r5, a
 
mov r6, a
 
ret
 
_mul:
 
//zapolnenie
 
mov first, r4
 
mov first+1, r5
 
mov first+2, r6
 
mov first+3, r7
 
mov second, r4
 
mov second+1, r5
 
mov second+2, r6
 
mov second+3, r7
 
razrFirst equ r4
 
razrSecond equ r5
 
razrResult equ r4
 
mov razrFirst, #3 //counter for first
 
mov razrSecond, #3 //counter for second
 
_mult:
 
//adress of res
 
mov a, razrFirst
 
add a, razrSecond
 
inc a //sum razr +1
 
add a, #result
 
mov razrResult, a
 
//bytes of numbers
 
mov a, #second
 
add a, razrSecond
 
mov r4, a
 
mov a, @r4
 
mov b, a
 
mov a, #first
 
add a, razrFirst
 
mov r4, a
 
mov a, @r4
 
mul ab
 
//res a
 
mov r4, a
 
mov a, @razrResult
 
add a, r4
 
mov @razrResult, a
 
//res b
 
dec razrResult
 
mov r4, b
 
mov a, @razrResult
 
addc a, r4
 
mov @razrResult, a
 
check:
 
jc cycle
 
jmp next
 
//ress c
 
cycle:
 
dec razrResult
 
mov a, @razrResult
 
addc a, #0
 
mov @razrResult, a
 
jmp check
 
next:
 
//change registers
 
mov a, razrFirst
 
dec a
 
mov razrFirst, a
 
cjne razrFirst, #-1, _mult
 
change:
 
mov razrFirst, #3
 
mov a, razrSecond
 
dec a
 
mov razrSecond, a
 
cjne razrSecond, #-1, _mult
 
mov r4, first
 
mov r5, first+1
 
mov r6, first+2
 
mov r7, first+3
 
mov r4, second
 
mov r5, second+1
 
mov r6, second+2
 
mov r7, second+3
 
ret
 
start:
 
mov r4, #1 //4 RAZR
 
mov r5, #2 //3 RAZR
 
mov r6, #3 //2 RAZR
 
mov r7, #4 //1 RAZR
 
mov r4, #5 //4
 
mov r5, #6 //3
 
mov r6, #7 //2
 
mov r7, #8 //1
 
//acall _add
 
//acall _sub
 
acall _mul
 
jmp $
 
end
p.s: Мозгов нормально это оформить у меня тоже не хватило)
0
1961 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
16.01.2020, 10:37 13
Цитата Сообщение от KOhakohan Посмотреть сообщение
мое видение
в каком-нибудь симуляторе пробовали запускать?
0
0 / 0 / 0
Регистрация: 20.12.2019
Сообщений: 3
20.01.2020, 15:01  [ТС] 14
Все делаю в keil вроде бы оно работает
0
3015 / 1520 / 190
Регистрация: 28.10.2011
Сообщений: 5,596
Записей в блоге: 6
20.01.2020, 20:54 15
Где первое float число, а где второе? Почему одни в одних и тех же регистрах?
float это плавающая точка, а не целое число.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2020, 20:54
Помогаю со студенческими работами здесь

Сложение/вычитание 4-разрядных bcd-чисел
Всем доброго времени суток! Совсем запуталась с решением данной задачи, поэтому без вашей помощи не...

Вычитание двух чисел с плавающей точкой откуда остаток
Доброго времени суток! От клиента приходит число например 0.02 ($qty); В DB есть 2 записи 0.005...

Сложение чисел с плавающей точкой
Помогите сложить числа А=73.9 и В=76.3 в формате с плавающей точкой и выполнить проверку.

Сложение, вычитание чисел с плавающей запятой
Pascal abc. Есть тут гении?как это изобрести? Разработать программу сложения, вычитания чисел с...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru