Хорошо, я собираюсь об этом, возможно, это действительно сложное решение, но это первое, что пришло мне в голову.
Мне нужно написать программу на языке ассемблера, которая переворачивает «исходную» строку без использования «целевой» строки (временной переменной). Это моя попытка.
INCLUDE Irvine32.inc
.data
source BYTE "This is the source string", 0
count DWORD ?
.code
main PROC
mov ecx, LENGTHOF source
L1:
mov count, ecx ; save our outer loop count
mov al,[source+0] ; get the first character in the string
mov ecx,LENGTHOF source ; set out inner loop count
mov esi, OFFSET source
inc esi
L2:
mov bl,[esi]
dec esi
mov [esi],bl
add esi, 2
loop L2
mov ecx, count
loop L1
mov edx,OFFSET source
call WriteString
exit
main ENDP
END main
Теперь... «алгоритм» для этого в основном таков: выньте первый символ из строки, переместите все остальные символы вниз на одну позицию в массиве символов, поместите символ, который вы вынули первым, в конец массива. Теперь я дошел до того, что это слишком сложно. На самом деле, как мне добраться до конца массива. Думаю, мне понадобится еще один цикл? Мне, конечно, не нужны три петли, и я даже не хочу иметь с этим дело.
Может быть, я на правильном пути и даже не знаю об этом. любые предложения, советы, код или другой алгоритм помогут!