Size: a a a

2020 April 14

b

bilka00 in pro.asm
а то я по привычке играю в посчитай байты для смещения
источник

d

d1vunit in pro.asm
хехе
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Vladimir Sh
Обьяви фиктивную переменную и привяжи к ней регистр как выходной параметр
Хочешь сказать, что компилер её заоптимизирует и ничего не будет генерить код?
источник

VS

Vladimir Sh in pro.asm
Евгений Красников (Jin X)
Хочешь сказать, что компилер её заоптимизирует и ничего не будет генерить код?
Дак скомпили да посмотри выхлоп
источник

VS

Vladimir Sh in pro.asm
Это же просто директива, говорящая компилятору, что состояние регтстра меняется
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Ну да, они удаляются (уже при -O1, остаются только при -O0).
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Но я надеялся, что есть более красивый выход. Может, модификаторы какие-то.
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Спасибо за идею (хотя ведь думал же об этом, но не стал даже пробовать).
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Vladimir Sh
А почему не использовать локальные метки? Ну типа "test eax,eax; jz 1f; inc  eax; 1:"
Да, я в итоге так и сделал. В принципе, 10 шт всегда хватит :))
источник

DV

Dmitrij V in pro.asm
Евгений Красников (Jin X)
Да, я в итоге так и сделал. В принципе, 10 шт всегда хватит :))
Если нужно больше 10, - то логику меток/переходов организовать должным образом и всё:

1: jmp 2f
2: jmp 3f
3: jmp 4f
4: jmp 5f
5: jmp 6f
6: jmp 7f
7: jmp 8f
8: jmp 9f

9: jmp 1f; OR jump to 1b ?

1: jmp 2f
2:
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Dmitrij V
Если нужно больше 10, - то логику меток/переходов организовать должным образом и всё:

1: jmp 2f
2: jmp 3f
3: jmp 4f
4: jmp 5f
5: jmp 6f
6: jmp 7f
7: jmp 8f
8: jmp 9f

9: jmp 1f; OR jump to 1b ?

1: jmp 2f
2:
Такую логику можно сделать проще:
   jmp 1f
1: jmp 1f
1: jmp 1f
1: jmp 1f
1: jmp 1f
1: jmp 1f
Я говорю про случаи, когда метки и jump'ы переплетены. Но это крайне редкие случаи. И тут скорее встанет вопрос именования, т.к. по номерам будет сложно ориентироваться.
источник

DV

Dmitrij V in pro.asm
Евгений Красников (Jin X)
Такую логику можно сделать проще:
   jmp 1f
1: jmp 1f
1: jmp 1f
1: jmp 1f
1: jmp 1f
1: jmp 1f
Я говорю про случаи, когда метки и jump'ы переплетены. Но это крайне редкие случаи. И тут скорее встанет вопрос именования, т.к. по номерам будет сложно ориентироваться.
Мне подобное ветвление понадобилось в собственой реализации Printf (внутри ф-ии пользовал исключительно временные метки)

Ну а в макросах есть такой ещё приём (чтобы имена генерились с числом соответствующему проходу парсера - чтобы при разворачивании макроса не было конфликтов в именах лэйблов, если не ошибаюсь - применимо к GCC/GAS):

.macro my_macro

 my_label\@:

.endm

\@ - будет заменено числом
источник
2020 April 15

d

d1vunit in pro.asm
visual studio compiler в чем ошибка?

__asm
           {
           
               push ax
               push edi
               push ecx
               lahf
               cld
               xor al, al
               mov edi, dword ptr [Address];
               mov ecx, dword ptr [size];
               rep stosb
               sahf
               pop ecx
               pop edi
               pop ax
           
           }
источник

d

d1vunit in pro.asm
он ругается на mov ecx,dword ptr [size]
источник

d

d1vunit in pro.asm
не понимаю просто
источник

d

d1vunit in pro.asm
error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "второй операнд"; обнаружено "]
источник

d

d1vunit in pro.asm
точки запятые я убирал тоже ругается делал так mov ecx,[size] тоже ругается
источник

d

d1vunit in pro.asm
может я так даже подумал mov ecx,size но тоже ругается
источник

ЕК

Евгений Красников (Jin X) in pro.asm
Что такое size, как он объявлен?
источник

d

d1vunit in pro.asm
DWORD Size = POINTER_PE_SECTION_TABLE->SizeOfRawData;
           DWORD Address = POINTER_PE_SECTION_TABLE->Misc.PhysicalAddress;
источник