请教关于一个汇编程序段的问题……

来源:百度知道 编辑:UC知道 时间:2024/06/23 02:01:59
将数据区DATA1中的20个字节传送到DATA2区域内,用程序段实现:
MOV AX,DS
MOV ES,AX
LEA SI,DATA1
LEA DI,DATA2
MOV CX,20
REP MOVSB
HLT
其中前2个语句(即MOV AX,DS MOV ES,AX)有什么作用?为什么要将DS和ES都指向同一个位置呢?不用前两句行不行呢?谢谢!

首先你要弄清楚MOVSB这条指令。他把指针DS:SI所指向的字节传送给指针ES:DI所指向内存单元,并根据标志位DF对寄存器DI和SI作相应增减。因为你的DATA1和DATA2的段地址相同,只是偏移不同,所以才有了这个操作。

段与段不能直接传数据,需要用到寄存器,因此有了MOV AX,DS和MOV ES,AX