2

这是复制 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

移动 esi,0 ; 索引寄存器

为什么它假定索引将从 0 开始它是如何知道 SOURCE 的索引是 0 我认为它应该是

mov esi , offset Source

???

4

2 回答 2

1

看一下

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

esi是“扩展索引寄存器,它将偏移存储在源(字符串)中(有关 ESI/EDI 寄存器的更多信息,请参见此处)。

于 2012-06-08T15:13:43.607 回答
0

source.data部分,这个符号是字符串的起始地址。esi寄存器存储从source地址开始的字节偏移量。eax寄存器的下半部分接收内存在基地址的内容加上esisource内的偏移量(0, 1, 2, 3, ... 随着循环的进行)。

于 2012-06-08T15:19:46.503 回答