11 / 6 / 3
Регистрация: 03.05.2018
Сообщений: 22
1

Работа с указателями в ассемблерной вставке

27.01.2019, 20:48. Показов 2351. Ответов 7

Author24 — интернет-сервис помощи студентам
Вопрос простой.

Строка в паскале - массив байт.
Для обработки этого массива пытаюсь получить ссылку на адрес в памяти

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
program asminsert;
 
{$H-}
{$ASMMODE intel}
// Проверка ассемблерных вставок
var
  i: LongInt;
  str: String;
  ptr: Pointer;
 
begin
  i:=0;
  ReadLn(str);
  ptr:=@str;
 
  asm
    lds si, [str]
    lodsb
    mov i, eax
  end;
  WriteLn('count - ', i);
  ReadLn;
end.
Выдает ошибку выполнения. Стандартная SIGSEGV на lodsb.

Если вместо [str] написать lds si, ptr , то ошибка при компиляции Error: Assembler syntax error in operand
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2019, 20:48
Ответы с готовыми решениями:

Работа с метками в ассемблерной вставке в IAR
Пытаюсь сделать ассемблерную вставку. В самой вставке нужно сделать переход на метку (пусть будет...

Прерывания в ассемблерной вставке
Здравствуйте. В программу, написанную на С++, нужно добавить ассемблерную вставку, поддерживающую...

Jump в ассемблерной вставке
Использую хак во внешнее приложение. static const DWORD func_hack_Ret = 0x45C5D9; // адрес...

Непонятки в ассемблерной вставке
В общем, все работает, только х2 не принимает значения с минусом, просто игнорирует минус + не...

7
Модератор
Эксперт по электронике
8475 / 4334 / 1642
Регистрация: 01.02.2015
Сообщений: 13,457
Записей в блоге: 8
27.01.2019, 20:56 2
Лучший ответ Сообщение было отмечено AlNight как решение

Решение

Это уже 32-разрядный режим процессора - и адреса и соответствующие регистры 32-разрядные.
lea esi, [str]
1
11 / 6 / 3
Регистрация: 03.05.2018
Сообщений: 22
27.01.2019, 21:15  [ТС] 3
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Это уже 32-разрядный режим процессора - и адреса и соответствующие регистры 32-разрядные.
lea esi, [str]
lea - загрузит адрес в EAX, а мне нужно в DS:ESI, чтобы lodsb записал первый байт в AL
0
Модератор
Эксперт по электронике
8475 / 4334 / 1642
Регистрация: 01.02.2015
Сообщений: 13,457
Записей в блоге: 8
27.01.2019, 21:28 4
А чем занимается первый операнд?
lea esi, [str]
1
11 / 6 / 3
Регистрация: 03.05.2018
Сообщений: 22
27.01.2019, 21:30  [ТС] 5
Попробовал lea esi, [str]. Ошибка пропала. Работает. Спасибо.

Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
А чем занимается первый операнд?
Видимо читал я не то и не там )))
0
Модератор
Эксперт по электронике
8475 / 4334 / 1642
Регистрация: 01.02.2015
Сообщений: 13,457
Записей в блоге: 8
27.01.2019, 21:31 6
https://software.intel.com/sit... -2abcd.pdf
на странице 632
1
11 / 6 / 3
Регистрация: 03.05.2018
Сообщений: 22
27.01.2019, 21:54  [ТС] 7
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
https://software.intel.com/sites/def...-vol-2abcd.pdf
на странице 632
А вот за эту ссылку спасибо огромное.
Жаль можно только один плюс поставить.
0
ФедосеевПавел
27.01.2019, 22:00     Работа с указателями в ассемблерной вставке
  #8

Не по теме:

Ничего страшного - я, как Гримо, могу отвечать односложно во множестве сообщений, давая возможность оценить каждое :)

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2019, 22:00

Ошибки в ассемблерной вставке
в 24 и 25 строке ругается, что недопустимое число операторов #include "iostream" #include...

Условный переход в ассемблерной вставке.
max: ...... cmp dl,al; jg max; error C2415: improper operand type не могу понять почему?

Очищение памяти в ассемблерной вставке
/* Выделить из строки подстроку указанной длины, начиная с заданной позиции. */ ...

Операция разыменовывания в ассемблерной вставке
Всем доброго времени! Хочу разыменовать поместить в регистр значение, содержащееся в некоем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru