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 に答える