三十九、movsw 指令
movsb
movsb
的意思是 move string byte
翻译为:字节传送指令
配合cx寄存器和rep movsb
这个指令,还可以实现批量复制。
执行完movsb
或者rep movsb
指令,si
和 di
的值会增加 1
,或者减少 1
,这取决于 DF
标志位到底是 1
还是 0
。
movsb
movsb
的意思是 mov string word
翻译为:字传送指令
也就是比 movsb
每次多传送 1
个字节。
配合 cx
寄存器和 rep movsw
这个指令,也可以实现批量复制。
执行完 movsw
或者 rep movsw
指令,si
和 di
的值会增加 2
,或者减少 2
,这取决于 DF
标志位到底是 1
还是 0
。
jmp near Code
Data:
;dw 0x1122, 0x3344, 0x5566
db 0xAA, 0x11, 0x22, 0x33, 0x44, 0x55
Code:
mov ax, 0x0050
mov es, ax ;目标地址段寄存器初始化
mov di, 0 ;目标地址偏移寄存器初始化
mov ax, 0x07C0
mov ds, ax ;原始地址段寄存器初始化
mov si, Data ;原始地址偏移寄存器初始化
mov cx, (Code - Data) / 2 ;一次移动一个字,所以要除2
rep movsw ;rep movsw是一条指令
;16位的汇编兼容8位汇编, movsw mov sb
;32位的movsd(double word)
end:
jmp 0x07C0:end
times 510 - ($ -$$) db 0x00
dw 0xAA55 ; 相当于 db 0x55,0xAA