Я пытаюсь сделать печать массива встроенной сборкой. Функция printf продолжает интерпретировать значение в стеке как адрес, который необходимо распечатать, и приводит к ошибке (снимок экрана: https://prnt.sc/r692d3). И если я передаю адрес в printf, он выводит такие значения мусора, как эти: (Снимок экрана: https://prnt.sc/r691de). Кроме того, если кто-то знает - как поместить '\n'
в строку со встроенным ASM? Спасибо:)
int main()
{
int mas[5] = { 1,2,3,4,5 };
int32_t diff = sizeof(int);
__asm
{
mov esi, 0x0
lea ecx, [mas]
mov eax, [ecx]
push ecx
call printf; Here it tries to read value '1' as an address
pop eax
loop_t:
xor ebx, ebx; Clear the registers
xor ecx, ecx;
lea ecx, [mas]; ECX = &mas
mov ebx, diff;
add ebx, ecx; &mas + diff
mov eax, [ebx]; Transfer the value
push eax; Push it on stack
call printf; Same thing here, interprets it as an address
pop eax;
add diff, 0x4;
inc esi; Cleanup process and looping back on
cmp esi, 0x5;
jne loop_t;
}
}