Непонятно, что вы пытаетесь сделать.Похоже, вы пытаетесь сделать это (в C, используя более четкие имена):
const char *stra = "hello world";
const char *strb = "hello";
...
printf(stra);
stra = strb;
printf(stra);
Дело в том, что вы не можете иметь ярлык, указывающий, где находится строка, а затем попытаться изменитьэтикетка.Это не имеет смысла - метка не является контейнером или местом в себе, это просто ... метка.Либо сохраните метку в eax, либо измените ее в eax, либо сохраните метку в другой переменной:
push DWORD PTR sptr
call printf
mov eax, strb
mov DWORD PTR sptr, eax
push DWORD PTR sptr
call printf
....
sptr:
.long stra
stra:
.string "hello world"
strb:
.string "hello"
В любом случае что-то подобное!
Редактировать: Просто не в интересах: Если вы хотите изменить страи stra был сохранен в сегменте данных для записи (то есть: .data), вы могли бы сделать:
mov BYTE PTR stra+5, 0
, который записал бы 0 сразу после части "hello" и завершил бы строку в этой точке.Вызов printf напрямую через stra будет выводить «hello».