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开头,它如何知道SOURCE的索引为0 我认为应该是
mov esi , offset Source
???
答案 0 :(得分:1)
看看
mov al,source[esi] ; get a character from source
esi
是“ E xtended S 源 I ndex”寄存器,它将偏移量存储在源中(字符串) )(更多关于ESI / EDI寄存器here)。
答案 1 :(得分:0)
source
位于 .data 部分,此符号是字符串的起始地址。 esi 寄存器存储从source
地址开始的字节偏移量。 eax 寄存器的下半部分接收source
基地址处的内存内容加上 esi 内的偏移量(0,1,2,3,... ..随着循环的进行)。