Скопируйте две струны на сборку

это код для копирования 2 строк

TITLE Copying a String (CopyStr.asm)
INCLUDE Irvine32.inc
.data
source BYTE "This is the source string",0
target BYTE SIZEOF source DUP(0)
.code
main PROC
mov esi,0 ; index register
mov ecx,SIZEOF source ; loop counter
L1:
mov al,source[esi] ; get a character from source
mov target[esi],al ; store it in the target
inc esi ; move to next character
loop L1 ; repeat for entire string
exit
main ENDP
END main

mov esi, 0; индексный регистр

почему он предполагает, что индекс начинается с 0, как он узнал, что индекс ИСТОЧНИКА равен 0, я думаю, что это должно быть

mov esi , offset Source

???


person Osama Al-far    schedule 08.06.2012    source источник
comment
Код полностью дамп, он должен использовать _1 _...   -  person Griwes    schedule 08.06.2012


Ответы (2)


Посмотри на

mov al,source[esi] ; get a character from source

esi - это регистр "E xtended S ource I ndex", в котором хранится смещение в источнике (строке) (подробнее об ESI / EDI регистрирует здесь).

person Alexander Pavlov    schedule 08.06.2012

source находится в разделе .data, этот символ - начальный адрес строки. Регистр esi хранит байтовое смещение, начиная с адреса source. Нижняя часть регистра eax получает содержимое памяти по базовому адресу source плюс смещение внутри esi (0, 1, 2, 3, ... как петля идет).

person Benoit    schedule 08.06.2012