![]() |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
![]() ![]() |
![]() |
-Shaienn- |
![]()
Сообщение
#1
|
Гость ![]() |
Здравствуйте, есть
программа {в ней} функция, которая работает с массивом и в этой функции я пытаюсь сделать такую вещь: asm т.е на паскале: case d[i] of проблема в том, что я с адреса, полученного командой lea, командой lodsw не получаю число из массива (массив integer), но если пишу на тот же адрес, то в массив все записывается ![]() отдельным куском данный код на ассемблере работает... Где может быть косяк? Могу дать файл программы, но она большая.... Но все равно, может кто поможет. Ассемблер изучаю один день, так что нужна помощь. Сообщение отредактировано: volvo - 10.11.2006 16:49 |
-Shaienn- |
![]()
Сообщение
#2
|
Гость ![]() |
d: array [1..100] of integer
e: array [1..100] of integer прога смешанная, паскаль и асм |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата Могу дать файл программы Только присоедини его к сообщению, а не копируй текст, если он большой (для этого, возможно, придется зарегистрироваться...) |
Виталий Шевченко |
![]()
Сообщение
#4
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
Так и не смог я под своим нормальным именем зарегистрироваться, чего-то накосячил (модераторы, может сотрете из базы ник Shaienn)
Вот прога, основная суть - интерпретатор команд, пишешь ручками функцию, прога рисует график. Данный кусок кода в функции xvalue xvalue вычисляет значение для функции, т.е. я задаю например cos(2*x), и функция xvalue "распознает" эти 2*x и вычисляет. Прикрепленные файлы ![]() |
Malice |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
проблема в том, что я с адреса, полученного командой lea, командой lodsw не получаю число из массива (массив integer), но если пишу на тот же адрес, то в массив все записывается ![]() Возможно это из-за того, что stosw пишет по ES:DI, а lodsw c DS:SI, а у тебя в этот момент сегменты разные. |
Виталий Шевченко |
![]()
Сообщение
#6
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
Возможно это из-за того, что stosw пишет по ES:DI, а lodsw c DS:SI, а у тебя в этот момент сегменты разные. А как сегменты организовать одинаково? А то я думал, что получаю смещение и дальше не важно читаю, пишу ли... прикрепил программку, данный код отдельным куском... все работает ![]() Сообщение отредактировано: Виталий Шевченко - 10.11.2006 18:19 Прикрепленные файлы ![]() |
Malice |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
Виталий Шевченко |
![]()
Сообщение
#8
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
Виталий Шевченко |
![]()
Сообщение
#9
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
а можно еще вопрос, как мне из real массива вытащить вещественное число и загнать его в st(0)?
|
Malice |
![]()
Сообщение
#10
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
Виталий Шевченко |
![]()
Сообщение
#11
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
Думаю его надо сначала преобразовать из REAL в DOUBLE, a потом FLD ..
он в массив записывает чушь какую-то, подскажите, что я неправильно делаю? Сообщение отредактировано: volvo - 11.11.2006 15:36 |
FreeMan |
![]()
Сообщение
#12
|
- ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: ![]() ![]() ![]() |
хм. практически все
![]() во первых - сам написал, что double 8байт, а пишем dword ptr, а не qword ptr. дальше - результат записываешь в массив d, а выводишь число из массива е... finit -------------------- бб
|
Виталий Шевченко |
![]()
Сообщение
#13
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
я вас, наверное, уже достал глупыми вопросами, но можно ли обнулить ячейку массива более простым способом?
Сообщение отредактировано: Виталий Шевченко - 12.11.2006 7:51 |
Виталий Шевченко |
![]()
Сообщение
#14
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
Написал я ассемблерную часть, но криво, у меня паскаль вылетает в винду с недопустимой операцией...
Посмотрите плиз, в чем дело... Очень надо... Прикрепленные файлы ![]() |
FreeMan |
![]()
Сообщение
#15
|
- ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну сначала
asm такой же код есть в xvalue это из того, что сразу бросилось в глаза. дальше не разберался. пока нет времени -------------------- бб
|
Виталий Шевченко |
![]()
Сообщение
#16
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
И все же, есть какие-нить нюансы добавления ассемблерных вставок?
Просто, если я ставлю {$R+}, то паскаль пишет Range check error и вылетает.... Без ассемблерной части все работает, так что вывод - косяк в ассемблере. Проверьте плиз. e: array [1..100] of double; d: array [1..100] of integer;
|
Malice |
![]()
Сообщение
#17
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Асм вставка это часть процедуры ? Приведи полный код, а то мне не понятны такие моменты:
push ss {испортил ds, или прочитал параметр из стека..}Т.е. в прошлый раз комбинация push ds/pop es помогла т.к. в ds уже был загружен (паскалем) нужный сегмент, это не значит, что если ты ее повторяешь, то опять все будет хорошо. Сообщение отредактировано: Malice - 14.11.2006 9:51 |
Виталий Шевченко |
![]()
Сообщение
#18
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
А с чтением ds из ss, когда я ставлю параметр компилирования R+, то адрес, по которому надо читать масссив почему-то находится не в es а в ss.... а в es что-то иное.... если этого параметра не ставлю, то адрес в es нормальный... И если я загружаю разные массивы мне что, не нужно обновлять сегмент памяти? Сообщение отредактировано: volvo - 14.01.2009 0:06 |
FreeMan |
![]()
Сообщение
#19
|
- ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: ![]() ![]() ![]() |
ты вот всякою фигню с ds, es мутишь, а восстанавливать сегментные регистры - одно из правил кодинга на асме.
-------------------- бб
|
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 23:45 |