![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| DigitSphinx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
Я полный нуб по асму поэтому объясните что к чему :
Выскакивает ошибка “Unhandled exception at 0x0041302b in asmik.exe: 0xC0000005: Access violation reading location 0xffffffff.” |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
ДОС-прерывания на win32 не работают.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| DigitSphinx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
Ок, я открыл Turbo C++ и написал следующее
Откомилилось без проблем , exe’шник получился 6 кб ДОСовский Запустил , на консоль стал выводиться всякой мусор + динамик запищал ! А своей "My Message" я так и не увидел ! Да еще заменил int 0x21 на int 21h и на int 33 результат такой же + в exe’шнике лишний мусор типа : Borland C++ - Copyright 1991 Borland Intl. Null pointer assignment Divide error Abnormal program termination Это сообщение отредактировал(а) DigitSphinx - 17.6.2007, 14:22 |
|||
|
||||
| Sartorius |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
Если не изменяет память мне, то в этой функции 21-го прерывания признак конца стороки не 0, а $
Это сообщение отредактировал(а) Sartorius - 17.6.2007, 14:39 |
||||
|
|||||
| DigitSphinx |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
Sartorius, Спасибо я как-то перепутал в силу малого опыта .
для загрузки адреса в регистр я использую
но обычно в примерах
правда там и строка объявляется как
можешь объяснить на пальцах разницу ?! P.S. Как же откомпилить чтобы мусор убрать ? Это сообщение отредактировал(а) DigitSphinx - 17.6.2007, 15:22 |
||||||||
|
|||||||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
это неверно, если через mov то
а через lea будет лучше, писанины меньше) |
|||
|
||||
| DigitSphinx |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
Я не пишу на асме а использую асм вставки в Turbo C++ , тем более что msgg у меня обявлена как
Он не ругается но эффект такой же как и при
а
работает правильно ! |
||||||||
|
|||||||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
и тем не менее это правильно, 9 функция выводит строку оканчивающуюся знаком '$', по адресу который находится в dx/. очень странно т.к ты помещаешь в dx слово из памяти с адрессом msgg, т.е это у тя указывет черти куда. Верный вариант с Lea Или с offset, твой вариант не корректен, и даже если ты получаешь то что нуно, то это чистая случайность Это сообщение отредактировал(а) vinter - 17.6.2007, 20:21 |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
vinter,
твой вариант неправильный у DigitSphinx адрес строки храниться в msgg через mov dx, [msgg] мы его получаем варианты с mov dx, offset msgg и lea dx, msgg не дают адреса строки, а они дают адрес переменной msgg в стеке
Это сообщение отредактировал(а) MAKCim - 17.6.2007, 20:49 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| DigitSphinx |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
Именно это я и хотел сказать Так какая разница между TC++
И masm
В первом случае надо mov dx, [msg] Во втором lea dx, msg или mov dx, offset msg Это сообщение отредактировал(а) DigitSphinx - 17.6.2007, 21:17 |
||||
|
|||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
точно, че то я решил что msgg это и есть адрес. Извиняюсь
Добавлено через 2 минуты и 25 секунд
разница в том что при Сишном обьявлении у тебя адрес строки помещается в переменную указатель, т.е физически строка хранится в памяти на которую указывает адрес который содержиться в msgg,а во втором случае ты имеешь имя переменной которое само по себе уже адрес строки в памяти поэтому надо юзать offset Или lea |
|||
|
||||
| DigitSphinx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
Всем огромное спасибо !
|
|||
|
||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
напиши в TC++
и разницы никакой не будет vinter уже сказал почему -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| DigitSphinx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
Спасибо MAKCim, именно это меня и интересовало .
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |