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

Как вывести значение переменной с плавающей точкой через printf?

26.08.2016, 14:24. Показов 5538. Ответов 9

Author24 — интернет-сервис помощи студентам
День добрый начинаю изучать сопроцессор и первым делом решил сделать ввод вывод числа, однако, столкнулся с такой проблемой что число вводиться с помощью scanf но не выводиться printf.

Как вывести значение переменной с плавающей точкой через printf?

Как вывести значение переменной с плавающей точкой через printf?


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
section '.data' data readable writeable
 
f dd ?
szMsg db 255 dup(?)
 
StrPause db 'Pause', 0
inf0 db 'Введите число:', 0
par1 db '%f', 0
par2 db '%1.2f', 13, 10, 0
par3 db '%s', 13, 10, 0
 
section '.code' code readable executable
start:
 
;invoke FreeConsole
;invoke AllocConsole
 
invoke SetConsoleOutputCP, 1251
invoke SetConsoleCP, 1251
 
cinvoke scanf, par1, f
 
cinvoke printf, par2, [f]
 
push StrPause
call [system]
add esp,4
 
Exit:
  invoke  FreeConsole
  invoke ExitProcess,0
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.08.2016, 14:24
Ответы с готовыми решениями:

Printf лжет при выводе чисел с плавающей точкой?
void doubleToString(double v, char * str){ if(v < 0) { *str = '-'; v = -v; } int number...

Как корректно вывести число с плавающей точкой
Доброго времени суток всем )) вот столкнулся с вирусом ) ну я его так назвал, когда идет...

Присвоить переменной строку и вывести ее через printf
Привет всем, объясните мне кто-то, как вообще строки работают в Си. нужно программно присваивать...

Вывод переменной с плавающей точкой на дисплей
Есть переменная double rew=1.34534795 (можно float rew=1.34534795, не принципиально) Нужно вывести...

9
Эксперт Hardware
Эксперт Hardware
6160 / 2397 / 398
Регистрация: 29.07.2014
Сообщений: 3,143
Записей в блоге: 4
27.08.2016, 00:02 2
MessageBox1, а где импорт библиотеки "MSVCRT", в которой хранятся эти функции?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
format  PE console
entry   start
include 'win32ax.inc'
include 'api\kernel32.inc'
 
section '.code' code readable executable
start:
    cinvoke  printf, <"%d", 10, 0>, 76313
    invoke   ExitProcess, 0
 
 
section '.idata' import data readable
library kernel32, 'kernel32.dll',\
        msvcrt, 'msvcrt.dll'
 
import msvcrt,\
       printf, 'printf'
0
1375 / 519 / 72
Регистрация: 21.07.2015
Сообщений: 1,304
27.08.2016, 22:52 3
MessageBox1, покажи исходник целиком, а не кусок.
0
0 / 0 / 0
Регистрация: 21.06.2016
Сообщений: 4
27.08.2016, 23:01  [ТС] 4
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
format PE Console 4.0
include '%fasminc%/win32a.inc'
entry start
 
section '.data' data readable writeable
 
f dd ?
szMsg db 255 dup(?)
 
StrPause db 'Pause', 0
inf0 db 'Введите число:', 0
par1 db '%f', 0
par2 db '%1.2f', 13, 10, 0
par3 db '%s', 13, 10, 0
 
 
section '.code' code readable executable
start:
 
;invoke FreeConsole
;invoke AllocConsole
 
invoke SetConsoleOutputCP, 1251
invoke SetConsoleCP, 1251
 
cinvoke scanf, par1, f
 
cinvoke printf, par2, [f]
 
push StrPause
call [system]
add esp,4
 
Exit:
  invoke  FreeConsole
  invoke ExitProcess,0
 
section '.idata' import data readable writeable
library KERNEL32, 'KERNEL32.DLL',\
MSVCRT, 'MSVCRT.DLL',\
USER32, 'USER32.DLL'
 
import KERNEL32,\
SetConsoleTitleA,'SetConsoleTitleA',\
SetConsoleCP,'SetConsoleCP',\
SetConsoleOutputCP,'SetConsoleOutputCP',\
FreeConsole,'FreeConsole',\
AllocConsole,'AllocConsole',\
ExitProcess, 'ExitProcess'
 
import MSVCRT,\
system,'system',\  
malloc,'malloc',\
free,'free',\
scanf,'scanf',\
printf,'printf',\
sprintf,'sprintf',\
exit,'exit'
 
