![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 485
|
![]() Код:
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 485
|
![]()
Почему после такого кода
Код:
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 485
|
![]()
Самое забавное, что если использовать регистр ebx - то все ок
|
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,581
|
![]()
Наверное все дело в типе вызова (register), когда параметры передаются через регистры. Вы попросту стираете передаваемое значение присваивая mov ecx, 0. После этого команда mov cl, castota, которая по факту превращается в mov cl, cl (см. в окне ассемблера, предварительно остановив исполнение программ на этой команде), ничего не заносит в регистр cl.
Чтобы в будущем не натыкаться на эти проблемы, тогда стоит указывать тип вызова не использующий для передачи параметров регистры. Например: Код:
Последний раз редактировалось macomics; 24.08.2022 в 16:58. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 485
|
![]()
А вот и объяснение всем загадкам=))
Кстати, ради интереса по crtl+alt+C посмотрел код Некоторые переменные копируются с регистров, а некоторые с оперативки |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 485
|
![]()
Некоторые отправились в процедуру через регистры, а некоторые через оперативку
Вопрос: можно ли как-то в строке процедуры задать какую переменную как конкретно передавать и какую в какой регистр отправлять? И можно ли 2 переменных типа байт, или чар через один регистр передать? |
![]() |
![]() |
![]() |
#7 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,581
|
![]()
Только если напишите свой способ вызова через ассемблерную вставку как inline процедуру.
Задавая названия вызовов выбирать можно из стандартных способов: [pascal], cdecl, register, stdcall [] - тип вызова по умолчанию, задавать это название нет необходимости. Как правило тип вызова определяет порядок передачи аргументов и буфер для их передачи, а также еще вариант очистки от аргументов. Например stdcall отличается от cdecl только тем, что в последнем аргументы из стека очищает вызвавшая подпрограмма. А первый тип предполагает, что эту очистку выполнит вызванная процедура. Но в обоих вызовах аргументы передаются через стек в обратном порядке (сначала последний). Только обычно хватает перечисленных стандартных типов, а вот возня со своим типом вызова обычно требуется только для совместимости с нестандартными библиотеками (например, cdecl добавлен для программ написанных на C/C++; он так и расшифровывается C declaration). Для всех остальных случаев хватает 4-х перечисленных. Последний раз редактировалось macomics; 24.08.2022 в 20:03. |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 485
|
![]()
То есть, я правильно понял? Эта метка означает, что все переменные будут идти через регистры?
Код:
|
![]() |
![]() |
![]() |
#9 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,581
|
![]()
Нет. Только первые 3. Остальные через стек. Но в приведенном примере - все
http://www.delphi-hlp.ru/index.php/w...90b5r997162386 еще safecall - я забыл о нем упомянуть. Последний раз редактировалось macomics; 24.08.2022 в 20:54. |
![]() |
![]() |
![]() |
#10 |
Участник клуба
Регистрация: 09.11.2007
Сообщений: 1,751
|
![]()
Зачем Вы кодите на Delphi, если используете ASM?
|
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Здравствуйте ! в чем проблема,почему почему время исполнения операций не работает ? | ion leahu | Помощь студентам | 6 | 23.11.2014 19:36 |
деление на 0 , ОДЗ :( | jesterXXX | Помощь студентам | 7 | 21.10.2012 23:04 |
Деление в C++ | Юнона | Общие вопросы C/C++ | 10 | 29.05.2011 17:53 |
Деление | Nikita++ | Помощь студентам | 8 | 19.03.2011 18:56 |
Деление a mod b | Emperous | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 02.02.2010 21:10 |