汇编中的lea si,string1是什么意思?

来源:百度知道 编辑:UC知道 时间:2024/05/22 09:09:55
把下边这个程序给解释一下:
data segment
string1 db 'Hello World!'
len equ $-string1
string2 db len dup(?)
data ends

code segment
main proc far
assume cs:code,ds:data,es:data
start: mov ax,data
mov ds,ax
mov es,ax
lea si,string1
lea di,string2
cld
mov cx,len

rep movsb
mov ah,4h
int 21h
main endp
code ends
end start

data segment
string1 db 'Hello World!' ;定义字符串
len equ $-string1 ;取字符串string1的长度
string2 db len dup(?) ;定义第二个字符串
data ends

code segment
main proc far
assume cs:code,ds:data,es:data
start: mov ax,data
mov ds,ax
mov es,ax ;使当前数据段和当前附加段重叠
lea si,string1 ;将string1的偏移地址放到si中,使si指向string1
lea di,string2 ;将string2的偏移地址放到的di中,使di指向string2
cld ;使方向标志DF=0,每处理完一个数据,地址自动增量
mov cx,len ;为后面的循环做准备

rep movsb ;带重复前缀的数据串操作指令,意思是当cx不为零时,就把当前数据段si指出的那个字节送到当前附加段di指出的那个位置。前面当前数据段和当前附加段已经设置重叠了
mov ah,4h ;这里错误,应该是mov ah,4ch
int 21h ;程序结束,返回操作系统
main endp
code ends
end start
这个程序完成的功能是将string1的内容复制到string2里面去。利用的是重复前缀和数据串操作指令movsb

lea 是取操作数2的地址,放到操作数1中
这个程序的目的是将一个字符串,复制到另一个字符串中。