import USER32,\
CharToOem,'CharToOemA'
0
1375 / 519 / 72
Регистрация: 21.07.2015
Сообщений: 1,304
28.08.2016, 00:24 5
MessageBox1, printf из msvcrt ждет double, почему так сделано - хз.
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
format PE Console 4.0
include 'win32a.inc'
entry start
 
section '.data' data readable writeable
 
f dq 0
szMsg db 255 dup(?)
 
StrPause db 'Pause', 0
inf0 db 'Ââåäèòå ÷èñëî:', 0
par1 db '%lf', 0
par2 db '%1.2f', 13, 10, 0
par3 db '%s', 13, 10, 0
 
section '.code' code readable executable
start:
cinvoke scanf, par1, f
cinvoke printf, par2, dword[f], dword[f + 4]
jmp $
 
section '.idata' import data readable writeable
library KERNEL32, 'KERNEL32.DLL',\
MSVCRT, 'MSVCRT.DLL',\
USER32, 'USER32.DLL'
 
import KERNEL32,\
SetConsoleTitleA,'SetConsoleTitleA',\
SetConsoleCP,'SetConsoleCP',\
SetConsoleOutputCP,'SetConsoleOutputCP',\
FreeConsole,'FreeConsole',\
AllocConsole,'AllocConsole',\
ExitProcess, 'ExitProcess'
 
import MSVCRT,\
system,'system',\  
malloc,'malloc',\
free,'free',\
scanf,'scanf',\
printf,'printf',\
sprintf,'sprintf',\
exit,'exit'
 
import USER32,\
CharToOem,'CharToOemA'
1
0 / 0 / 0
Регистрация: 21.06.2016
Сообщений: 4
28.08.2016, 17:14  [ТС] 6
Цитата Сообщение от shmkv Посмотреть сообщение
cinvoke printf, par2, dword[f], dword[f + 4]
jmp $
Спасибо все работает, но поясните мне зачем два раза dword[f], dword[f + 4] и зачем осуществятся прыжок jmp $
0
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
28.08.2016, 17:29 7
Удалено...

Добавлено через 2 минуты
f dq 0 - это ведь 8 байт. double.
Для printf видимо нужно внести в стек эти самые 8 байт. Делается это двумя инструкциями:
1) dword[f] вносит первую часть вещественного
2) dword[f + 4] вторую.
И это сама printf посчитает как один параметр.
Проверить это можно в отладчике.
1
0 / 0 / 0
Регистрация: 21.06.2016
Сообщений: 4
28.08.2016, 17:44  [ТС] 8
Спасибо примерно так и думал остался только один вопрос jmp $ зачем нужен этот переход

Добавлено через 12 минут
Это получается прыжок на эту же инструкцию лан буду разбираться дальше сам. Всем спасибо!
Миниатюры
Как вывести значение переменной с плавающей точкой через printf?  
0
1375 / 519 / 72
Регистрация: 21.07.2015
Сообщений: 1,304
28.08.2016, 22:11 9
Цитата Сообщение от MessageBox1 Посмотреть сообщение
но поясните мне зачем два раза dword[f], dword[f + 4]
Ну а как иначе положить в стек 64х-битное значение в 32х разрядном режиме?
Цитата Сообщение от MessageBox1 Посмотреть сообщение
зачем осуществятся прыжок jmp $
Это я для себя, чтобы окошко не закрывалось. Забыл убрать.
1
programmer
2391 / 525 / 69
Регистрация: 01.06.2011
Сообщений: 3,639
27.10.2020, 15:20 10
Необходима помощь.

Как все же вывести через printf long long double (tbyte)

конструкция виснет. времени особо нет разбираться
или как выводить через invoke printf передав dt?

Assembler
1
2
3
4
5
6
7
8
mov esi, number
sub esp, 2
push  word [esi + 8]
push dword [esi + 4]
push dword [esi + 0]
push fmt ; "%lle"
call printf
add esp, 16
0
27.10.2020, 15:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2020, 15:20
Помогаю со студенческими работами здесь

Вывод переменной с плавающей точкой на дисплей
Есть переменная double rew=1.34534795 (можно ftoot rew=1.34534795, не принципиально) Нужно вывести...

используя только символьный вывод printf, вывести значение целой переменной k
используя только символьный вывод, то есть функцию printf (&quot;% c&quot;, s), где s - переменная типа char,...

Как вывести значение переменной через JS
Добрый день. После нажатия кнопки &quot;Выполнить&quot; вмести надписи &quot;Задание ...&quot; должна появиться...

Числовое значение с плавающей точкой
У меня выводится сумма одного предмета - 1013 $, а мне надо поставить точку чтобы было так - 101,3...


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

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