Помощь по FASM, поменять буквы двух строк

Здравствуйте. Я новичок в FASM. Имеется задание по нему : необходимо создать две глобальные переменные, содержащие строки “even” и “odd”. Затем поменять буквы этих двух строк между собой так, чтобы even превратилось в eded (используя две буквы “d” строки odd), а odd - в vdn (буквы “v” и “n” строки even).

Так а проблема в чем именно? Что пробовали? Что не получается?

Проблема в том, что никак не могу написать код рабочий. Слабо синтаксис знаю. А мне всего-лишь сдать преподу это задание надо. Не знаю как обратиться к отдельным буквам этих строк-переменных (чтобы можно было осуществить обмен).

По адресу + смещение.

Образец, если несложно, напишите, пожалуйста.

LEA регистр, переменная; в регистре будет указатель на начало строки
Потом [регистр+смещение] для каждой буквы.

Если правильно понял, то указатель в регистре это его 2-байтовая половина и 1-байтовые части. А [регистр+смещение] это все в одну строку вместе с “lea регистр, переменная” писать?

В команде move, естественно, загуглите хотя бы какой-нибудь пример программ, даже ниже в списке последних тем недавно что-то было про ассемблер. Неужели ни методички ни даже ссылок на электронные ресурсы не дают уже?)

Насчет mov осведомлен. Я не понял, что в данном случае является указателем на начало строки.

Помещаете адрес строки в регистр, а потом обращаетесь к каждой букве через адрес в этом регистре, прибавляя число: [регистр], [регистр+1], [регистр+2]…
http://flatassembler.narod.ru/fasm.htm

1 лайк

Команду lea не принимает, сделал через mov, и подобный синтаксис тоже не принимает…

Скриншот 25-10-2020 190415 Скриншот 25-10-2020 190422

А почему dd?
Из памяти в память нельзя, вначале в регистр нужно, потом из него в память.
И для move:

Метка может быть обработана как константа со значением, равным смещению помеченного кода или данных. Например, если вы определяете данные, используя помеченную директиву “char db 224”, для того, чтобы поместить адрес начала этих данных в регистр BX, вам нужно использовать инструкцию “mov bx,char”, а для того, чтобы поместить в регистр DL значение байта, на который ссылается “char”, нужно использовать “mov dl,[char]”