Видимо, мне нужно побольше узнать о функциях ассемблера, потому что я ограничиваюсь только lea, mov, jmp, jnz, je, jz, и др.
Про
rep movsb
,
cld
не знал, соответственно не смог выполнить это задание.
cld
mov ecx,processname_len-1
lea esi,[processname+1]
lea edi,[processname]
mov byte al,[edi]
rep movsb
mov byte [edi],al
Этот кусок кода сдвигает строку влево на один символ, перемещая первый символ строки на место последнего. Чтобы не сдвигать завершающий строку нуль-терминатор, при определении strlen добавляем минус один. А в ECX помещаем еще на единицу меньше, так как один символ будет обработан отдельно через регистр AL. В приемник загружаем адрес начала строки, а в источник — адрес второго символа (stroka+1). Перед запуском копирования цепочки байтов сохраняем первый символ в AL. После копирования извлекаем его по адресу, содержащемуся в EDI, — это будет уже адрес последнего символа строки