![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#31 | |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]() Цитата:
Со строками нужно вам найти методичку по BASM Delphi Но в целом у вас ошибки. В первом вы вызываете не правильно. Код:
Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 08.07.2021 в 20:20. |
|
![]() |
![]() |
![]() |
#32 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 684
|
![]()
К слову говоря, любое обращение к локальным переменным функции выдает ошибку исполнения
Почему? Код:
Последний раз редактировалось Kronos913; 08.07.2021 в 20:22. |
![]() |
![]() |
![]() |
#33 | |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]() Цитата:
Строки это указатели. Поэтому надо в 2 действия. С начало разыменовывать его, а после прибавить позицию. Для строк mov eax,s компилятор преобразует либо в mov либо в lea в зависимости от того где лежит переменная в параметрах в регистрах или на стеки. - это компилер меджик BASM'а. Что касается строки mov al, byte(s[1]) То тут баг компилятора вместо того чтобы выдать ошибку компиляции запихивает в одну ассемблерную команду две. А так как это не воможно он просто выкидывает первую команду и у вашего компилятора вместо mov eax, [eax] mov al, [eax+000001] на выходе получается mov al, [000001] Что неправильно. Первые 4 кб в программе с нулевыми адресами как раз и служат для отлова ошибок работы с указателями.Операционная система ругается что вы к нулевому(nil) указателю прибавили +1 и пробуете прочитать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 08.07.2021 в 20:39. |
|
![]() |
![]() |
![]() |
#34 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 684
|
![]() Код:
|
![]() |
![]() |
![]() |
#35 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 684
|
![]() Код:
|
![]() |
![]() |
![]() |
#36 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 684
|
![]()
Я вот не пойму...
Код:
Код:
Вопрос: почему? Те же ж самые действия, только регистр другой |
![]() |
![]() |
![]() |
#37 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 684
|
![]()
Проверил интереса ради
ecx и edx работают норм. Только ebx вызывает ошибки |
![]() |
![]() |
![]() |
#38 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 684
|
![]()
Снова три эксперимента
Код:
Код:
Код:
То есть, call StrLen всегда будет давать результат в eax, а в качестве строки использовать последний задействованный регистр? Или это может еще зависеть от процессора, операционки, и т.д. ? |
![]() |
![]() |
![]() |
#39 | |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]()
Согласно соглашению о вызове Вы обязаны сохранить, а потом восстановить регистры EBX, ESI, EDI, и EBP
EBX используется как указатель self на объект. EBP как указатель стека на локальные переменные. Цитата:
EDX нужно будет еще и обнулять перед деление и умножением. Примечание Если входные параметры описаны как const или без-var они используется как входной параметры EDX, ECX. Что тоже требует их сохранения.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
|
![]() |
![]() |
![]() |
#40 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]()
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Несколько вопросов | Rost93 | PHP | 18 | 19.09.2012 19:38 |
Несколько вопросов | shrek1993 | Visual C++ | 3 | 05.08.2012 18:53 |
несколько вопросов по C | Horus92 | Общие вопросы C/C++ | 2 | 15.11.2009 16:08 |
несколько вопросов | fitc | Общие вопросы Delphi | 28 | 14.07.2009 21:20 |
Несколько Вопросов | Дорст | Общие вопросы Delphi | 3 | 12.11.2007 09:18 |