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....