|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.09.2016, 10:48 | #1 |
Пользователь
Регистрация: 13.08.2008
Сообщений: 76
|
Встроенный ассемблер сдвигает на бит
В процедуре изменяется значение dest
При работе, если source 255 (0х11111111) в dest получается 224 (0х11100000) вместо 240 (0х11110000) При отладке в регистре EBX значение правильное, но при помещении в переменную dest какая-то ерунда. Что я сделал неправильно. Код:
|
21.09.2016, 11:19 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
как то странно Вы отлаживаете.
или компилятор другой (у меня Turbo Delphi == Borland® Delphi® for Microsoft® Windows™ Version 10.0.2558.35231 ) смотрите Код:
и возвращается нужное значение: sshot.png |
21.09.2016, 11:21 | #3 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
а зачем вы кросспостите?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
21.09.2016, 11:41 | #4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
ну, тут сложный вопрос.. там он обсуждал ассемблер, тут - уже как Delphi принимает/передаёт параметры...
Хотя, по сути, конечно, две темы - это явный кросспост! я закрою тему http://programmersforum.ru/showthread.php?t=297460 |
21.09.2016, 11:49 | #5 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Turbine, зачем Вы пишете
Цитата:
разве так не лучше? Код:
Цитата:
поэтому корректнее вызывать так: procedure TForm3.Button1Click(Sender: TObject); var sr : uint32; dd : uint8; begin sr := 255; dd := 0; b01_04_hi_asm22(sr, dd); ShowMessage('dd='+IntToStr(dd)); end; |
||
21.09.2016, 12:05 | #6 | |
Пользователь
Регистрация: 13.08.2008
Сообщений: 76
|
Цитата:
Просто ситуация странная. Сдвигает на бит и все тут. Если dest типа байт - 11100000 Если dest сделать типа word, то 0000000111100000 Как получается, что в очевидном алгоритме, когда все верно в регистрах, двигается на бит? Влияют ли на это ключи компилятора или что-то еще? |
|
21.09.2016, 12:08 | #7 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
ещё раз повторяю.
у меня ничего не сдвигает. выложите исходники проекта на Delphi, где у Вас сдвигает. посмотрим. |
21.09.2016, 15:02 | #8 |
Пользователь
Регистрация: 13.08.2008
Сообщений: 76
|
Причина проблемы выяснена. Это косяк компилятора XЕ6. Переписывал по другому. Петрушка та же. Даже если сверять команды с Disassembly написанной на дельфях толку ноль.
На турбо все действительно ок. Но поскольку у товарищей на рабочем месте именно XE6 - то разводим руками. Всем спасибо! Последний раз редактировалось Turbine; 21.09.2016 в 15:08. |
21.09.2016, 19:22 | #9 |
Пользователь
Регистрация: 13.08.2008
Сообщений: 76
|
Спешу поделиться тем, что выяснена и причина глюка. На момент компиляции из 24 ГБ памяти было занято около 18. Причем не игрушками, а обработкой данных. Естественно, перезапуск IDE ничего не давал. Она периодически преподносит чудеса, будучи за пределами 32битных адресов. Лично для себя придется это запомнить РАЗ И НАВСЕГДА. Как всегда помогла перезагрузка.
|
21.09.2016, 20:15 | #10 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Поможет не перезагрузка, а разбор полетов работы с памятью. Вы её где-то загадили самую малость. Вот ваша проблема.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вывод графики встроенный ассемблер Free Pascal | иванлеон | Помощь студентам | 0 | 26.04.2012 14:00 |
Делфи 7 - Встроенный ассемблер | Katus | Помощь студентам | 2 | 05.02.2012 00:19 |
скрол браузера сдвигает контент | Anait | HTML и CSS | 0 | 06.05.2010 12:12 |
Ковертирование из png 24 бит в png 8 бит | isat | Общие вопросы .NET | 0 | 22.03.2010 13:38 |