|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.10.2011, 11:08 | #1 |
Пользователь
Регистрация: 25.10.2011
Сообщений: 14
|
Работа с массивом в ассемблерной вставке
доброго времени суток, долго искал решение своей проблемы на просторах интернета, так и не нашёл, видимо из-за почти нулевого знания asm'a.
суть проблемы: имеется функция, написанная в c++ builder, которая считывает данные, приходящие от устройства, подключённого к lpt-порту и выводит их на экран. процесс самого считывания написан в ассемблерной вставке, т.к. при написании команд на си цикл занимает 170мс, а на ассемблере - 25-30мс. и вот проблема в том - как правильно работать с массивом? текст функции: Код:
|
26.10.2011, 09:35 | #2 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
Fabeldyr
Код:
|
26.10.2011, 11:16 | #3 |
Пользователь
Регистрация: 25.10.2011
Сообщений: 14
|
Mikl___, спасибо за код, однако на строке
Код:
class EAccessViolation with message 'Access violation at address 004023B1 in module 'project1.exe'. Read of address FFFFFF8C'. Process stopped.Use Step or Run to continue. |
26.10.2011, 11:21 | #4 |
Пользователь
Регистрация: 02.07.2011
Сообщений: 38
|
Разрядность регистор разная. Попробуй поставить AX (в AH занеси нули).
... Косвенная адресация. Не прав я. Последний раз редактировалось Ang15; 26.10.2011 в 11:25. |
26.10.2011, 11:50 | #5 |
Пользователь
Регистрация: 25.10.2011
Сообщений: 14
|
то же самое
я так понял, дело в том, что регистр esi - 32 бита, а al/ax - 8/16? с eax тоже не работает |
27.10.2011, 04:32 | #6 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
Fabeldyr
Попробуй заменить esi в mov esi,offset data_, mov [esi],al и inc esi на si |
27.10.2011, 09:54 | #7 | |
Пользователь
Регистрация: 25.10.2011
Сообщений: 14
|
Цитата:
такое ощущение, что компилятор ругается на []. Если написать любой регистр без них - всё работает, правда записывается неправильно, а если их поставить - вылетает с одинаковой ошибкой при любых регистрах Последний раз редактировалось Fabeldyr; 27.10.2011 в 10:03. |
|
27.10.2011, 11:25 | #8 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
Используйте регистр di и команду stosb, а вообще размерность надо указывать mov byte ptr[si],al
Нет, ну правда..
|
27.10.2011, 15:01 | #9 |
Пользователь
Регистрация: 25.10.2011
Сообщений: 14
|
ничего не изменилось
спасибо!! теперь всё работает, вот рабочий код, может кому ещё пригодится: Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Метка в ассемблерной вставке | EugenK | Общие вопросы C/C++ | 12 | 12.09.2011 13:49 |
Работа с массивом | Aleks2215 | Microsoft Office Excel | 10 | 04.11.2010 23:38 |
Как вызвать функцию в ассемблерной вставке, зная адрес | iceman2112 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 04.05.2010 13:38 |
работа с массивом | s2dentishe | Помощь студентам | 2 | 12.12.2009 22:35 |
работа с массивом | Андрей.12 | Помощь студентам | 2 | 22.10.2009 00:25 |