Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2013, 18:24   #1
Klod
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 42
Лампочка Проблема с подпрограммой

Начинаю учить ассемблер, дошел до темы "Подпрограммы и структуры". Начал пробовать писать код, который с помощью подпрограммы реализует перевод числа в степень (степень зависит от количества вызовов подпрограмм).
Программа когда пытаюсь её открыть как будто запускается и сразу закрывается. В чем ошибка?
Вот мой код:
PHP код:
.386

.model flat

extrn ExitProcess
:PROC
extrn MessageBoxA
:PROC
extrn wsprintfA
:PROC

.data

Ttl db 
"Прога №1",0h
format db 
"%d",0h
result db 128 dup 
(?)

.
code
start
:
QuadFunc proc
mul eax
cdq
Ret
QuadFunc endp
mov eax
3
call QuadFunc
call QuadFunc
call QuadFunc
call QuadFunc
  push eax
  push offset format
  push offset result
  call wsprintfA
    push 0
    push offset Ttl
    push offset result
    push 0
    call MessageBoxA
      push 0
      call ExitProcess
end start 
Klod вне форума Ответить с цитированием
Старый 22.02.2013, 18:53   #2
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Klod, поместите код подпрограммы после вызова ExitProcess. Авось заработает.
vadimych вне форума Ответить с цитированием
Старый 22.02.2013, 18:55   #3
Klod
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 42
Смех

Цитата:
Сообщение от vadimych Посмотреть сообщение
Klod, поместите код подпрограммы после вызова ExitProcess. Авось заработает.
Да ты прям Петросян!
Klod вне форума Ответить с цитированием
Старый 22.02.2013, 20:35   #4
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Цитата:
Сообщение от Klod Посмотреть сообщение
Да ты прям Петросян!
Это Вы к чему?
И да, к esp после вызова wsprintf прибавьте 12.
vadimych вне форума Ответить с цитированием
Старый 22.02.2013, 20:38   #5
Klod
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 42
По умолчанию

Цитата:
Сообщение от vadimych Посмотреть сообщение
Это Вы к чему?
К тому, что это была остроумная шутка с вашей стороны. Т.к после вызова ExitProcess программа вырубается. Получается, что код проги в результате такого изменения приведет её к тому, что выведется регистр eax, но со значением, которым он обладал в начале старта проги.
Klod вне форума Ответить с цитированием
Старый 22.02.2013, 20:48   #6
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Цитата:
К тому, что это была остроумная шутка с вашей стороны.
Не надо делать скоропалительные выводы, не проверив совет на практике.
vadimych вне форума Ответить с цитированием
Старый 22.02.2013, 20:50   #7
Klod
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 42
По умолчанию

Цитата:
Сообщение от vadimych Посмотреть сообщение
Не надо делать скоропалительные выводы, не проверив совет на практике.
Я проверял, в eax было записано число, которое обычно пишется при старте проги. А это значит, что варинт не сработал и мне показалось что то сообщение было шуткой.
Klod вне форума Ответить с цитированием
Старый 22.02.2013, 21:06   #8
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

43046721 - калькулятор выдал то же самое.
vadimych вне форума Ответить с цитированием
Старый 22.02.2013, 21:09   #9
Klod
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 42
По умолчанию

хм проверил, вызывая функцию 2 раза и тоже сработало выдало 81. А можно сделать код рабочим не перенося функцию после вызова ExitProcess
Klod вне форума Ответить с цитированием
Старый 22.02.2013, 21:17   #10
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Можно. Сделайте Jmp через неё.
vadimych вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Qbasic. Задача с подпрограммой. WED Помощь студентам 0 28.11.2012 15:54
C++. Задача с подпрограммой SZz7 Помощь студентам 0 22.05.2011 19:23
Программа с подпрограммой (assembler) fuzo Помощь студентам 3 07.03.2011 18:00
Задача с подпрограммой. DeFt Помощь студентам 1 16.02.2009 11:28