读书人

一个汇编题看不太明白啊该怎么处理

发布时间: 2012-02-05 12:07:15 作者: rapoo

一个汇编题,看不太明白啊
现有下列数据段:
DATA SEGMENT
STR1 DB ‘ABCDEFGHIJKL’
COUNT EQU STR1
BUF DB COUNT DUP(0)
DATA ENDS
下面程序段是实现把STR中所有字符逆向传送到BUF缓冲区(STR中第一个字符送到BUF的最后一个单元,STR中最后一字符送到BUF的第一个单元),试把程序中所空缺的指令填上。
MOV SI,OFFSET BUF-1
MOV DI,OFFSET BUF
MOV CX,COUNT
①CLD或①STD
LOOP:MOVSB
②SUB SI,2或②ADD DI,2
LOOP LOP

那个-STR什么意思?还有,是不是不完整啊,LOP没有啊
后边的SUB SI,2什么用?

[解决办法]
特意拿去编译了下。

1.如果没猜错的话应该是:COUNT EQU $ - STR1
表示当前地址到STR1地址的长度,也就是求'ABCDEFGHIJKL'的长度。

2.SUB SI,2 是将SI减去2,以达到逆向传送数据的效果


因为实现逆向复制数据有2种方法,一种就是自己用loop循环,从最高地址开始,每次循环进行减,直到到达最低位置;另一种就是利用movsb,在此前需要设置传输方向,cld表示正向,std表示逆向

当然,也可以使用rep movsb
其效果相当于:
s: movsb
loop s

读书人网 >汇编语言

热点推荐