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

Перевод числа в строку и ее вывод через MessageBox в FASM'e

08.01.2014, 14:23. Показов 3674. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
берем программу "привет мир"
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
include '%fasminc%/win32ax.inc'
 
.data
Caption db 'Моя первая программа.',0
_otvet db 'Всем привет!',0
.code
start:
 
invoke MessageBox,0,_otvet,Caption,MB_OK
invoke ExitProcess,0
 
.end start
Все хорошо, все работает.. а теперь зададим в начале программы какое нибудь число, допустим
Assembler
1
_chislo dd 1234
и попробуем вывести его заместо "всем привет!"


вот вырезка из кода - Перевод беззнакового 32-битного числа в строку:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dword_to_STR:
; eax - число
; edi - указатель на выходную строку
      push edx
      xor edx, edx
      div [_10]
      test eax, eax
      je stop_recursion
      call dword_to_STR
 stop_recursion:
      mov eax, edx
      add al, '0'
      stosb
      pop edx
      ret
пробую все это скомпоновать:
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
include '%fasminc%/win32ax.inc'
 
.data
Caption db 'Моя первая программа.',0
_otvet db 'Всем привет!',0
_10   dd 10
_chislo dd 1234
.code
start:
;++++++++++++++++++++++++++++++++++++++++++++++++
mov eax,_chislo
 
dword_to_STR:
; eax - число
; edi - указатель на выходную строку
      push edx
      xor edx, edx
      div [_10]
      test eax, eax
      je stop_recursion
      call dword_to_STR
 stop_recursion:
      mov eax, edx
      add al, '0'
      stosb
      pop edx
      mov _otvet,edx
      ret
;++++++++++++++++++++++++++++++++++++++++++++++++
invoke MessageBox,0,_otvet,Caption,MB_OK
invoke ExitProcess,0
 
.end start
не компилиться:

D:\PROG\єЁюъш\new 7.asm [26]:
pop [_otvet]
error: invalid size of operand.

поменять размер _otvet тоже никак
что сделать что бы работало? и не могу разобраться в вырезке кода - он извлекает из стека только 1 раз? и как правильно перевести извлекаемое из стека в _otvet?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2014, 14:23
Ответы с готовыми решениями:

Вывод ошибок через MessageBox
Добрый день, Есть 3 текстбокса для ввода цифр a = System::Convert::ToDouble(textBox1->Text);...

Вывод числа в MessageBox
Помогите пожалуйста. Хочу чтобы число 5 показалось в MessageBox. Вот что выходит:...

Вывод числа в MessageBox
Подскажите, как привести число к типу string и вывести в MessageBox private: System::Void...

Вывод числа в окно MessageBox
.586 .model flat, stdcall includelib kernel32.lib ExitProcess PROTO : dword MessageBoxA PROTO...

Вывод числа double из консоли в Messagebox
"Осуществить заданные в командной строке арифметические действия (сложение и вычитание) над целыми...

5
Ушел с форума
Автор FAQ
16280 / 7605 / 1065
Регистрация: 11.11.2010
Сообщений: 13,618
08.01.2014, 14:40 2
тракторист,
наконец-то стоящий вопрос!!! О как долго я его ждал!!!
Как думаешь, в который раз задают вопрос "Как перевести число в строку?" И при этом не замечают закрепленных тем https://www.cyberforum.ru/asse... 54461.html и https://www.cyberforum.ru/asse... 4885.html? И если уж человек начал применять MessageBox и ExitProcess почему не использовать уже готовую sprintf и перестать изобретать велосипед?
1
0 / 0 / 0
Регистрация: 22.01.2013
Сообщений: 10
08.01.2014, 15:41  [ТС] 3
Mikl___,
Цитата Сообщение от Mikl___ Посмотреть сообщение
наконец-то стоящий вопрос!!! О как долго я его ждал!!!
это сарказм, или действительно радость от того что я задал данные вопросы (вроде бы именно этот)
Цитата Сообщение от тракторист Посмотреть сообщение
и как правильно перевести извлекаемое из стека в _otvet?
Спасибо что обратил внимание, а то я думал не "поругаешь ли ты меня" за то что я в личку пишу по такому делу... ))

Добавлено через 16 минут
Mikl___, судя по тому что ты не отвечаешь - это был сарказм, и дальнейшего ответа не будет. но тогда я идиот - ответа в тех ссылках что ты дал не вижу(
0
Ушел с форума
Автор FAQ
16280 / 7605 / 1065
Регистрация: 11.11.2010
Сообщений: 13,618
08.01.2014, 15:50 4
тракторист,
Assembler
1
2
3
4
5
6
7
8
9
.data
msg1 db "eax=%d",0
msg2 db "output",0
buff db 50 DUP(?)
.code
.....
     mov eax,1337 
     invoke wsprintfA,addr buff,addr msg1, eax
     invoke MessageBoxA,0, addr buff, addr msg2, 0
Добавлено через 1 минуту
но если охота изобрести велосипед тогда смотри здесь https://www.cyberforum.ru/asse... 88568.html
0
Taatshi
08.01.2014, 17:46
  #5

Не по теме:

Цитата Сообщение от тракторист Посмотреть сообщение
а то я думал не "поругаешь ли ты меня" за то что я в личку пишу по такому делу... ))
Он, может, и не поругает, а я - да. Это классифицируется как спам и не приветствуется у нас на форуме. Если кто-то из пользователей пожалуется - придется выдать Вам карту. Учтите на будущее :)

0
0 / 0 / 0
Регистрация: 22.01.2013
Сообщений: 10
08.01.2014, 18:35  [ТС] 6
Taatshi, понял, исправлюсь..
0
08.01.2014, 18:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2014, 18:35
Помогаю со студенческими работами здесь

Переделать в Windows Form. Вывод календаря через MessageBox
Нужно вывести через мэссежэбокс календарь, который печатается с помощью этого кода...

1. простые числа в массиве 2. перевод числа в строку
Здравствуйте. очень нужна помощь по программированию 1. удалить простые числа из массива у...

Перевод числа, вывод числа строкой и двумерный массив. СРОЧНО
Помогите пожалуйста (СРОЧНО) решить задачи на c++ (хотя бы 1 и 2): 1. Перевести целое число из...

Перевод Int в строку и вывод ее в WinAPI
Не могу перевести int в строку так чтобы вывести его через TextOut: Подскажите код для...

Перевод int d строку и вывод строки WinApi
Пишу тетрис, мне надо выводить постоянно очки (points): Пытаюсь написать в окне текст с помощью...


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

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