MOVSB(move string byte)
ES:DI <-- DS:SI
把ds:si所指地址内存单元中的数据送到es:di所指向的内存单元中,源地址数据保持不变,si和di指向下一个要传送的数据
传送的次数(字符串长度)保存在CX寄存器中并用cld/std说明si和di是递增还是递减,最后用REP指令重复执行MOVSB直到cx=0终止
MOV AX,1000H
MOV DS,AX
MOV AX,2000H
MOV ES,AX
MOV SI,0 ;DS:SI 源地址数据
MOV DI,0 ;目的地址
MOV CX,16H ;传送长度 16次 即16个字节
CLD ;SI,DI递增,相当于INC SI INC DI
REP MOVSB ;循环执行movsb 16次 依次将1000:0内存单元处的数据送入2000:0单元处
;rep: cx=16 所以movsb执行了16次
;REP MOVSB 将 CX 个字节从 DS:[SI] 移到 ES:[DI]
执行前内存:
-d ds:0 f
1000:0000 61 20 62 61 74 63 68 20-66 69 6C 65 2E 0D 0A 0D a batch file....
-d es:0 f
2000:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-d ds:0 f
1000:0000 61 20 62 61 74 63 68 20-66 69 6C 65 2E 0D 0A 0D a batch file....
-d es:0 f
2000:0000 61 20 62 61 74 63 68 20-66 69 6C 65 2E 0D 0A 0D a batch file....