在程序集上复制两个字符串

时间:2012-06-08 15:07:07

标签: string assembly copy masm irvine32

这是复制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开头,它如何知道SOURCE的索引为0 我认为应该是

mov esi , offset Source

???

2 个答案:

答案 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,... ..随着循环的进行)。