Копирование переменной в переменную - Assembler
Формулировка задачи:
У меня есть две переменных:
Расположены в смежных адресах,причем в первои во второй переменных может находить любые символы.
Почему они так расположены не спрашивайте,так нужно!
Мне нужно скопировать переменную buf2 в переменную buf.Как это сделать?
[IMG]http://s54.***********/i146/0902/5b/26ccfe865344.jpg[/IMG]
причем команды Lods и Stos не подходяn,они увеличивают автоматически Di и SI ,поэтому нужно как-то без них обойтись,пробовал с ними создать спец цикл,чтобы не декреметировались Si и Di,но не получилось,поэтому с этим не надо мучаться!
buf DB 3 dup (' ') buf2 DB 3 dup (' ')
Решение задачи: «Копирование переменной в переменную»
textual
Листинг программы
addr1 dw offset buf addr2 dw offset buf2 ; ------------------------ mov cx,длина строк m1: mov bx,addr2 mov al,[bx] mov bx,addr1 mov [bx],al inc addr1 inc addr2 loop m1
Объяснение кода листинга программы
- Задачей кода является копирование строки из одного буфера в другой.
- Переменные
addr1
иaddr2
содержат смещения в байтах от начала буферов до начала копируемых строк. - Переменная
cx
содержит длину строки, которую необходимо скопировать. - Цикл
m1
выполняется до тех пор, пока не будет выполнено условие остановки (копирование строки не будет завершено). - Внутри цикла происходит следующее:
- В регистре
bx
сохраняется адрес второго буфера (buf2). - Из буфера по адресу
bx
в регистрal
копируется первый байт строки. - Адрес первого буфера (buf1) сохраняется в регистре
bx
. - В буфер по адресу
bx
записывается байт из регистраal
. - Адреса буферов увеличиваются на 1 байт.
- В регистре
- После выполнения цикла, в буфере buf1 будет содержаться скопированная строка.