汇编语言问题

Movcx,10Leadi,namesavMovsi,bxRepmovswMovcx,10Movdi,bxRepmovswMovcx,10Leasi,namesavRep... Mov cx,10
Lea di,namesav
Mov si,bx
Rep movsw

Mov cx,10
Mov di,bx
Rep movsw

Mov cx,10
Lea si,namesav
Rep movsw
这是《IBM-PC汇编语言程序设计》书中例6.11中的一小段,我想问的是,我知道这段是作什么的,可是怎么也理解不了怎么执行的,不知道是逻辑错误还是我的概念错误,能告诉我每一句是怎么执行的吗?越详细越好。
展开
 我来答
还是别说话SN
2011-01-10 · TA获得超过708个赞
知道小有建树答主
回答量:333
采纳率:50%
帮助的人:169万
展开全部
Mov cx,10 ;这是设定后面rep指令的计数器
Lea di,namesav ;把namesav的地址设定为后面movsw指令的目的地址DI
Mov si,bx ;设定BX中的数据为movsw指令的源地址SI
Rep movsw ;反复将DS:SI指向的16位数据拷贝到ES:DI指向的地址,每次拷贝SI和DI都会自动递增拷贝的字长,拷贝次数就是cx中的数字。所以现在的实际效果就是从DS:SI指向的地址拷贝了2*10=20个字节到ES:DI指向的地址,也就是把BX指向的数据转移到了namesav。

Mov cx,10 ;跟第一行一样
Mov di,bx ;这次把原先的源地址BX给了目的指针
Rep movsw ;执行了第四行后,现在的SI=BX+20,这条指令就把DS:SI处的20个字节拷贝到原来BX指向的地址处。也就是把BX指向的内存区域的后20个字节给挪到前面了。

Mov cx,10 ;还是10次
Lea si,namesav ;再把前面用来暂存数据的地址设定为源地址SI,而执行了上一个Rep指令,现在DI=BX+20。
Rep movsw ;再把前面暂存的数据,也就是原先BX指向区域的前20个字节再考贝到BX指向的后20个字节处。

综合起来就是把BX地址处的前20字节和后20字节交换,前提条件是DS和ES的值是一样的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式