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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2011, 23:06   #1
Илья01
Пользователь
 
Регистрация: 30.12.2010
Сообщений: 14
Вопрос Требуется найти ошибку в коде.

Вот код:

Код:
.386
.model flat,stdcall
option   casemap:none
include C:\masm32\INCLUDE\WINDOWS.INC
include C:\masm32\INCLUDE\KERNEL32.INC 
include C:\masm32\INCLUDE\USER32.INC
include C:\masm32\INCLUDE\ADVAPI32.INC                                                  
                         
includelib C:\masm32\lib\comctl32.lib
includelib C:\masm32\lib\user32.lib
includelib C:\masm32\lib\gdi32.lib
includelib C:\masm32\lib\kernel32.lib                
includelib C:\masm32\lib\user32.lib
includelib C:\masm32\lib\advapi32.lib                 
.DATA 
 FORMAT DB '%d',0
 HINST DWORD 0,0
 FOR_PLUS DD ?,0
 FOR_MINUS DD 0,0
 String_CONTENER DB 256  dup (0),0
.CODE
START:  
 MOV FOR_PLUS,1000
 CALL AAA;запуск функции
 invoke wsprintf ,addr String_CONTENER,addr FORMAT ,FOR_PLUS,0
 invoke MessageBox, 0, addr String_CONTENER,addr FOR_MINUS,0
EXIT:
 invoke ExitProcess,0
AAA PROC ;функция
 MOV FOR_MINUS,"ABC"
 RET  
AAA ENDP

END START
Ошибка явно в функции AAA, подскажите пожалуйста, что не так?
Илья01 вне форума Ответить с цитированием
Старый 27.12.2011, 23:33   #2
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Илья01, функцию переименовать не пробовал?
vadimych вне форума Ответить с цитированием
Старый 27.12.2011, 23:41   #3
Илья01
Пользователь
 
Регистрация: 30.12.2010
Сообщений: 14
По умолчанию

Спасибо, заработало! А почему не воспринимает AAA?
Илья01 вне форума Ответить с цитированием
Старый 28.12.2011, 01:23   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

есть инструкция AAA
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.12.2011, 15:46   #5
Илья01
Пользователь
 
Регистрация: 30.12.2010
Сообщений: 14
По умолчанию

Спасибо, а вот у меня по ходу еще такой вопрос: пытаюсь в регистр eax записать длинную строку, и не работает.
Код:
 MOV edx,'strokastrokastroka'
Скажите пожалуйста, в чем же дело?
Илья01 вне форума Ответить с цитированием
Старый 28.12.2011, 16:15   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

как вы собрались в 32бита запихнуть всю "длинную строку"?
p51x вне форума Ответить с цитированием
Старый 28.12.2011, 16:19   #7
Илья01
Пользователь
 
Регистрация: 30.12.2010
Сообщений: 14
По умолчанию

ну а как же тогда записать? Я попробовал со всеми регистрами, не с одним не работает, скажите тогда пожалуйста, как это вообще делается? Или регистры только для чисел, а строки туда нельзя?
Илья01 вне форума Ответить с цитированием
Старый 28.12.2011, 16:26   #8
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Регистр имеет размер в 32 бита. А ваша строка примерно 144 (умножаем количество символов на 8 т.к. один символ - 8 бит). В 32 никак не уместится 144. Строки обычно записывают в память.
Цитата:
str db 'strokastrokastroka',0
str - указатель на первый байт строки.
db - директива обозначающая выделения одного байта(для одного символа).
'' - В кавычках символы.
Цитата:
Или регистры только для чисел, а строки туда нельзя?
Ну в общем-то - да. Но все же, любой символ в памяти представляется, как число.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 28.12.2011 в 16:31.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 28.12.2011, 16:30   #9
Илья01
Пользователь
 
Регистрация: 30.12.2010
Сообщений: 14
По умолчанию

А если к примеру в мою программу userу требуется ввести какие нибудь данные. Например имя которое вводится во время работы программы, и естественно в разделе .DATA его еще не известно?
Илья01 вне форума Ответить с цитированием
Старый 28.12.2011, 16:31   #10
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> как это вообще делается?

в регистр обычно записывают указатель на строку, а не саму строку.

> Например имя которое вводится во время работы программы

для ввода заранее выделяют буфер в памяти.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку в коде ( С++ ) nexUS1 Помощь студентам 1 29.12.2009 01:09
Не могу найти ошибку в коде! Natasha666 Помощь студентам 1 20.05.2009 09:27
помогити найти ошибку в коде С++ Lorden Помощь студентам 8 17.02.2009 20:49
Помогите найти ошибку в коде! alex2008ean Паскаль, Turbo Pascal, PascalABC.NET 1 27.12.2008 18:31
Памагите найти ошибку в коде...С++ Goblin Помощь студентам 1 13.05.2008 18:15