Как загрузить в регистр CPU значения указателя
|
|
Вторник, 20 Апреля 2021 г. 20:05
+ в цитатник
hd44780: Привет всем. Не знаю, куда правильно помещать тему - сюда или в раздел по ассемблеру.
Пишу функцию обработки изображения на си. Хочу написать на inline ассемблере (точнее надо, это принципиально, неважно).
Заготовка для функции:
void RasterDithering(uint8_t* pPixels, uint32_t dwWidth, uint32_t dwHeight)
{
uint32_t dwOneVal = 1;
uint32_t dwRevWidth;
uint8_t *pPixelData;
__asm
{
mov ebx, [pPixels] ; ebx: = указатель на пиксели
test ebx, ebx ; Выход, если
jz L10 ; указатель == 0
mov [dwOneVal], 1
mov ecx, [dwHeight] ; ecx: = высота картинки
mov eax, [dwRowBytes] ; eax: = длина строки
dec ecx ; ecx: = высота - 1
mul ecx ; edx:eax: = eax * ecx
add ebx, eax ; ebx == pPixelData - указатель на последнюю
mov [pPixelData], ebx ; строку изображения
........................
// lea ecx, [pPixelData] ; ecx = pPixelData; // указатель на последнюю строку изображения
// mov ecx, [pPixelData] ; ecx = pPixelData; // указатель на последнюю строку изображения
mov ecx, pPixelData ; ecx = pPixelData; // указатель на последнюю строку изображения
Все команды до mov [pPixelData], ebx включительно работают нормально и правильно. Надо загнать значение указателя pPixelData в ecx. Да, в данном месте можно сделать mov ecx, ebx и забыть, но после mov [pPixelData], ebx есть масса других команд. Поэтому грузить надо из [pPixelData].
Проблема такая:
Любая из 3 последних команд под отладкой дают ошибку - см скрин.
Как сделать правильно?
Почему mov ebx, [pPixels] вверху работает, а внизу такой же mov ecx, [pPixelData] валится?
спасибо.
____________________.png (, : 23)
https://forum.sources.ru/index.php?showtopic=421354&view=findpost&p=3846582
Метки:
C/C++:
Общие вопросы
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-